先簡要介紹一下:
演算法複雜度分為時間複雜度和空間複雜度。其作用:時間複雜度是指執行這個演算法所需要的計算工作量;而空間複雜度是指執行這個演算法所需要的記憶體空間。時間和空間(即暫存器)都是計算機資源的重要體現,而演算法的複雜性就是體現在執行該演算法時的計算機所需的資源多少。
時間複雜度:
1:演算法的時間複雜度反映了程式執行時間隨輸入規模增長而增長的量級,在很大程度上能很好地反映出演算法的優劣與否;
2:演算法執行時間需要依據該演算法編制的程式在計算機上執行執行時所消耗的時間來度量,度量方法有兩種,事後統計方法和事前分析估算方法,因為事後統計方法更多的依賴計算機的硬體,軟體等環境因素,有時容易掩蓋演算法本身的優劣。因此常常採用事前分析估算的方法;
3:乙個演算法是由控制結構(順序,分支,迴圈三種)和原操作(固有資料型別的操作)構成的,而演算法時間取決於兩者的綜合效率;
4:乙個演算法花費的時間與演算法中語句的執行次數成正比,執行次數越多,花費的時間就越多。乙個演算法中的執行次數稱為語句頻度或時間頻度。記為t(n);
5:在時間頻度中,n稱為問題的規模,當n不斷變化時,它所呈現出來的規律,我們稱之為時間複雜度(其實在這中間引入了乙個輔助函式f(n),但它與t(n)是同數量級函式,我們且先這樣理解。)
6:在各種演算法中,若演算法中的語句執行次數為乙個常數,則時間複雜度為o(1);同時,若不同演算法的時間頻度不一樣,但他們的時間複雜度卻可能是一樣的,eg:t(n)=n^2+2n+4 與 t(n)=4n2+n+8,他們的時間頻度顯然不一樣,但他們的時間複雜度卻是一樣的,均為o(n2),時間複雜度只關注最高數量級,且與之係數也沒有關係。
7: 求解演算法的時間複雜度的具體步驟是:
⑴ 找出演算法中的基本語句;
演算法中執行次數最多的那條語句就是基本語句,通常是最內層迴圈的迴圈體。
⑵ 計算基本語句的執行次數的數量級;
只需計算基本語句執行次數的數量級,這就意味著只要保證基本語句執行次數的函式中的最高次冪正確即可,可以忽略所有低次冪和最高次冪的係數。這樣能夠簡化演算法分析,並且使注意力集中在最重要的一點上:增長率。
⑶ 用大ο記號表示演算法的時間效能。
將基本語句執行次數的數量級放入大ο記號中。
如果演算法中包含巢狀的迴圈,則基本語句通常是最內層的迴圈體,如果演算法中包含並列的迴圈,則將並列迴圈的時間複雜度相加
下面我來舉乙個簡單例子:
for(i=1;i<=n;i++)
;for(i=1;i<=n;i++)
}第乙個for迴圈的時間複雜度為o(n),第二個for迴圈時間複雜度為o(n2),則整個演算法的時間複雜度為o(n2+n)。
o(1)表示基本語句的執行次數是乙個常數,一般來說,只要演算法中不存在迴圈語句,時間複雜度就為o(1)。
空間複雜度(space complexity):
1:空間複雜度是對乙個演算法在執行過程中臨時占用儲存空間大小的量度;
2:乙個演算法在計算機上占用的記憶體包括:程式**所占用的空間,輸入輸出資料所占用的空間,輔助變數所占用的空間這三個方面,程式**所占用的空間取決於演算法本身的長短,輸入輸出資料所占用的空間取決於要解決的問題,是通過參數列呼叫函式傳遞而來,只有輔助變數是演算法執行過程中臨時占用的儲存空間,與空間複雜度相關;
3:通常來說,只要演算法不涉及到動態分配的空間,以及遞迴、棧所需的空間,空間複雜度通常為0(1);
4: 對於乙個演算法,其時間複雜度和空間複雜度往往是相互影響的。當追求乙個較好的時間複雜度時,可能會使空間複雜度的效能變差,即可能導致占用較多的儲存空間;反之,求乙個較好的空間複雜度時,可能會使時間複雜度的效能變差,即可能導致占用較長的執行時間。另外,演算法的所有效能之間都存在著或多或少的相互影響。因此,當設計乙個演算法(特別是大型演算法)時,要綜合考慮演算法的各項效能,演算法的使用頻率,演算法處理的資料量的大小,演算法描述語言的特性,演算法執行的機器系統環境等各方面因素,才能夠設計出比較好的演算法。
時間複雜度和空間複雜度
同一問題可用不同演算法解決,而乙個演算法的質量優劣將影響到演算法乃至程式的效率。演算法分析的目的在於選擇合適演算法和改進演算法。乙個演算法的評價主要從時間複雜度和空間複雜度來考慮。1 時間複雜度 1 時間頻度 乙個演算法執行所耗費的時間,從理論上是不能算出來的,必須上機執行測試才能知道。但我們不可能...
時間複雜度和空間複雜度
1 時間複雜度 1 時間頻度乙個演算法執行所耗費的時間,從理論上是不能算出來的,必須上機執行測試才能知道。但我們不可能也沒有必要對每個演算法都上機測試,只需知道哪個演算法花費的時間多,哪個演算法花費的時間少就可以了。並且乙個演算法花費的時間與演算法中語句的執行次數成正比例,哪個演算法中語句執行次數多...
時間複雜度和空間複雜度
演算法的時間複雜度和空間複雜度合稱為演算法的複雜度。1.時間複雜度 1 時間頻度 乙個演算法執行所耗費的時間,從理論上是不能算出來的,必須上機執行測試才能知道。但我們不可能也沒有必要對每個演算法都上機測試,只需知道哪個演算法花費的時間多,哪個演算法花費的時間少就可以了。並且乙個演算法花費的時間與演算...