时间复杂度

一、算法要满足的重要特征

1、 有穷性

2、确定性

3、可行性

4、输入

5、输出

二、程序运行的总时间

执行每条语句的耗时(与硬件相关)+每条语句执行的频率

cpp 复制代码
for(int i = 1;i <= n;i ++) //频度为n+1次 
{
	for(int j = 1;j <= n;j ++) //频度为n*(n+1)次
	{
		c[i][j] = 0; //频度为n*n  
		for(int k = 1;k <= n;k ++)//频度为n*n*(n+1)次
		{
			c[k][j] = 0; //频度为n*n*n 
		}
	}
}

在计算算法时间复杂度时,可以忽略所有低次幂和最高次幂的系数,这样可以简化算法分析

比如上面代码的时间复杂度就是:

f(n) = 2n^3+3n^2+2n+1 即:O(n^3)
注:

(1)对算法时间复杂度的度量,通常只讨论算法在最坏情况下的时间复杂度

(2)只要可以得出确切的数字,不管是一万还是一亿,时间复杂度都是O(1)

三、例子

x++;

s=0;

时间复杂度为O(1)
for(int i = 1;i <= 1000000;i ++) //频度为n+1次

{

}

时间复杂度为O(1)
for(int i = 1;i <= n;i ++) //频度为n+1次

{

}

时间复杂度为O(n)
x++;

s=0;

for(int i = 1;i <= n;i ++) //频度为n+1次

{

for(int j = 1;j <= n;j ++) //频度为n*(n+1)次

{

}

}

for(int i = 1;i <= n;i ++) //频度为n+1次

{

}

时间复杂度为O(n^2)
for(int i = 1;i <= n;i ++) //频度为n+1次

{

for(int j = 1;j <= i;j ++) //频度为n*(n+1)/2次

{

for(int k = 1;k <= j;k ++)

{

}

}

}

时间复杂度为O(n^3)
for(int i = 1;i <= n;i = i*2)

{

x ++;

s = 0;

}

时间复杂度为O(log2(n))

计算:

次数 1 2 3 4 t

i 1 2 4 8 ?

i 2^0 2^1 2^2 2^3 2^(t-1)

2^(t-1) = n 就可以算出来t = log2(n)

**总结:**计算复杂的时间复杂度时,要列表

相关推荐
不知名XL1 分钟前
day50 单调栈
数据结构·算法·leetcode
@––––––16 分钟前
力扣hot100—系列2-多维动态规划
算法·leetcode·动态规划
xsyaaaan28 分钟前
代码随想录Day31动态规划:1049最后一块石头的重量II_494目标和_474一和零
算法·动态规划
Jay Kay1 小时前
GVPO:Group Variance Policy Optimization
人工智能·算法·机器学习
Epiphany.5561 小时前
蓝桥杯备赛题目-----爆破
算法·职场和发展·蓝桥杯
YuTaoShao2 小时前
【LeetCode 每日一题】1653. 使字符串平衡的最少删除次数——(解法三)DP 空间优化
算法·leetcode·职场和发展
茉莉玫瑰花茶2 小时前
C++ 17 详细特性解析(5)
开发语言·c++·算法
cpp_25012 小时前
P10570 [JRKSJ R8] 网球
数据结构·c++·算法·题解
cpp_25012 小时前
P8377 [PFOI Round1] 暴龙的火锅
数据结构·c++·算法·题解·洛谷
uesowys2 小时前
Apache Spark算法开发指导-Factorization machines classifier
人工智能·算法