1.学习算法的理由:
算法是程序的灵魂
数据结构+算法=程序
提高分析问题的能力
2.算法的性质:
有零个或多个输入
至少产生一个量作为输出
组成算法的每条指令是清晰的,无歧义的
每条指令的执行次数是有限的,执行每条指令的时间也是有限的
3.算法复杂性分析:
考虑到最坏、最好和平均情况。最具有价值的是最坏情况下的时间复杂性。
为什么用渐进分析?
虽然有时候能够精确分析运行时间,但没有必要花大力气算出额外的精确度。当输入规模达到一定程度时,算法复杂性只与运行时间的增长量级有关,就是在研究算法的渐进效率.所以说可以直接算复杂度,但没必要。
2种渐进分析的记号:
渐进上界(大O):O描述增长率的上界,上界的阶越低结果越有价值
常见的大O运行时间:
O(logn):如二分查找
O(n):如简单查找
O(nlogn),如快速排序
O(n2):如选择排序
O(n!):如旅行商问题
渐进下界(),与上相似
非紧上界o
非紧下界