美文网首页
极客时间算法摘录

极客时间算法摘录

作者: 小白猿 | 来源:发表于2021-06-08 10:54 被阅读0次

    时间复杂度分析

    1.原则

    • 只关注循环执行次数最多的一段代码
    • 加法法则:总复杂度等于量级最大的那段代码的复杂度
    如果 T1(n)=O(f(n)),T2(n)=O(g(n));
    那么 T(n)=T1(n)+T2(n)=max(O(f(n)), O(g(n))) =O(max(f(n), g(n))).
    
    • 乘法法则:嵌套代码的复杂度等于嵌套内外代码复杂度的乘积
    如果 T1(n)=O(f(n)),T2(n)=O(g(n));那么 
    T(n)=T1(n)*T2(n)=O(f(n))*O(g(n))=O(f(n)*g(n)).
    

    2.常见复杂度分析

    O(1) 常量级复杂度

    • 代码的执行时间不随着n的增大而增大,这样的时间复杂度为O(1)
    • 算法中不存在循环语句,递归语句等.基本可以认为是O(1)

    O(logn)、O(nlogn)

    • 一个是涉及到a个数的b次方等于n的时候,可以考虑O(logn),而对数阶时间复杂度的表示方法里,我们忽略对数的“底”,统一表示为 O(logn)
    • O(nlogn) 可以用乘法法则解释为O(nlogn) = O(n) * O(logn),即O(logn)的场景下,执行了n次

    m n 两种规模下的的加法和乘法法则 O(m+n)、O(m*n)

    
    int cal(int m, int n) {
      int sum_1 = 0;
      int i = 1;
      for (; i < m; ++i) {
        sum_1 = sum_1 + i;
      }
    
      int sum_2 = 0;
      int j = 1;
      for (; j < n; ++j) {
        sum_2 = sum_2 + j;
      }
    
      return sum_1 + sum_2;
    }
    
    • m 和 n 是表示两个数据规模。我们无法事先评估 m 和 n 谁的量级大,所以我们在表示复杂度的时候,就不能简单地利用加法法则,省略掉其中一个。所以,上面代码的时间复杂度就是 O(m+n)。
    • 针对这种情况,原来的加法法则就不正确了,我们需要将加法规则改为:T1(m) + T2(n) = O(f(m) + g(n))。但是乘法法则继续有效:T1(m)*T2(n) = O(f(m) * f(n))。

    相关文章

      网友评论

          本文标题:极客时间算法摘录

          本文链接:https://www.haomeiwen.com/subject/sgbqsltx.html