1.算法分析的要点
1.正确性
2.复杂度的分析
基础知识:
级数:
T(n)=1+2+3+...+n=O(n^2)
T(n)=1^2+2^2+...+n^2=n*(n+1)*(2*n+1)/6=O(n^3)
T(n)=1^3+...+n^3=O(n^4)
可以很明显的看出来,几何级数的复杂度呈现出来的规律就是始终是我们的幂数的+1次幂的复杂度
2.注意事项:
无论n多大,都有可能会出现时间复杂度和n没有任何关系的情况
3.算法正确性的证明:
1.循环不变式的利用
2.单调性(减而知之,规模缩减)
3.正确性(算法必须可以终止)
4.分析举例:
Max2问题的算法分析:查找数列中的最大的两个元素的问题
当然,该问题在我们采用了堆这种高效的数据结构之后,时间复杂度可以优化到无限的接近O(n)
1.迭代:
思路:扫描两遍,分别查找当前最大的元素并标记(避免重复访问)
算法的复杂度分析:O(2n)显然
2.递归:
二分递归查找:我们将数据简化为两部分,左边有最大和次大,右边有最大和次大,之后我们在讲左边的最大和右边的最大进行比较,选择最优,然后让第一次比较的败者和左边的次大作比较选出次大
边界的判断:
在问题的规模缩小到2,或者3的时候,我们特殊的判断一下就好了
其余的情况下,我们都可以按照上面的策略来进行比较
T(n)=(n/3)T(3)+2(n/3-1)
T(n)=5/3T(n)-2