#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>

 

空间复杂度:指执行这个算法所需要的内存空间。

Source

知识点