算法分析(1)-循环的时间复杂度
来源:互联网 发布:自行车运动软件 编辑:程序博客网 时间:2024/06/03 14:52
在这篇文章中,我们用简单的循环程序进行分析讨论时间复杂度。
1) O(1)
一个函数调用或是一组语句都认为是O(1)的复杂度 (如果没有调用不包含循环,递归或其他非常量复杂度的函数)。
view source
1
// set of non-recursive and non-loop statements
例如函数 swap() 是 O(1)的时间复杂度. 如果循环的次数是一个常量,则也认为是 O(1)
view source
1
//这里C为常数
2
for
(
int
i = 1; i <= n; i += c) {
3
//一些 O(1) 的语句
4
}
5
for
(
int
i = n; i > 0; i -= c) {
6
//一些 O(1) 的语句
7
}
2) O(n)
如果在一个大小为n循环中,循环变量按照一个常量C递增或递减,这个循环的复杂度就为O(n).
view source
1
// c是常量
2
for
(
int
i = 1; i <= n; i += c) {
3
// some O(1) expressions
4
}
5
6
for
(
int
i = n; i > 0; i -= c) {
7
// some O(1) expressions
8
}
3) O(nc)
嵌套循环的时间复杂度等于行最内层语句执行的次数。例如,下面的示例循环具有为O(n 2)的时间复杂度
view source
01
for
(
int
i = 1; i <=n; i += c) {
02
for
(
int
j = 1; j <=n; j += c) {
03
// some O(1) expressions
04
}
05
}
06
07
for
(
int
i = n; i > 0; i += c) {
08
for
(
int
j = i+1; j <=n; j += c) {
09
// some O(1) expressions
10
}
例如选择排序和插入排序具有为O(n 2)的时间复杂度。
4) O(Log n)
如果在一个大小为n循环中,循环变量按照一个常量C的进行倍数的递增或递减,这个循环的复杂度就为O(Log n).
view source
1
for
(
int
i = 1; i <=n; i *= c) {
2
// some O(1) expressions
3
}
4
for
(
int
i = n; i > 0; i /= c) {
5
// some O(1) expressions
6
}
5) O(Log Log n)
如果在一个大小为n循环中,循环变量是指数级的递增或递减,这个循环的复杂度就为O(Log log n).
view source
1
// c为比1大的常量
2
for
(
int
i = 2; i <=n; i =
pow
(i, c)) {
3
// some O(1) expressions
4
}
5
//这里的 fun 函数可以是sqrt 或 cuberoot 或任何其他恒定的根
6
for
(
int
i = n; i > 0; i = fun(i)) {
7
// some O(1) expressions
8
}
如何计算连续循环的复杂性?
当有连续的循环,我们计算时间复杂度为时间各个循环的复杂总和。
view source
1
for
(
int
i = 1; i <=m; i += c) {
2
// some O(1) expressions
3
}
4
for
(
int
i = 1; i <=n; i += c) {
5
// some O(1) expressions
6
}
7
上面的时间复杂度 O(m) + O(n) = O(m+n)
8
如果 m == n 就是 O(2n),也可缩写为 O(n) 常量可以忽略不计
如果循环中有许多if …else 如何计算时间复杂度?
一般情况我们只考虑最快情况下的复杂度。例如考虑线性搜索函数,我们只考虑元素出现在最后或没有该元素。
如何计算时间的递归函数的复杂性?
递归函数一般可以写成一个数学递推关系。为了计算时间复杂度,我们必须知道如何解决递归公式,这个问题将在后面讨论。
http://www.geeksforgeeks.org/analysis-of-algorithms-set-4-analysis-of-loops/
0 0
- 算法分析(1)-循环的时间复杂度
- ACM算法-时间复杂度分析(4.有关时间复杂度循环的分析)
- 桶排序与带循环的算法时间复杂度分析
- 算法的时间复杂度分析
- 算法的时间复杂度分析
- 算法的时间复杂度分析
- 算法的时间复杂度分析
- 分析算法的时间复杂度
- 算法时间复杂度分析(1)
- 循环嵌套的时间复杂度分析
- 算法时间复杂度分析
- 算法时间复杂度分析
- 算法分析时间复杂度
- 分析算法时间复杂度
- 算法时间复杂度分析
- 算法时间复杂度分析
- 算法时间复杂度分析
- 算法-时间复杂度分析
- Rotate Array
- 互联网协议入门(二)
- Makefile 中:= ?= += =的区别
- PCA and SVD
- Mac中配置java环境
- 算法分析(1)-循环的时间复杂度
- 源代码加密软件
- leetcode Path Sum
- 运算符重载之->为下标成员运算符,而不是指针
- Matlab资料汇总暨MATLAB中文论坛帖子整理(二)
- OpenCV Error: Assertion failed (size.width>0 && size.height>0) in cv::imshow
- ubuntu terminal theme with
- 算法训练 操作格子
- HDU 1873 看病要排队