引入算法概念:
概念:
算法是计算机处理信息的本质,因为计算机程序本质上是一个算法来告诉计算机确切的步骤来执行一个指定的任务。一般地,当算法在处理信息时,会从输入设备或数据的存储地址读取数据,把结果写入输出设备或某个存储地址供以后再调用。
算法是独立存在的一种解决问题的方法和思想,实现的语言并不重要,重要的是思想
五大特性:
1、输入: 算法具有0个或多个输入
2、输出: 算法至少有1个或多个输出
3、有穷性: 算法在有限的步骤之后会自动结束而不会无限循环,并且每一个步骤可以在可接受的时间内完成
4、确定性:算法中的每一步都有确定的含义,不会出现二义性
5、可行性:算法的每一步都是可行的,也就是说每一步都能够执行有限的次数完成
算法效率衡量:
单靠程序运行时间不能很好的确定代码的执行效率,因为不同机器的运行速度有所不同,运行时间与运行的机器环境有密切关系,所以我们要提出一种单独衡量代码执行效率的标准,可以忽略机器环境的影响而客观的反应算法的时间效率。
时间复杂度与“大O记法”:
“大O记法”: 对于单调的整数函数f,如果存在一个整数函数g和实常数c>0,使得对于充分大的n总有f(n)<=c*g(n),就说函数g是f的一个渐近函数(忽略常数),记为f(n)=O(g(n))。也就是说,在趋向无穷的极限意义下,函数f的增长速度受到函数g的约束,亦即函数f与函数g的特征相似。
时间复杂度: 假设存在函数g,使得算法A处理规模为n的问题示例所用时间为T(n)=O(g(n)),则称O(g(n))为算法A的渐近时间复杂度,简称时间复杂度,记为T(n)
实际应用中,计量算法基本操作数量的规模函数中那些常量因子可以忽略不计。例如,可以认为3n²和100n²属于同一个量级,如果两个算法处理同样规模实例的代价分别为这两个函数,就认为它们的效率“差不多”,都为n²级。
时间复杂度的几条基本计算规则:
1、基本操作: 即只有常数项,认为其时间复杂度为O(1)
2、顺序结构: 时间复杂度按加法进行计算
3、循环结构: 时间复杂度按乘法进行计算
4、分支结构: 时间复杂度取最大值
判断一个算法的效率时,往往只需要关注操作数量的最高次项,其它次要项和常数项可以忽略。
在没有特殊说明时,我们所分析的算法的时间复杂度都是指最坏时间复杂度
常见时间复杂度:
python操作的复杂度:
数据概念:
数据是一个抽象的概念,将其进行分类后得到程序设计语言中的基本类型。如:int,float,char等。数据元素之间不是独立的,存在特定的关系,这些关系便是结构。数据结构指数据对象中数据元素之间的关系。
Python给我们提供了很多现成的数据结构类型,这些系统自己定义好的,不需要我们自己去定义的数据结构叫做Python的内置数据结构,比如列表、元组、字典。而有些数据组织方式,Python系统里面没有直接定义,需要我们自己去定义实现这些数据的组织方式,这些数据组织方式称之为Python的扩展数据结构,比如栈,队列等。
算法与数据结构的区别: