算法學習筆記1(算法、數據結構、算法思想)

一、算法

1、什麼算法

       算法是一組可行的、確定的和有窮的規則。算法是對特定問題的求解步驟的一種精確描述方法。

2、算法的5個特徵

(1)有窮性:算法的指令或者步驟的執行次數必須是有限的。

(2)確切性:算法的每個指令或步驟必須有明確的定義和描述。

(3)輸入:算法應該有相應的輸入條件,用來刻畫運算對象的初始情況。

(4)輸出:有明確的輸出結果。

(5)可行性:執行步驟必須是可行的。

3、算法和公式的關係

公式是一種高度精簡的計算方法,可以認爲是一種算法,而算法並不一定是公式,算法的形式比公式更復雜。

4、算法和數據結構的關係

數據結構是數據的組織形式,可以用來表徵特定的數據對象。

數據結構+算法+程序設計語言=程序

5、算法的表示方法:自然語言表示、流程圖表示、N-S圖表示、僞代碼表示。

6、算法的評價標準

(1)時間複雜度:算法所需消耗的時間越短,算法越好。

(2)空間複雜度:程序的規模越小,執行過程中消耗的資源越少,程序越好。

7、新的算法思想

(1)並行計算:一個任務分多個線程同時計算,加快計算速度。

(2)遺傳算法

(3)量子算法

二、數據結構

1、數據結構中的基本概念

(1)數據:信息的載體,如基本整數、字符、字符串、圖像、聲音等。

(2)數據元素:數據元素是數據的基本單位,也稱爲元素、結點、記錄等。一個數據元素由多個數據項組成,數據項具有獨立含義的最小標識單位,數據項也可以成爲字段、屬性、域。

(3)數據結構:數據的組織形式。

2、數據結構的分類:

(1)線性結構:表中的各個結點具有線性關係。如表、棧、隊列和串等。

(2)非線性結構:表中的各個結點之間具有多個對應關係。數組、廣義表、樹結構、圖結構等。

3、數據結構的存儲方式:

(1)順序存儲方式:一塊連續存儲的區域一個接着一個地方存儲數據。

如數組的存儲方式。

(2)鏈式存儲方式:不要求邏輯上相鄰的結點在物理位置上相鄰,結點件的邏輯關係由附加的指針字段表示。

(3)索引存儲方式:採用附加的索引表的方式來存儲結點信息。

(4)散列存儲方式:根據結點的關鍵字直接計算出該結構的存儲地址的一種存儲方式。

4、數據類型:基本數據類型和聚合數據類型

5、數據結構:

(1)數組

(2)棧:按照後進先出的原則存儲數據。

(3)隊列:只允許在隊的一端插入,另一端刪除。

(4)鏈表:鏈式結構存儲。

(5)樹:一種非線性數據結構,有且僅有一個根結點。

(5)圖:圖是一種非線性結構,其數據結點稱爲頂點。

(6)堆:是一種特殊的數據結構。

(7)散列表

三、算法的基本思想

1、窮舉思想

窮舉思想就是從所有可能的情況中搜索正確的答案。

(1)對於一種可能的情況,計算其結果。

(2)判斷結果是否滿足要求,不滿足則重新執行(1),滿足則表示找到一個正確的答案。

2、遞推思想

根據已有的數據和關係,逐步推到而得到結果。

(1)根據已知結果和關係,求解中間結果。

(2)判斷是否達到要求,沒有達到繼續執行(1),達到要求,則表示尋找到一個正確的答案。

3、遞歸思想

程序中不斷反覆調用自身來達到一種求解問題的方法。遞歸調用是一個函數在它的函數體內調用它自身到的函數調用方式。

遞歸的優點:程序更加簡潔清晰,可讀性更好。

如:利用遞歸進行階乘。

4、分治思想

將一個計算複雜的問題分成若干個規模較小、計算簡單的小問題來進行求解,然後綜合各個小問題,得到最終問題的答案。

  1. 5、概率算法思想

依照概率統計的思路來求解問題的算法,它往往不能得到問題的精確解,但在數值計算領域得到了廣泛的應用。

四、算法的基本應用

1、排序算法

(1)冒泡算法:通過多次比較和交換來實現排序。因爲整個過程類似於水泡浮起的過程,因此而得名。

  1. 對數組中的各個數據,依次比較相鄰的兩個元素的大小。
  2. 如果前面的數據大於後面的數據,則交換這兩個數據。
  3. 然後按照同樣的方法對剩下的數據比較。

對N個數據排序時,需要N-1步的中間排序,優點是簡單直觀,缺點是執行的步驟較長,效率不高。

(2)選擇排序算法:

每一步選取最小值來重新排序,從而達到排序的目的。

  1. 首先從原數組中選擇最小的一個數據,將其和位於第一個位置的數據交換。
  2. 接着從剩下的N-1個數據中選擇次小的一個元素,將其和第2個位置的數據交換。
  3. 不斷重複,直到最後兩個數據交換完成。

N個數據排序時,需要N-1步的中間排序,優點是簡單直觀,缺點是執行的步驟較長,效率不高。

(3)插入排序法

通過比較和插入來實現排序

  1. 對數組的前兩個數據進行從小到大排序
  2. 接着將第三個數據與前兩個數據比較,將第三個數據插入到合適的位置
  3. 然後,將第4個數據插入到已排好序的前三個數據中
  4. 不斷重複以上過程,直到把最後一個數據插入到合適的位置。

N個數據排序時,需要N-1步的中間排序

(4)shell排序

基於插值排序的思想。

(5)快速排序

基於冒泡排序

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章