任何乙個演算法的設計取決於選定的資料(邏輯)結構,而演算法的實現依賴於採用的儲存結構
資料(data)是對客觀事物的符號變現,在電腦科學中是指所有能輸入到計算機中並被電腦程式處理的符號的總稱。例如,影象、聲音等都可以通過編碼而歸之於資料的範疇。
資料元素(data element)是資料的基本單位,在電腦程式中通常作為乙個整體進行考慮和處理。乙個資料元素由若干個**資料項(data item)**組成。資料項(data item)是資料的不可分割的最小單位。例如,一本書的書目資訊作為乙個資料元素,而書目資訊中的每一項(如書名、作者名等)為乙個資料項。
資料物件(data object)是性質相同的資料元素的集合,是資料的乙個子集。 例如,整數資料物件是集合n=,字母字元資料物件是集合c=。
資料結構(data structure)是相互之間存在一種或多種特定關係的資料元素的集合。在任何問題中,資料元素都不是孤立存在的,而是在它們之間存在著某種關係,這種資料元素相互之間的關係稱之為結構(structure)。
資料結構的形式定義為:資料結構是乙個二元組 data_struture =(d,s) d是資料元素的有限集,s是d上關係的有限集。
邏輯結構(logic structure)是從操作物件抽象出來的資料模型,是資料元素之間的邏輯關係。與在計算機中的儲存位置無關
物理結構(儲存結構)是資料結構在計算機中的表示(又稱映像)
順序映像的特點是借助元素在儲存器中的相對位置來表示資料元素之間的邏輯關係。
非順序映像的特點是借助指示元素儲存位址的指標(pointer)表示資料元素之間的邏輯關係 --鏈式儲存結構
順序儲存結構
記憶體結構:一段連續的記憶體空間
優點: 順序讀取效能高
缺點: 插入刪除效率低,大小固定
鏈式儲存結構
記憶體結構:不連續的儲存結構
優點: 可以動態擴充套件大小,插入刪除效率高
缺點: 順序讀取效能低
**資料型別(data type)**是乙個值的集合和定義在這個值集上的一組操作的總稱。
按「值」的不同特性,高階程式語言中的資料型別可分為兩類:非結構的原子型別(atomic data type)和結構型別(可以看成一種資料結構和定義在其上的一組操作組成)
**抽象資料型別(abstract data type,簡稱adt)**三元組定義(d,s,p)d是資料物件,s是d上的關係集,p是對d的基本操作集。
原子型別(atomic data type)
固定聚合型別(fixed-aggregate data type)是指其值由確定數目的成分按某種結構組成。 – 結構型別
**可變聚合型別(variable-aggregate data type)**是指構成可變聚合型別「值」的成分的數目不確定。-- 結構型別
多形資料型別(polymorphic data type)是指其值得成分不確定的資料型別
抽象資料型別定義
adt 抽象資料型別名稱adt 抽象資料型別名稱`
基礎操作定義:
基礎操作名(參數列)
初始條件:《初始條件描述》
操作結果:《操作結果描述》
例如:adt triplet
資料關係:r1=
基礎操作:
inittriplet(&t,v1,v2,v3)
操作結果:構造了三元組t,元素e1,e2和e3分別被賦以引數v1,v2和v3的值。
destroytriplet(&t)
操作結果:三元組t被摧毀。get(t,i,&e)
get(t,i,&e)
初始條件:三元組t已存在,1≤i≤3。
操作結果:用e返回t的第i元的值。
} adt triplet
演算法(algorithm)是對特定問題求解步驟的一種描述,聽他的指令的有限序列,其中每一條指令表示乙個或多個操作。5個重要演算法特性:
有窮性乙個演算法必須總是(對任何合法的輸入值)在執行有窮步之後結束,且每一步都可在有窮時間內完成
確定性演算法中每一條指令必須有確切的含義,讀者理解時不會產生二義性。並且,在任何條件下,演算法只有唯一的一條執行路徑,即對於相同的輸入智慧型得出相同的結果
可行性乙個演算法是能行的,即演算法中描述的操作都是可以通過已經實現的基礎演算法執行有限次來實現的
輸入輸出
演算法設計的要求:
正確性(correctness)
1. 程式不含語法錯誤
2. 程式對於幾組輸入資料能夠得出滿足規格說明要求的結果
3. 程式對於精心選擇的典型、苛刻而帶有刁難性的幾組輸入資料能夠得出滿足規格說明要求的結果
可讀性(readability)健壯性(robustness)當輸入資料非法時,演算法也能適當地作出反應或進行處理,而不會產生莫名其妙的輸出結果
效率與低儲存需求效率值得是演算法執行的時間,儲存量需求值演算法執行過程中所需要的最大儲存空間
演算法的效能指標:
時間複雜度(漸變時間複雜度, asymptotic time complexity)演算法執行時間的增長率和ƒ(n) 的增長率
t(n) = o(ƒ(n))
o是什麼?
大o符號(漸近符號,**曼-朗道符號)是描述乙個數學符號限制行為一的功能,當引數對特定值或無窮大趨向。大o表示法用於根據演算法的執行時間或空間要求隨輸入大小的增長而對其進行分類。o的**於order of the function的首字母。
大o符號有兩個主要的應用領域:
在數學中,通常用於描述有限級數與給定函式的近似程度,特別是在泰勒級數被截斷或漸近展開的情況下
在電腦科學中,它在演算法分析中很有用
**空間複雜度(space complexity)**作為演算法所需儲存空間的度量
資料結構筆記
程式效率與組織方式有關 圖書館擺書 二分查詢 程式效率與操作有關 迴圈和遞迴 遞迴雖簡單不過耗費大量空間 程式效率與演算法有關 多項式求和 秦九韶要比普通演算法快乙個數量級 測試兩種演算法的 include include include define max 101 define maxl 1e7...
資料結構筆記
一 鄰接矩陣 鄰接矩陣儲存使用2個陣列儲存圖的資訊 1個以為陣列儲存頂點,乙個二維陣列儲存邊的資訊 1 二維陣列中的對角線為0,以為不存在頂點到自身的邊 2 要知道某個點的出度,就是頂點vi在第i行的元素之和,入度就是該頂點所在列的元素之和 3 頂點vi的所有鄰接點就是吧矩陣中第i行元素掃瞄一遍 4...
資料結構筆記
二叉樹的遍歷操作 二叉樹的遍歷是指從根結點出發,按照某種次序 訪問二叉樹中的所有結點,使得每個結點被訪問一 次且僅被訪問一次。抽象操作,可以是對結點進行的各種 處理,這裡簡化為輸出結點的資料。前序遍歷 中序遍歷 後序遍歷 層序遍歷 查詢的基本概念 靜態查詢適用於 查詢集合一經生成,便只對其進行 查詢...