算法:特定的计算模型下,解决特定问题的指令序列。
算法要具有:
确定性 —— 由基本操作组成的序列
有穷性与正确性 —— 经过有穷次基本操作,可以解决指定的问题
可行性 —— 每一个基本操作都可以实现
这些是基本的,好的算法还要有鲁棒性,能处理各种退化情况。还要提高算法的可读性。
对于算法,最重要的是效率!
算法的复杂度包括时间复杂度和空间复杂度。每一次运行过程中消耗的存储空间,都不会多于操作次数,时间复杂度是空间复杂度的一个上界。除非针对特殊情况,一般不考试空间复杂度。
度量渐进复杂度,常用大O记号,大O记号意味着最坏情况,例如起泡排序中的完全逆序。最好的情况情况与平均情况应用较少。
算法的复杂度情况:
O(1)常数复杂度,O(logn)对数复杂度,O(n)线性复杂度,O(n^c)多项式复杂度,O(2^N)指数复杂度。
O(n^c)与O(2^n)是有效算法与无效算法的分界。