#P2579. 算法复杂度
算法复杂度
Description
算法是对特定问题求解步骤的描述,算法有5个重要特征。
(1) 有穷性:对于任意一组合法的输入,算法能在有限的时间内完成。
(2) 确定性:算法的每一步有明确的定义,没有歧义。
(3) 输入:算法应有0个或多个输入。(一般0个输入指的是有些算法的输入是嵌入到算 法之中的)
(4) 输出:算法应有1个或者多个输出。
(5) 可行性:算法必须遵循特定条件下的解题规则,算法描述的操作都应该是特定规 则中允许使用的、可执行的,并通过执行有限次来实现。
常见的算法有:穷举、高精度计算、排序、递推、递归、贪心、分治、搜索、动态规划等。
1、算法复杂度
影响程序运行时间的因素:
(1)计算机的计算速度; (2)计算数据的大小; (3)算法的效率;
一个算法的评价一般从时间复杂度和空间复杂度来考虑。
时间复杂度:指算法所需要的计算工作量,用算法所执行的基本运算次数来度量。常见的时间复杂度有:常数阶O(1),对数阶O(log2N),线性阶O(N),线性对数阶O(N* log2N),平方阶O(N2),立方阶O(N3),指数阶(2N)等,上述时间复杂度随着问题规模N的增加,时 间复杂度不断增加,算法效率降低。
时间复杂度的计算步骤:
求解算法的时间复杂度的具体步骤是:
1、 找出算法中的基本语句:
算法中执行次数最多的那条语句就是基本语句,通常是最内层循环的循环体。
2、 计算基本语句的执行次数的数量级:
(1) 只需计算基本语句执行次数的数量级,这就意味着只要保证基本语句执行次数的 函数中的最高次幕正确即可,可以忽略所有低次幕和最高次幕的系数。
(2) 这样能够简化算法分析,并且使注意力集中在最重要的一点上:增长率。
3、 用大O记号表示算法的时间性能:
(1) 将基本语句执行次数的数量级放入大O记号中。
(2) 如果算法中包含嵌套的循环,则基本语句通常是最内层的循环体,如果算法中包 含并列的循环,则将并列循环的时间复杂度相加。例如:
第一个for循环的时间复杂度为O(n),第二个for循环的时间复杂度为O (n2),则整 个算法的时间复杂度为O(n+n2)=O(n2)。
下面按从快到慢的顺序列出了你经常会遇到的5种大O运行时间。(时间复杂度只需要
</div>
计算到对应的数量级,不需要计算到具体的值)
(1) O(log n),也叫对数时间,这样的算法包括二分查找。
(2) O(n),也叫线性时间,这样的算法包括简单查找。
(3) O(n * log n),这样的算法包括快速排序一一一种速度较快的排序算法。
(4) O(n2),这样的算法包括第选择排序、冒泡排序一一一种速度较慢的排序算法。
(5) O(n!),这种情况很少见,n越大,所消耗的时间就越慢。
大O表示法是一种特殊的表示法,指出了算法的速度有多快。例如,假设列表包含n个 元素。简单查找需要检查每个元素,因此需要执行n次操作,这个运行时间为O(n)。
一般不特别说明,讨论的时间复杂度均是最坏情况下的时间复杂度。这就保证了算法的 运行时间不会比任何其他情况更长。
</div>
空间复杂度:指执行这个算法所需要的内存空间。