目錄
- 1.1.0 導讀
- 1.1.1 緒論
- 1.1.2 資料結構的三要素
- 邏輯結構
- 資料的運算
- 物理結構(儲存結構)
- 1.2.1 演算法的基本概念
- 1.2.2 時間複雜度
- 1.2.3 空間複雜度
1.1.0 導讀
資料結構在學什麼?
- 如何用程式程式碼把顯示世界的問題資訊畫
- 如何用計算機高效地處理這些資訊從而創造價值
1.1.1 緒論
- 資料:是資訊的載體,是描述客觀事物屬性的數、字元及所有能輸入到計算機中並被計算機程式識別和處理的符號的集合。資料是計算機程式加工的原料
- 資料元素是資料的基本單位,通常作為一個整體進行考慮和處理
- 一個資料元素可由若干資料項組成,資料項是構成資料元素的不可分割的最小單位
- 資料物件是具有相同性質的資料元素的集合,是資料的一個子集
- 資料結構是相互之間存在一種或多種特定關係的資料元素的集合
1.1.2 資料結構的三要素
邏輯結構
- 集合
各個元素同屬一個集合,別無其他關係 - 線性結構
資料元素之間是一對一的關係,出了第一個元素,所有元素都有唯一的前驅,除了最後一個元素,所有元素都有唯一後繼 - 樹形結構
資料元素之間是一對多的關係 - 圖結構
資料元素之間是多對多的關係
資料的運算
針對某種邏輯結構,結合實際需求,定義基本運算
物理結構(儲存結構)
資料的物理結構(儲存結構):如何用計算機表示資料元素的邏輯關係
資料型別是一個值的集合和定義在此集合上的一組操作的總稱
抽象資料型別(ADT)是抽象資料組織及與之相關的操作
1.2.1 演算法的基本概念
程式=資料結構+演算法
- 演算法是對特定問題求解步驟的一種描述,它是指令的有限序列,其中的每條指令表示一個或多個操作
演算法的特性
- 有窮性:一個演算法必須總在執行有窮步之後結束
- 確定性:演算法中的每條指令必須有確切的含義。對於相同的輸入只能得出相同的輸出
- 可行性:演算法中描述的操作都可以透過已經實現的基本運算執行有限次來實現
- 輸入
- 輸出
1.2.2 時間複雜度
事前預估演算法時間開銷\(T(n)\)與問題規模n的關係
可以只考慮階數高的部分
大O表示法:
大O表示同階,同等數量級,當\(n->無窮\)二者之比為常數
常對冪指階
- 結論1:順序執行的程式碼只會影響常數項,可以忽略
- 結論2:只需挑迴圈中的一個基本操作分析它的執行次數與n的關係即可
- 結論3:如果有多層迴圈只需要考慮最深層迴圈即可
1.2.3 空間複雜度
演算法原地工作--演算法所需記憶體空間為常量
只需關注儲存空間的大小和問題規模相關的變數
函式遞迴呼叫會帶來記憶體開銷
空間複雜度=遞迴呼叫的深度(一般來說,每層遞迴空間都是常數)