第三章 算法分析
数据结构:组织和访问数据的一种系统化方式
算法:是在有限的时间里一步步执行某些任务的过程
3.1实验研究
*算法时间必须要有限,这样才有意义,算法时间的长短对于评价一个算法好坏也至关重要
from time import time
start_time = time()
run algorithm
end_time = time()
elapsed = end_time-start_time #记录运行秒数
上面这个方法并不完美,他记录的是cpu的运行时间,由于计算机往往不可能只运行当前算法,所以还有一种更公正的方法就是度量算法使用的CPU周期的数量。
算法的运行时间一般认为依赖于输入的大小和结构,所以有时候我们可以将不同输入的算法运行性能可视化,这样可以帮助我们在对实验数据进行统计分析时,以寻找出核试验数据的最好的输入大小函数
*算法分析的三个局限性:
1.很难直接比加两个算法的试验时间
2.实验不包含在实验中的输入的运行时间
3.算法必须完全实现才有意义
*计算原子操作
原子操作包括给对象指定标识符;给这个标识符的关联变量确定出来;将其直接进行的算术运算;比较运算;索引访问;函数调用;返回函数。
我们考虑算法执行,就是看其包含了多少原子操作。
3.2本书的7种函数
3.2.1 常数函数
3.2.2 对数函数
一般在计算机科学中,我们令b=2,应为计算机储蓄整数用的是二进制,所以在计算机科学,我们把
默认为
(不同于计算器上的log一般默认以十为底)
有时候用近似值来取代,那就是
(向上取整)。
(注:
)
3.2.3 线性函数
3.2.4 nlog n函数
(函数特点:增长速度快鱼线性函数,慢于二次函数)
3.2.5 二次函数
(嵌套循环中内外层循环操作次数)
3.2.6 三次函数和其他多项式
3.2.7 指数函数
3.2.8 比较增长率
3.3渐近分析
3.3.1大○符号
若函数f(n)恒小于等于c*g(n),存在c为实型常量,那么我们就称f(n)为g(n)的大○.其中,大○符号意味着给定常数因子且在渐近意义上n趋于无穷时,函数
大Ω:与大○相反,表示的是一个函数的增长速率大于或等于零一个函数,即
,则f(n)为g(n)的大Ω
大θ:增长速率相同,即
3.3.2比较分析
我们通过算法运行时间来描述高效与不高效算法,
3.3.3算法分析示例
(看不下去了。。。)