1 算法是一种独立存在的解决问题的思想和方法
2 算法5大特性
2.1 输入(具有0个或多个)
2.2 输出(具有1个或多个输出)
2.3 有穷性(有限步骤可以处理,每个步骤可以在有限时间内处理)
2.4 确切性(算法中每一步都有确切的含义,没有二义性)
2.5 可行性(算法中每一步都是可行的,都能够执行有限次数完成)
3 大O计法
对于算法的时间性质和空间性质,最重要的是其数量级和趋势,这些事分析算法效率的主要部分,而计量算法基本操作数量的规模函数中的常量因子可以忽略不计。
假设存在函数g,使得算法A处理规模为n的问题示例所用时间为T(n)=O(g(n)),则称O(g(n))为算法A的渐进时间复杂度。
4 时间复杂度的几个概念
最优时间复杂度:算法完成工作最少需要多少基本操作
最坏时间复杂度:算法完成工作最多需要多少基本操作
平均时间复杂度:算法完成工作平均需要多少基本操作
5 时间复杂度的几条基本计算规则
① 基本操作,即只有常数项,认为其时间复杂度为O(1)
② 顺序结构,时间复杂度按加法进行计算
③ 循环结构,时间复杂度按乘法进行计算
④ 分支结构,时间复杂度取最大值
⑤ 判断一个算法效率时,往往只关注操作数量的最高次项,其它次要项和常数项可以忽略
⑥ 在没有特殊说明时,我们所分析的算法的时间复杂度都是指最坏时间复杂度
6 常见时间复杂度时间排序
O(1)<O(logn)<O(n)<O(nlogn)<O(n2)<O(n3)<O(2n)<O(n!)<O(nn)
7 代码时间计算模块timeit
timeit模块用于测算代码执行时间,基本格式为:
timeit.Timer(‘程序段’,’路径’)
示例:
导入模块
import timeit
定义要测算的代码块
def add(): w=0 for t in range(100): w+=t return w
计算代码块执行需要的时间
t=timeit.Timer(‘add()’,’from __main__ import add’) t1=t.timeit(number=1000)
8 python内置类型性能分析
8.1 列表
类型 |
时间复杂度 |
类型 |
时间复杂度 |
类型 |
时间复杂度 |
index[] |
O(1) |
del operator |
O(n) |
reverse |
O(n) |
indexassignment |
O(1) |
iteration |
O(n) |
concatenate |
O(k) |
append |
O(1) |
contains(in) |
O(n) |
sort |
O(nlogn) |
pop() |
O(1) |
get slice[x:y] |
O(k) |
multiply |
O(nk) |
pop(i) |
O(n) |
del slice |
O(n) |
||
insert(i,item) |
O(n) |
set slice |
O(n+k) |
8.2 字典表
类型 |
时间复杂度 |
类型 |
时间复杂度 |
类型 |
时间复杂度 |
copy |
O(n) |
get item |
O(1) |
set item |
O(1) |
delete item |
O(1) |
contains(in) |
O(1) |
iteration |
O(n) |
9 数据结构
9.1 基本概念
数据结构:数据的组织方式
内置数据结构:python自身定义好的数据结构
扩展数据结构:使用过程中我们自己定义的数据结构
程序=数据结构+算法
抽象数据类型:把基础数据和其支持的操作放在一起形成一个整体,即把数据类型和数据类型的上的操作捆在一起,进行封装。