算法是对特点问题求解步骤的一种描述。同时具备有5个重要特性:
① 有穷性:一个算法必须重视在执行有穷步之后结束,且每一步都可在有穷时间内完成。
② 确定性:算法中每一条指令必须有确切的含义,读者理解时不会产生二义性。并且,在任何条件下,算法只要唯一的一条执行路径,即对于相同的输入只能得出相同的输出。
③ 可行性:一个算法是能行的,即算法中描述的操作都是可以通过已经实现的基本运算执行有限次来实现的。
④ 输入:一个算法有零个或多个输入,只写输入取之于某个特定的对象的集合。
⑤ 输出:一个算法有一个或多个输出,这些输出视同输入有着某些特定关系的量。
评价算法的两大性能指标:时间复杂度和空间复杂度。
时间复杂度
时间频度
一个算法中的语句执行次数。记为T(n);
时间复杂度
时间频度中,n称为问题的规模,当n不断变化时,时间频度T(n)也会不断变化。为了知道变化时呈现什么规律,引入时间复杂度。
若存在某个函数f(n),当 n –> ∞时,T(n) / f(n) 为不等于0的常数,则称f(n)是T(n)的同数量级函数。记为T(n) = O(f(n));称O(f(n))为算法的渐进时间复杂度,简称时间复杂度。
随之n的增大,时间的增长率和f(n)的增长率成正比。f(n)越小,算法的时间复杂度越低,算法的效率越高。
最坏时间复杂度