数据结构和算法之时间复杂度

前言

       学习数据结构和算法,并不是为了死记硬背几个知识点。我们的目的是建立时间复杂度、空间复杂度意识,写出高质量的代码,能够设计基础架构,提升编程技能,训练逻辑思维,积攒人生经验,以此获得工作回报,实现你的价值,完善你的人生。
       掌握了数据结构与算法,你看待问题的深度,解决问题的角度就会完全不一样。因为这样的你,就像是站在巨人的肩膀上,拿着生存利器行走世界。数据结构与算法,会为你的编程之路,甚至人生之路打开一扇通往新世界的大门。

对数据结构和算法,要学习它的来历、自身的特点、适合解决的问题和实际的应用场景
最常用的、最基础数据结构与算法:
10 个数据结构:数组、链表、栈、队列、散列表、二叉树、堆、跳表、图、Trie 树;
10 个算法:递归、排序、二分查找、搜索、哈希算法、贪心算法、分治算法、回溯算法、动态规划、字符串匹配算法。

我们需要一个不用具体测试就可以粗略地估计算法的执行效率的方法。这就是时间、空间复杂度分析方法,即大 O 复杂度表示法。

1 时间复杂度

       所有代码的执行时间 T(n) 与每行代码的执行次数 n 成正比,因此我们用T(n) = O(f(n))来表示代码执行时间,即大 O 时间复杂度表示法。
       大O 时间复杂度实际上并不具体表示代码真正的执行时间,而是表示代码执行时间随数据规模增长的变化趋势。n 很大时,你可以把它想象成 10000、100000。而公式中的低阶、常量、系数三部分并不左右增长趋势,所以都可以忽略。我们只需要记录一个最大量级就可以了。

1.1 分析方法

  1. 只关注循环执行次数最多的一段代码
 int cal(int n) {
   
   int sum = 0;
   int i = 1;
   for (; i <= n; ++i) {
   
     sum = sum + i;
   }
   return sum;
 }

其中第 2、3 行代码都是常量级的执行时间,与 n 的大小无关,所以对于复杂度并没有影响。循环执行次数最多的是第 4、5 行代码,所以这块代码要重点分析。前面我们也讲过,这两行代码被执行了 n 次,所以总的时间复杂度就是 O(n)。

  1. 总复杂度等于量级最大的那段代码的复杂度
int cal(int n) {
   
   int sum_1 = 0;
   int p = 1;
   for (; p < 100; ++p) {
   
     sum_1 = sum_1 + p;
   }

   int sum_2 = 0;
   int q = 1;
   for (; q < n; ++q) {
   
     sum_2 = sum_2 + q;
   }
 
   int sum_3 
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值