20201215
算法与数据结构——Python版本
算法的概念:告诉计算机确切的偶来执行一个指定的任务(独立存在(与语言无关)的解决问题的方法与思想)
算法的五大特性
1、输入:大于等于0
2、输入:必须要有一个(解决的问题的答案)
3、有穷性:算法在有限的步骤自动结束不会无限的循环,每一步可以在可接受的范围内
4、确定性:算法的每一个都有具体的含义,不会出现二义性
5、可行性:可以用计算机的语言进行表达
时间复杂度
问题:为什么要引入时间复杂度?
单看时间的话不准确,离不开计算机环境对其的影响
时间复杂度:基本步骤的执行数量,大致评估时间复杂度的数量级,是基本执行步骤数量的渐进函数
渐进函数:g(n)其实是f(n)的渐进函数,在趋向无穷的极限意义下,函数f的增长速度小收到了g函数的约束,使得两者之间的特征相同 f(n)<=c*g(n),c是常数
相对应的还有空间复杂度
问题:对于同样的算法,由于数据的不同,具体的执行步骤不一致。有理想状态和最坏的状态,如何剔除数据不同导致的复杂度上的变化?
提出了三个概念
最坏执行的时间:提供了一种最坏的保障
最优执行的时间:价值不大,最优情况下一般难以出现
平均时间复杂度:处理问题规模的平均状态
常见的时间复杂度函数
需要背的
O(1)<o(logn)<o(n)<o(nlogn)<o(n2)<o(n2logn)<o(n3) <o(2n) <o(n!) <o(nn)
抽象数据类型(ADT)
即把数据类型和数据类型上的运算捆在一起,进行封装。引入抽象数据类型的目的是把数据类型的表示和数据类型上运算的实现与这些数据类型和运算在程序中的引用隔开,使它们相互独立。
最常用的数据运算有五种:
插入
删除
修改
查找
排序