回覆列表
  • 1 # 此生唯一

    時間複雜度通常是指特定計算量所需要的時間度量,通俗來說就是幹一件事所需要的時間!

    通常時間複雜度使用大O表示法進行表示,比如常數級別O(1),線性級別O(n),對數級別O(logn),平方級別O(n²)等等!

    為什麼要計算(統計)時間複雜度度呢?我們知道網際網路催生了大量資料,而資料的操作無外乎增刪改查,怎麼提高這些操作的效率呢?呢?演算法改進,從簡單的二分查詢,二叉樹,到索引,hash等!。。。畢竟同一件事,完成時間越短越好,這是金主們願意看到的!

    下面看下大O表示法怎麼表示時間複雜度例子:比如用計算量作為x軸,時間作為y軸!

    O(1):常數級別,時針轉一圈的時間永遠是12個小時,這是一個常數!在座標軸上面就是一條橫線!

    O(n):線性級別,你出去旅行距離不固定,無論你是騎車,還是步行,總是滿足你的速度和距離成正比,s=10n;座標軸上是一條擁有斜率的斜線!

    O(logn):對數級別,我們都玩過猜數字的遊戲,先指定一個數(比如100),然後從0-128開始猜這個數,我們特殊化處理,比如下一家猜了64,那麼就從64-128中間猜,下一家猜96,那麼就從96-128再猜,直到找到100,這在演算法中被稱為二分法查詢,你找到的次數假設為n,那麼只要保證2的n次方大於128即可,也就是n<log以2為底128的對數=7,換句話說,你只要7次就能找到這個數!而如果你從0-128順序查詢,你就需要100次才能找到!

    O(n²):平方級別,通常氣泡排序就為平方級別的複雜度!

    .....

    除此之外,二叉樹的時間複雜度也為O(log2n)級別,為什麼二叉樹(以及升級版的紅黑樹,B樹等)效率那麼高?比如2的30次方為1073741824,如果順序查詢平均需要5億次以上,而使用二叉樹只需要30次就可以找到!效率差得不是一星半點。。。

    網際網路行業,無處不在講究效率,減少時間!好的程式碼離不開好演算法!更多的演算法知識,敬請關注。。。

  • 中秋節和大豐收的關聯?
  • 汽車開進水裡了怎麼辦?