数据结构与算法之大 O 复杂度

文章通过两个代码示例介绍了大O时间复杂度的概念,说明了如何计算代码执行时间与数据规模的关系。大O表示法描述了代码执行时间随数据量增长的渐进趋势,不关注具体时间值,而是关注增长速度。第一个例子展示了线性时间复杂度O(2n+2),第二个例子展示了二次时间复杂度O(2n^2+2n+3)。
摘要由CSDN通过智能技术生成

举两个例子来推算大O的由来

假设每行代码执行的时间都一样,为 unit_time。在这个假设的基础之上,这段代码的总执行时间是多少呢?

例一


 int cal(int n) {
   int sum = 0;            //1 个 unit_time
   int i = 1;              //1 个 unit_time
   for (; i <= n; ++i) {   //n个 unit_time
     sum = sum + i;        //n个 unit_time
   }
   return sum;
 }
//所以这段代码总的执行时间就是 (2n+2)*unit_time

可以看出来,所有代码的执行时间 T(n) 与每行代码的执行次数成正比。

我们依旧假设每个语句的执行时间是 unit_time。那这段代码的总执行时间 T(n) 是多少呢?


 int cal(int n) {
   int sum = 0;            //1 个 unit_time
   int i = 1;              //1 个 unit_time
   int j = 1;              //1 个 unit_time
   for (; i <= n; ++i) {   //n 个 unit_time
     j = 1;                //n 个 unit_time
     for (; j <= n; ++j) { //n*n 个 unit_time
       sum = sum +  i * j; //n*n 个 unit_time
     }
   }
 }
//整段代码总的执行时间 T(n) = (2n2+2n+3)*unit_time

尽管我们不知道 unit_time 的具体值,但是通过这两段代码执行时间的推导过程,我们可以得到一个非常重要的规律,那就是,所有代码的执行时间 T(n) 与每行代码的执行次数 f(n) 成正比。我们可以把这个规律总结成一个公式

T(n)=O(f(n))

具体解释一下这个公式。其中,T(n) 我们已经讲过了,它表示代码执行的时间;n 表示数据规模的大小;f(n) 表示每行代码执行的次数总和。因为这是一个公式,所以用 f(n) 来表示。公式中的 O,表示代码的执行时间 T(n) 与 f(n) 表达式成正比。

第一个例子中的 T(n) = O(2n+2),第二个例子中的 T(n) = O(2n2+2n+3)。这就是大 O 时间复杂度表示法。大 O 时间复杂度实际上并不具体表示代码真正的执行时间,而是表示代码执行时间随数据规模增长的变化趋势,所以,也叫作渐进时间复杂度(asymptotic time complexity),简称时间复杂度。

此文章为4月Day30学习笔记,内容来源于极客时间《数据结构与算法之美》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值