1. 程式人生 > >資料結構 嚴蔚敏 第一章知識點

資料結構 嚴蔚敏 第一章知識點

第一章 緒論

學習導圖
在這裡插入圖片描述

  1. 基本概念和術語
  • 資料結構是一門研究非數值計算的程式設計問題中計算機的操作物件以及它們之間的關係和操作等的學科。
    資料結構是指相互之間存在一種或多種特定關係的資料元素的集合
    (資料結構,直白地理解,就是研究資料的儲存方式。)
  • 資料(data)—所有能輸入到計算機中去的描述客觀事物的符號
  • 資料元素(data element)—資料的基本單位,也稱節點(node)或記錄(record)
  • 資料項(data item)—有獨立含義的資料的不可分割的最小單位,一個數據元素可由若干個資料項組成。
  • 資料結構(data structure)—資料元素和資料元素關係的集合
    在這裡插入圖片描述
  1. 資料按邏輯關係可歸結為四類:
  • 集合結構
  • 線性結構
  • 樹形結構
  • 圖狀結構或網狀結構

資料的邏輯結構有兩個要素:資料元素和關係。

資料的邏輯結構 — 抽象反映資料元素的邏輯關係
資料的儲存(物理)結構 — 資料結構在計算機中的表示;是資料的邏輯結構在計算機中的映象,包括資料元素的映象和關係的映象.
資料元素的映象是結點,一個結點表示一個數據元素(在計算機中由若干位元位組合起來形成的一個位串來表示)
關係的映象有兩種,順序映象非順序映象.由此得出兩種不同的儲存結構:順序儲存結構鏈式儲存結構

  1. 儲存結構分為
  • 順序儲存方法:它是把邏輯上相鄰的結點儲存在物理位置相鄰的儲存單元裡,結點間的邏輯關係由儲存單元的鄰接關係來體現。由此得到的儲存表示稱為順序儲存結構。
  • 連結儲存方法:它不要求邏輯上相鄰的結點在物理位置上亦相鄰,結點間的邏輯關係是由附加的指標欄位表示的。由此得到的儲存表示稱為鏈式儲存結構。
  • 索引儲存方法:除建立儲存結點資訊外,還建立附加的索引表來標識結點的地址。
  • 雜湊儲存方法:就是根據結點的關鍵字直接計算出該結點的儲存地址。
  1. 演算法
    演算法(algorithm): 解決某一特定問題的具體步驟的描述,是指令的有限序列。
  • 有窮性 一個演算法必須總是在執行有窮步之後結束,且每一步都在有窮時間內完成。
  • 確定性 演算法中每一條指令必須有確切的含義。不存在二義性。且演算法只有一個入口和一個出口。
  • 可行性 一個演算法是可行的。即演算法描述的操作都是可以通過已經實現的基本運算執行有限次來實現的。
  • 輸入 一個演算法有零個或多個輸入,這些輸入取自於某個特定的物件集合。
  • 輸出 一個演算法有一個或多個輸出,這些輸出是同輸入有著某些特定關係的量。
    演算法和程式的不同
    演算法與程式的含義十分相似,但不相同:一個程式不一定滿足有窮性,可以死迴圈;程式中的指令必須是機器可執行的,而演算法中的指令則無此限制。
    演算法設計的要求
  • 正確性(Correctness) 演算法應滿足具體問題的需求。
  • 可讀性(Readability) 演算法應該好讀。
  • 健狀性(Robustness) 演算法應具有容錯處理。
  • 效率與低儲存量需求

演算法效率的度量
演算法效率:用依據該演算法編制的程式在計算機上執行所消耗的時間來度量。

  • 事後統計:利用計算機內記時功能,不同演算法的程式
    可以用一組或多組相同的統計資料區分。
    缺點:
    ①必須先執行依據演算法編制的程式;
    ②所得時間統計量依賴於硬體、軟體等環境因素,掩蓋演算法本身的優劣。

    同一個演算法用不同的語言、不同的編譯程式、在不同的計算機上執行,效率均不同。所以使用絕對時間單位衡量演算法效率不合適

    • 事前分析估算
      時間複雜度:一般情況下,演算法中基本操作重複執行的次數是問題規模 n 的某個函式,演算法的時間量度記作
      T(n) = O(f(n))
      稱作演算法的漸近時間複雜度,簡稱時間複雜度
      頻度:是指該語句重複執行的次數。
      在這裡插入圖片描述
      在這裡插入圖片描述
      常用的六種多項式的時間複雜度關係為
      O(1)<O(log2n)<O(n)<O(nlog2n)<O(n2)<O(n3)

空間複雜度:
演算法所需儲存空間的度量,記作:

S(n)=O(g(n))
其中n為問題的規模(或大小) : 表示隨著問題規模 n 的增大,演算法執行所需儲存量的增長率與 g(n) 的增長率相同。
演算法的空間效能以一個演算法執行過程中臨時佔用的儲存空間作為度量標準——演算法空間複雜度