时间复杂度

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

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)

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

相关推荐
小超人诞生日记11 小时前
C++ 智能指针的使用及其原理详解
c++·算法
lisw0513 小时前
互联网上的数据结构可视化!
数据结构·信息可视化
AiNightVision14 小时前
无人机夜视模块如何选择?——从参数指标到系统集成的完整选型指南
人工智能·算法·计算机视觉·车载系统·无人机·视频·智能硬件
牧羊人.33315 小时前
卷积神经网络之VGG
人工智能·深度学习·神经网络·算法·cnn
小郎君65816 小时前
Vue 多标签页的加载态设计:为什么我没有用 Suspense 实现 PageLoading
vue.js·算法
JJJennie77716 小时前
MAI Gateway私有化部署全攻略:大模型网关如何接入?附架构图
算法·gateway·ai网关·魔芋ai
東隅已逝,桑榆非晚16 小时前
算法3.双指针法-快乐数
c++·笔记·学习·算法
专注仿真17 小时前
卷积神经网络(CNN)算法详解
人工智能·python·算法·代码·大模型训练
FII工业富联科技服务17 小时前
多智能体如何进入制造现场?从业务协同到数字孪生验证
大数据·人工智能·算法·机器人·制造·数字孪生
≮傷£≯√17 小时前
httpserver_QNetWorkClient
算法