基本概念:
資料:計算機中可以操作的物件;
資料元素:組成資料的,有一定意義的基本單位;
資料項:乙個資料元素可由若干個資料項組成。
對於順序結構來說,刪除和插入不方便;而對於物理結構來說,查詢不方便。
時間複雜度:
一般情況下,使用o漸進表示法來計算演算法的時間複雜度。
一般演算法o(n)計算方法:
(1)先找總執行次數(迴圈對應乘法;順序對應加法);
(2)給次數加上o( );
(3)用常數1取代執行時間中的所有加法常數;
(4)在修改後的執行次數函式中,只保留最高端項;
(5)如果最高端項係數存在且不是1,則去除與這個項相乘的常數。
遞迴演算法的時間複雜度:遞迴總次數*每次遞迴次數。
折半查詢的時間複雜度為:o(lgn)。
空間複雜度:函式中建立物件的個數關於問題規模函式表示式,一般情況下用o漸進表示法表示。
以求第5個斐波那契數為例畫圖分析,求時間複雜度和空間複雜度:
要求第五個斐波那契數,必須知道第四個和第三個斐波那契數;
而要求第四個斐波那契數,必須知道第三個和第二個斐波那契數;
進而要求第三個斐波那契數,必須知道第二個和第乙個斐波那契數。
採用尾遞迴實現斐波那契演算法
int main()
分析:假設求第6個斐波那契數,傳的實參依次為:
(1,1,6);
(1,2,5);
(2,3,4);
(3,5,3)當n==3時,結束遞迴。
採用迴圈實現斐波那契演算法
long fib(long first,long second,long n)
while(1)
n--;
}}int main()
分析:假設求第6個斐波那契數:
第一次迴圈:i=6, ret=0, tmp=1, f=1, s=tmp+s=2;
第二次迴圈:i=5, ret=0, tmp=1, f=2, s=tmp+s=3;
第三次迴圈:i=4, ret=8, tmp=2, f=3, s=tmp+s=5;
時間複雜度和空間複雜度
同一問題可用不同演算法解決,而乙個演算法的質量優劣將影響到演算法乃至程式的效率。演算法分析的目的在於選擇合適演算法和改進演算法。乙個演算法的評價主要從時間複雜度和空間複雜度來考慮。1 時間複雜度 1 時間頻度 乙個演算法執行所耗費的時間,從理論上是不能算出來的,必須上機執行測試才能知道。但我們不可能...
時間複雜度和空間複雜度
1 時間複雜度 1 時間頻度乙個演算法執行所耗費的時間,從理論上是不能算出來的,必須上機執行測試才能知道。但我們不可能也沒有必要對每個演算法都上機測試,只需知道哪個演算法花費的時間多,哪個演算法花費的時間少就可以了。並且乙個演算法花費的時間與演算法中語句的執行次數成正比例,哪個演算法中語句執行次數多...
時間複雜度和空間複雜度
演算法的時間複雜度和空間複雜度合稱為演算法的複雜度。1.時間複雜度 1 時間頻度 乙個演算法執行所耗費的時間,從理論上是不能算出來的,必須上機執行測試才能知道。但我們不可能也沒有必要對每個演算法都上機測試,只需知道哪個演算法花費的時間多,哪個演算法花費的時間少就可以了。並且乙個演算法花費的時間與演算...