時間複雜度通常是指特定計算量所需要的時間度量,通俗來說就是幹一件事所需要的時間!
通常時間複雜度使用大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次就可以找到!效率差得不是一星半點。。。
網際網路行業,無處不在講究效率,減少時間!好的程式碼離不開好演算法!更多的演算法知識,敬請關注。。。
時間複雜度通常是指特定計算量所需要的時間度量,通俗來說就是幹一件事所需要的時間!
通常時間複雜度使用大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次就可以找到!效率差得不是一星半點。。。
網際網路行業,無處不在講究效率,減少時間!好的程式碼離不開好演算法!更多的演算法知識,敬請關注。。。