数据结构 ——— 算法的时间复杂度
在实际中我们计算时间复杂度时,并不一定要计算精确的执行次数,只需要大概的执行次数,那么就需要使用大O的渐进表示法
目录
时间复杂度的概念
在计算机科学中,算法的时间复杂度是一个函数(数学上的函数式),它定量描述了该算法的运行时间,一个算法执行所耗费的时间,从理论上说,是不能算出来的,只有把程序放在机器上跑起来,才能知道
所以才有了时间复杂度这个分析方式,一个算法所花费的时间于其中语句的执行次数成正比例,算法中的基本操作的执行次数,为算法的时间复杂度
时间复杂度函数式
代码演示:
#include<stdio.h>
int main()
{
int N = 0;
scanf("%d", &N);
int count = 0;
// 循环1
for (int i = 0; i < N; i++)
{
for (int j = 0; j < N; j++)
{
count++;
}
}
// 循环2
for (int k = 0; k < N * 2; k++)
{
count++;
}
// 循环3
int M = 10;
while (M--)
{
count++;
}
printf("%d\n", count);
return 0;
}
问:以上代码中的 count++ 语句执行了多少次?
代码解析:
循环1执行了 N*N 次 ;循环2执行了 N*2 次 ;循环3执行了 10 次
时间复杂度函数式:F(N) = N*N + N*2 + 10
N = 10 F(N) = 130
N = 100 F(N) = 10210
N = 1000 F(N) = 1002010
代码验证:
大O的渐进表示法的概念
在实际中我们计算时间复杂度时,并不一定要计算精确的执行次数,只需要大概的执行次数,那么就需要使用大O的渐进表示法
大O的渐进表示法
大O符号:是用于描述函数渐进行为的函数符号
推导大O阶的方法:
- 用常数1取代运行时间中的所有加法常数
- 在修改后的运行次数函数中,只保留最高阶项
- 如果最高阶项存在且不是1,则去除与这个项目相乘的常数,得到的结果就是大O阶
使用大O的渐进表示法后,以上时间复杂度函数式:F(N) = N*N + N*2 + 10 就被改写为了:O(N^2)
N = 10 F(N) = 100
N = 100 F(N) = 10000
N = 1000 F(N) = 1000000
结论:
去掉了那些低阶项,大O的渐进表示法对结果的影响不大,且更加简洁明了的表示出了执行次数

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐
所有评论(0)