相信大家對于算法的時間復雜度O都不會陌生,不過你知道一個算法的時間復雜度是如何計算出來的嗎?
以前在學習算法和數據結構的時候,對于每種算法的復雜度都是死記的并沒有真正的去研究他們是如何計算出來,最近突然對算法產生了興趣,迫使自己研究了一下算法復雜度的計算方法。
概念
大O表示法表示時間復雜性,注意它是某一個算法的時間復雜性。大O表示只是說有上界,由定義如果f(n)=O(n),那顯然成立f(n)=O(n^2),它給你一個上界,但并不是上確界,但人們在表示的時候一般都習慣表示前者。
另外除了這個官方概念,個人認為大O表示的是問題規模n和算法中語句執行次數的關系。
以二分查找為例,我們求解它的時間復雜度
1 設規模為n個元素時,要執行T(n)次
T(n)=T(n/2)+1
T(n)=[T(n/4)+1]+1
…
T(n)=T(n/2^m)+m
當n=2^m
T(n)=T(1)+log2n
T(1)=1
所以其算法復雜度為O(log2n)