算法和算法分析
1.算法的定义及特性
- 定义:算法(Algorithm)是解决某类问题而规定的一个有限长的操作序列。
-
算法必须满足的五个重要特性
- 有穷性。一个算法总是在执行有穷步后结束,且每一步都必须在有穷的时间内完成。
- 确定性。对于每种情况下所执行的操作,在算法中都有确切的规定,不会产生二意性,既对相同的输入只能得到相同的输出。
- 可行性。算法的所有操作都可以通过已经实现的基本操作运算执行有限次来实现。
- 输入。一个算法有零个或多个输入。
- 输出。一个算法有一个或多个输出,它是算法进行信息加工后得到的结果,无输出的算法没有任何意义。
-
评价算法优劣的基本标准
- 正确性。在合理的数据输入下,能够在有限的时间内得到正确的结果。
- 可读性。可读性强的算法有助于人们对算法的理解,而难懂的算法易于隐藏错误,且难与调试和修改。
- 健壮性。当输入的数据非法时,好的算法能够做出正确反映或进行相应处理,而不会产生一些莫名其妙的输出结果。
- 高效性(高效率和低存储量需求)。高效性包括时间和空间两个方面。时间高效是指算法设计合理,执行效率高,可以用时间复杂度来衡量;空间高效是指算法占用存储容量合理。可以用空间复杂度来衡量。时间复杂度和空间复杂度是衡量算法的两个主要指标。
- 注意:要区分清楚算法的定义及特性和评价算法优劣的基本标准。
-
2.算法的时间复杂度
- 定义:算法中基本语句重复执行的次数是问题规模n的某个函数f(n),算法的时间量度记作T(n)=O(f(n)) ,它表示随问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称作算法的渐近时间复杂度,简称时间复杂度(Time Complexity)。
- 时间复杂度是由嵌套最深层语句的频度决定的。在计算时间复杂度时,可以忽略所有低次幂项和最高次幂的系数。
- 对于算法时间复杂度的度量,人们最关心的是在最坏情况下和平均情况下的时间复杂度。
-
3.算法的空间复杂度
- 算法的空间复杂度S(n)定义为该算法所耗费的存储空间,它是问题规模n的函数。
- 算法原地工作是指算法所需的辅助空间为常量,即O(1)。