数据结构 ——— 算法的时间复杂度

羊蹓狼  论坛元老 | 2024-9-27 01:33:44 | 来自手机 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 1023|帖子 1023|积分 3069

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
目次
时间复杂度的概念
时间复杂度函数式
大O的渐进表示法的概念
大O的渐进表示法

时间复杂度的概念

在计算机科学中,算法的时间复杂度是一个函数(数学上的函数式),它定量描述了该算法的运行时间,一个算法执行所耗费的时间,从理论上说,是不能算出来的,只有把程序放在呆板上跑起来,才气知道
所以才有了时间复杂度这个分析方式,一个算法所耗费的时间于此中语句的执行次数成正比例,算法中的根本操作的执行次数,为算法的时间复杂度

时间复杂度函数式

代码演示:
  1. #include<stdio.h>
  2. int main()
  3. {
  4.         int N = 0;
  5.         scanf("%d", &N);
  6.         int count = 0;
  7.         // 循环1
  8.         for (int i = 0; i < N; i++)
  9.         {
  10.                 for (int j = 0; j < N; j++)
  11.                 {
  12.                         count++;
  13.                 }
  14.         }
  15.         // 循环2
  16.         for (int k = 0; k < N * 2; k++)
  17.         {
  18.                 count++;
  19.         }
  20.         // 循环3
  21.         int M = 10;
  22.         while (M--)
  23.         {
  24.                 count++;
  25.         }
  26.         printf("%d\n", count);
  27.         return 0;
  28. }
复制代码
问:以上代码中的 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的渐进表示法对结果的影响不大,且更加简洁明确的表示出了执行次数 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

羊蹓狼

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表