算法定义:解决特定问题的求解步骤的描述.

算法特性:有穷性、确定性、可行性、输入、输出

算法的设计要求:正确性、可读性、健壮性、高效率和低存储量需求

算法度量方法:事后统计方法(不科学)、事前分析估算方法


函数的渐近增长:给定两个函数f(n)和g(n),如果存在一个整数N,使得对于所有的n>N,f(n)总是比g(n)大,那么我们说f(n)的增长渐近快于g(n)。

于是,可以得出结论:判定一个算法好不好,可以对比算法的关键执行次数函数的渐近增长性,基本就可以分析出:某一个算法,随着n的变大,它会越来越优于另一个算法,或者越来越差于一个算法。


推导大O阶的步骤:

  • 用常数1取代运行时间中的所有加法常数

  • 在修改后的运行次数函数中,只保留最高阶项

  • 如果最高阶项存在且不是1,则去除与这个项目相乘的常数

得到的结果就是大O阶


通过这个步骤,我们可以得到算法的运行次数表达式后,很快可以得到它的时间复杂度,即大O阶。

推导大O阶很容易,但是如何得到运行次数的表达式却是需要数学功底的。

常见时间复杂度排序:

O(1)<O(logn)<O(n)<O(nlongn)<O(n^2)<O(n^3)<O(2^n)<O(n!)<O(n^n)