算法分析

       通过以基本的计算模型作为参照,并以大O记号的形式在上面加上适当的刻度就形成了对DSA(数据结构和算法)分析的完整工具和体系。

        如何运用上述工具对DSA进行分析(包括主要的思路和方法)?

        与上述工具建立的思路一致 ,在运用上述工具时依然要使用“去粗存精”的思路。算法分析的能力如何,取决于能否真正的自如驾驭上述工具来完成去粗存精的估算,最高境界就是像大数学家欧拉运用数学一样形成一种“本能”。

        算法分析的任务主要分为两个方面=正确性(不变性*单调性)+复杂度。

        C++等高级语言的基本指令,均等效于常数条RAM的基本指令;在渐进意义下,二者大体相当。

        分支转向:goto  //算法的灵魂;出于结构化考虑,被隐藏了。

        迭代循环:for()、while()、...  //本质上就是“if+goto”。

        调用+递归(自我调用)  //本质上也是goto。

        复杂度的基本分析方法:

        1、迭代:级数求和;

        2、递归:递归跟踪+递推方程;

        3、猜测加验证。

        级数:

        1、算术级数:与末项平方同阶,1+2+3+...+n=n(n+1)/2=O(n^2);

        2、幂方级数:比幂次高出一阶,1^3+2^3+3^3+...+n^3=O(n^4);

        3、几何级数(a>1):与末项同阶,a^0+a^1+a^2+...+a^n=O(a^n);

        4、收敛级数:1+1/2^2+...+1/n^2=O(1);

        5、调和级数:1+1/2+1/3+...+1/n=O(logn);

        6、log1+log2+log3+...+logn=log(n!)=O(nlogn).

 

        

 

你可能感兴趣的:(数据结构,算法)