資料結構緒論(3)

2021-08-22 17:48:38 字數 3136 閱讀 3620

目錄

1.3  複雜度度量

1.3.1  漸進分析

1.3.2  大o記號(o,ω,θ)

1.3.3  複雜度影象

1.3.3.1  增長速度

1.3.3.2  層次級別以及一些演算法舉例

1.3.3.3  課後思考

1. 演算法的效率主要看時間消耗與儲存空間消耗,這裡我們遮蔽儲存空間的消耗,僅僅考慮時間的消耗。

2. 大o的定義:t(n) = o(f(n)) ,f(n)為乙個函式。當c > 0,t(n) < c ∗ f(n),即大o記號表示t(n)的乙個上界,其性質為:

o(n) = o(c ∗ n)

o(n^2 + n) = o(n^2)

3. 大ω的定義:t(n) = ω(f(n)) ,f(n)為乙個函式。當c > 0,t(n) > c ∗ f(n),即大o記號表示t(n)的乙個下界。

4. 大θ的定義:t(n) = θ(f(n)) ,f(n)為乙個函式。當c1 > c2 > 0,c1 ∗ f(n) > t(n) > c2 ∗ f(n),即大o記號表示t(n)的乙個區間。

5. 大o記號的分類:

常數類:o(1) = 2 or 2018 or 2018 * 2018,有效

對數類:o(log^c n)與常底數、常數次冪無關,複雜度接近常數,有效。

多項式:o(n^c)

線性:o(n)

指數:c^n = o(2^n)任何c均可。成本增長極快,不是有效的。

6. 時間複雜度t(n) :特定演算法處理規模為n的問題所需的時間,由於n相同,但t(n)不同,===>簡化為:

在規模為n的所有輸入中選擇時間最長者作為t(n),並以t(n)度量演算法的時間複雜度。

7. 漸進時間複雜度:注重時間複雜度隨問題規模n的增長的總體變化趨勢

大o記號(t(n)的漸進上界):

若存在正的常數c和函式f(n),使的對任何n>>2都有: t(n) <= c  *  f(n),即認為在n足夠大之後,f(n)給出了t(n)增長速度的乙個漸進上界,記為:t(n) = o( f(n) )

8. 大o記號性質:

a . 對於任一常數 c > 0, 有o( f(n) ) = o( c * f(n) )  :在大o記號意義下:函式各項正的常係數可以忽略並等同於1

b . 對於任意常數 a > b > 0,有 o( n ^ a + n ^ b ) = o( n ^ a )  :在大o記號意義下:多項式中的低次項均可忽略

9. 空間複雜度(space complexity)是對乙個演算法在執行過程中臨時占用儲存空間大小的量度。乙個演算法在計算機儲存器上所占用的儲存空間,包括儲存演算法本身所占用的儲存空間,演算法的輸入輸出資料所占用的儲存空間和演算法在執行過程中臨時占用的儲存空間這三個方面。

演算法的空間複雜度通過計算演算法所需的儲存空間實現,演算法空間複雜度的計算公式記作:s(n)= o(f(n)),其中,n為問題的規模,f(n)為語句關於n所佔儲存空間的函式。

一般情況下,乙個程式在機器上執行時,除了需要儲存程式本身的指令、常數、變數和輸入資料外,還需要儲存對資料操作的儲存單元。若輸入資料所佔空間只取決於問題本身,和演算法無關,這樣只需要分析該演算法在實現時所需的輔助單元即可。若演算法執行時所需的輔助空間相對於輸入資料量而言是個常數,則稱此演算法為原地工作,空間複雜度為o(1)。

關於o(1)的問題, o(1)是說資料規模和臨時變數數目無關,並不是說僅僅定義乙個臨時變數。舉例:無論資料規模多大,我都定義100個變數,這就叫做資料規模和臨時變數數目無關。就是說空間複雜度是o(1)。

當乙個演算法的空間複雜度為乙個常量,即不隨被處理資料量n的大小而改變時,可表示為o(1);當乙個演算法的空間複雜度與以2為底的n的對數成正比時,可表示為0(10g2n);當乙個演算法的空i司複雜度與n成線性比例關係時,可表示為0(n).若形參為陣列,則只需要為它分配乙個儲存由實參傳送來的乙個位址指標的空間,即乙個機器字長空間;若形參為引用方式,則也只需要為其分配儲存乙個位址的空間,用它來儲存對應實參變數的位址,以便由系統自動引用實參變數。

10. 對於乙個演算法,其時間複雜度和空間複雜度往往是相互影響的。當追求乙個較好的時間複雜度時,可能會使空間複雜度的效能變差,即可能導致占用較多的儲存空間;反之,求乙個較好的空間複雜度時,可能會使時間複雜度的效能變差,即可能導致占用較長的執行時間。另外,演算法的所有效能之間都存在著或多或少的相互影響。因此,當設計乙個演算法(特別是大型演算法)時,要綜合考慮演算法的各項效能,演算法的使用頻率,演算法處理的資料量的大小,演算法描述語言的特性,演算法執行的機器系統環境等各方面因素,才能夠設計出比較好的演算法。

11. 通常,我們都使用「時間複雜度」來指執行時間的需求,使用「空間複雜度」指空間需求。當不用限定詞地使用「複雜度」時,通常都是指時間複雜度。

資料結構 資料結構緒論

資料結構是相互間存在一種或多種特定關係的資料元素的集合。程式設計 資料結構 演算法 資料結構是一門研究非數值計算的程式設計問題中的操作物件,以及他們之間的關係和操作等相關問題的學科。資料元素是組成資料的 有一定意義的基本單位,是計算機中通常作為整體處理,也被稱為記錄。乙個資料元素可以由若干個資料項組...

資料結構 緒論

程式 資料結構 演算法 資料 對客觀事物的符號表示。資料元素 資料的基本單位,由若干個資料項組成。資料項是資料不可分割的最小單位。資料物件 性質相同的資料元素的集合,使資料的乙個子集。資料元素是相互之間存在一種或多種特定關係的資料元素的集合。預定義常量型別 函式結果狀態嗎 define true 1...

資料結構緒論

資料結構是一種抽象資料的過程,這種能力是任何工具都無法代替的。學習資料結構的目的 資料結構是計算機專業的基礎,它為幾乎所有的軟體設計的基礎。同時他也培養求解複雜問題的能力。那麼,什麼是資料結構呢,這個概念是很重要的,人月神話上有一段話,說人們往往喜歡將問題分解開來處理,但是這樣一來造成了對整個問題的...