資料結構和演算法緒論

2021-09-10 06:04:35 字數 3511 閱讀 4300

• 程式設計 = 資料結構 + 演算法

資料結構就是關係,沒錯,就是資料元素相互之間存在的一種或多種特定關係的集合。

資料型別:是指一組性質相同的值的集合及定義在此集合上的一些操作的總稱。

原子型別:是不可以再分解的基本型別,包括整型、實型、字元型等。

結構型別:自若干個型別組合而戚,是可以再分解的。例,整型陣列是由若干整型資料組成的。

抽象:是指抽取出事物具有的普遍性的本質。

抽象資料型別(abstract data type,adt) : 是指乙個數學模型及定義在該模型上的一組操作。

資料結構的分類:邏輯結構、物理結構。

邏輯結構:是指資料物件中資料元素之間的相互關係,也是我們今後最需要關注和討論的問題。

物理結構:是指資料的邏輯結構在計算機中的儲存形式。

從邏輯上可以把資料結構分為線性結構和非線性結構,主要包括:

集合結構:集合結構中的資料元素除了同屬於乙個集合外,它們之間沒有其它關係

線性結構:線性結構中資料元素之間是一對一的關係

樹形結構:樹形結構中的資料元素之間存在一種一對多的層次關係

圖形結構:資料元素是多對多的關係

資料的物理結構又稱之為儲存結構包括以下兩種儲存方式:

順序儲存:是把資料元素存放在位址連續的儲存單元裡,其資料間的邏輯關係和物理關係是一致的。

鏈式儲存:是把資料元素存放在任意的儲存單元裡,這組儲存單元可以是連續的,也可以是不連續的。

演算法:演算法是解決特定問題求解步驟的描述,在計算機中表現為指令的有限序列,並且每條指令表示乙個或多個操作。

演算法具有五個基本特徵:輸入、輸出、有窮性、確定性和可行性。

• 輸入:演算法具有零個或多個輸入。

• 輸出:演算法至少有乙個或多個輸出。

• 有窮性:指演算法在執行有限的步驟之後,自動結束而不會出現無限迴圈,並且每乙個步驟在可接受的時間內完成。

• 確定性:演算法的每乙個步驟都具有確定的含義,不會出現二義性。演算法在一定條件下,只有一條執行路徑,相同的輸入只能有唯一的輸出結果。演算法的每個步驟都應該被精確定義而無歧義。

• 可行性:演算法的每一步都必須是可行的,也就是說,每一步都能夠通過執行有限次數完成。

演算法設計的要求:

• 正確性

演算法的正確性是指演算法至少應該具有輸入、輸出和加工處理無歧義性、能正確反映問題的需求、能夠得到問題的正確答案。

大體分為以下四個層次:

演算法程式沒有語法錯誤。

演算法程式對於合法輸入能夠產生滿足要求的輸出。

演算法程式對於非法輸入能夠產生滿足規格的說明。

演算法程式對於故意刁難的測試輸入都有滿足要求的輸出結果。

• 可讀性

演算法設計另一目的是為了便於閱讀、理解和交流。

寫**的目的,一方面是為了讓計算機執行,但還有乙個重要的目的是為了便於他人閱讀和自己日後閱讀修改。

• 健壯性

當輸入資料不合法時,演算法也能做出相關處理,而不是產生異常、崩潰或莫名其妙的結果。

• 時間效率高和儲存量低

演算法的度量方法:

• 事後統計方法:這種方法主要是通過設計好的測試程式和資料,利用計算機計時器對不同演算法編制的程式的執行時間進行比較,從而確定演算法效率的高低。

缺陷:必須依據演算法事先編制好測試程式,通常需要花費大量時間和精力。

• 事前分析估算方法:在電腦程式編寫前,依據統計方法對演算法進行估算。

乙個高階語言編寫的程式在計算機上執行時所消耗的時間取決於下列因素:

• 演算法採用的策略,方案

• 編譯產生的**質量

• 問題的輸入規模

• 機器執行指令的速度

拋開這些與計算機硬體、軟體有關的因素,乙個程式的執行時間依賴於演算法的好壞和問題的輸入規模。(所謂的問題輸入規模是指輸入量的多少)。

函式的漸近增長:給定兩個函式f(n)和g(n),如果存在乙個整數n,使得對於所有的n>n,f(n)總是比g(n)大,那麼,我們說f(n)的增長漸近快於g(n)。

• 判斷乙個演算法的效率時,函式中的常數和其他次要項常常可以忽略,而更應該關注主項(最高項)的階數。

演算法時間複雜度的定義:在進行演算法分析時,語句總的執行次數t(n)是關於問題規模n的函式,進而分析t(n)隨n的變化情況並確定t(n)的數量級。演算法的時間複雜度,也就是演算法的時間量度,記作:t(n)= o(f(n))。它表示隨問題規模n的增大,演算法執行時間的增長率和f(n)的增長率相同,稱作演算法的漸近時間複雜度,簡稱為時間複雜度。其中f(n)是問題規模n的某個函式。

• 這樣用大寫o()來體現演算法時間複雜度的記法,我們稱之為大o記法。

• 一般情況下,隨著輸入規模n的增大,t(n)增長最慢的演算法為最優演算法。

分析乙個演算法的時間複雜度、即如何推導大o階呢?:

• 用常數1取代執行時間中的所有加法常數。

• 在修改後的執行次數函式中,只保留最高端項。

• 如果最高端項存在且不是1,則去除與這個項相乘的常數。

• 得到的最後結果就是大o階。

常數階、線性階、平方階、對數階

o(1) < o(logn) < o(n) < o(nlogn) < o(n^2 ) < o(n^3 ) < o(2^n ) < o(n!) < o(n^n)

o(1)常數階、o(logn)對數階、o(n)線性階、o(n^2 )平方階、o(2^n )指數階、o(n!)階乘階

最壞情況:執行時間是一種保證,那就是執行時間將不會再壞了。在應用中,這是一種最重要的需求,通常,除非特別指定,我們提到的執行時間都是最壞情況的執行時間。

平均執行時間是所有情況中最有意義的,因為它是期望的執行時間。

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

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

使用"時間複雜度"來指執行時間的需求,使用"空間複雜度"指空間需求。

資料結構和演算法緒論

讓程式設計改變世界 change the world by program 資料結構和演算法這門計算機必修課歷來無論在哪個學校,都是無比乏味和催人入睡的。因為很多時候,考研玩的不是智商,其實就是乙個人投入的時間而已。什麼是資料結構?資料結構是一門研究非數值計算的程式設計問題中的操作物件,以及它們之間...

資料結構和演算法緒論

資料是資訊的載體,是描述客觀事物的數 字元,以及所有能輸入到計算機中並被電腦程式識別和處理的符號的集合。資料結構是一門研究非數值計算的程式設計問題中的操作物件,以及它們之間的關係和操作等相關問題的學科 簡單來說 程式設計 資料結構 演算法 資料結構研究的就是關係,就是資料元素相互之間存在的一種或多種...

資料結構和演算法緒論

資料結構和演算法緒論 資料結構是一門研究非數值計算的程式設計問題中的操作物件,以及他們之間的關係和操作等相關問題 程式設計 資料結構 演算法 簡單說,資料結構就是關係,資料元素相互之間存在的一種 或多種特定關係的集合 資料結構分為 邏輯結構 和物理結構 邏輯結構 是指資料物件中資料元素直接的相互關係...