演算法的複雜度分為時間複雜度和空間複雜度
其實,時間複雜度實際上就是乙個函式,這個函式呢,它計算的是乙個演算法執行基本操作的次數。
這裡,要明確,為什麼不直接用時間來衡量乙個演算法的優劣,其原因在於乙個演算法在乙個平台上執行時,可能會受到其他因素的影響,比如相同的兩個機器在執行乙個和多個程序時,其響應速度就會不一樣,如果讓它們共同執行乙個演算法程式,那消耗的時間也可能不一樣,而形態的演算法在不同平台上執行的次數是定的,所以其可以判斷乙個演算法的優劣。
1. 時間複雜度的大o漸進表示法
乙個演算法語句總的執行次數是關於問題規模n的某個函式,記為f(n),n稱為問題的規模。語句總的執行次數記為t(n),當n不斷變化時,t(n)也在變化,演算法的執行次數的增長速率和f(n)的增長速率相同。則有t(n)=o(f(n)),稱o(f(n))為時間複雜度的o漸近表示法。
2.時間複雜度o(n)的計算方法
遞迴演算法的時間複雜度=遞迴次數*每次遞迴次數。
例如:
//求1+2+3+...n之和
intsum(int n)
其遞迴總次數是n,函式裡面每次又遞迴了一次,其時間複雜度為o(n);
空間複雜度:函式中建立物件的個數關於問題規模函式表示式,一般情況下用o的漸進表示法表示。
先來看一段**;
這段**的時間複雜度很明顯是o(n),而空間複雜度呢?
平常我們寫斐波那契的演算法是這樣寫的;
long fib(long n)
這樣同樣也可以達到目的,但其時間複雜度是o(n^2),空間複雜度是o(n);效率肯定不如第一種方法,
其第一種方法的空間複雜度是o(n),其採用的是尾遞迴的方法,那什麼是尾遞迴?
尾遞迴:就是函式最後一條執行語句是對函式自身呼叫的語句,第一種方法的最後一條語句就是是對自身的呼叫,而沒有其他變數,這種遞迴就稱為尾遞迴,尾遞迴的乙個好處就是:在某些編譯器下,採用尾遞迴的方法,編譯器會自動對其方法優化,優化後的空間複雜度就是o(1)了。
以上內容為本人自己理解,如有不對,請指正。
資料結構 演算法複雜度
二 演算法的效能評價 三 真題解析 資料結構的第一章 緒論 包含的最後乙個重要內容是關於演算法的複雜度。這個考點一般會單獨出現在選擇題的前兩道,需要你熟練掌握演算法的基本概念 演算法時間複雜度和空間複雜度的分析判斷等。其次,還會出現在大題的程式設計部分,將演算法複雜度作為乙個限制條件,要求你給出滿足...
資料結構之演算法複雜度
解決特定問題求解步驟的描述。在計算機中表現為指令的有限序列,每條指令可表示乙個或多個操作。此外,乙個演算法還具有下列5個特性 有窮性,確定性,可行性,輸入,輸出。演算法設計的要求 正確性,可讀性,健壯性,效率與低儲存量需求。what?時間複雜度和空間複雜度 why?可以用度量演算法的好與壞 how?...
資料結構(二) 演算法複雜度
演算法中執行次數最多的那條語句就是基本語句,測定執行時間就是計算基本語句的執行次數 可以忽略加法常數 與最高此項相乘的常數並不重要 最高次項的指數越大,增長越快 判斷乙個演算法執行效率時,函式中的常數和其他次要項常常可以忽略,更應該關注主項 最高端項 的階數 某個演算法,隨著n增大,它會越來越優於另...