1.算法分析是什么
The analysis of algorithm is the theoretical study of computer program performance and resource usage.算法分析是理论研究关于计算机程序性能和资源利用的研究。
1.我们首要关注性能(效率)
2.也许比性能更重要的
a.正确性
b.可维护性
c.简洁
d.健壮性
e.功能性:模块化:它是否经由这样的设计方法你只需要修改局部的代码而不是全部以便对功能进行一定的修改变化。
3.为什么关注性能
a:算法能够将不可行变成可行:对于实时需求而言行与不行取决于执行时间和占用内存的大小,程序不快就代表不可行,占用资源多也不可行。
b:算法是一种描述程序行为的语言。
c:它所扮演的角色就如同经济中的货币一般:例如java比C慢三倍左右,但支持面向对象的特性,
你想用java前提是你的程序性能要高,在编程许多东西是通过牺牲性能实现的,又如解释型语言python更慢,你只有保证更高的性能,才能牺牲一部分性能去换取其他东西。
2.算法的重要性
算法将不可行变为可行。
算法是一种描述程序行为的语言
speed is everything
3.排序问题
将一组数(A[1~n])按大小顺序(从小到大)排序。
插入排序
伪码:
for j ← 2 to n
do key ← A[j]
i ← j-1
while i > 0 and A[i] >key
do A[i+1] ← A[i]
i ← i-1
A[i+1] ← key
运行时间:
取决于输入数据的有序性。
取决于输入数据的规模。
关注运行时间的上限,作为对用户的保证。
分析方法:
最坏情况
取决于计算机性能。
通常描述不使用绝对速度,关注相对速度。
平均情况
期望时间,每种输入消耗的时间与这种输入出现的概率的乘积之和。
需要对输入情况做出假设,通常假设为均匀分布。
最好情况
假象(用于欺骗用户),意义不大。
大局观 渐进分析:
不关注实际运行时间。
关注运行时间如何增长(随输入数据的规模增加时的增长情况)。
渐进符号Θ,去掉函数的低阶项和最高阶项系数。
分析函数循环的层数。
4.归并排序
排序步骤:
n为1时,已经完成排序。
n大于1时,递归的对A[1n/2向上取整]这部分以及A[n/2+1向上取整n]这部分排序。
将排序好的两个表合并,比较两个表,依次取出最小者到输出序列中。
构造递归树:
归并排序的递归树
归并排序时间复杂度为Θ(nlgn)。