1. 程式人生 > >資料結構第一章筆記

資料結構第一章筆記

  • 連結儲存結構:用一組任意 的儲存單元儲存資料元素,數 據元素之間的邏輯關係用指標 來表示 。 例:(bat, cat, eat) 1.3 資料結構的基本概念 資料結構的基本概念 0200 0208 0300 0325 … … … … bat 0200 cat 0325 eat ∧ 邏輯結構和儲存結構之間的關係 ¾ 資料的邏輯結構屬於使用者檢視,是面向問題 的,反映了資料內部的構成方式;資料的儲存 結構屬於具體實現的檢視,是面向計算機的。 ¾ 一種資料的邏輯結構可以用多種儲存結構來存 儲,而採用不同的儲存結構,其資料處理的效 率往往是不同的。 1.3 資料結構的基本概念 抽象資料型別 1. 資料型別(Data Type):一組值的集合以及定義 於這個值集上的一組操作的總稱。 例如:C++中的整型變數 2. 抽象(Abstract):抽出問題本質的特徵而忽略非本 質的細節。 例如: 地圖、駕駛汽車 3. 抽象資料型別(Abstract Data Type,ADT):一個 資料結構以及定義在該結構上的一組操作的總稱。 1.3 資料結構的基本概念 ADT是對資料型別的進一步抽象 ADT ·邏輯結構 ·操作集合 資料結構 ·儲存結構 ·演算法設計 類 ·成員變數 ·成員函式 (a)使用檢視 (b) 設計檢視 © 實現檢視 ADT的定義 ADT的設計 ADT的實現 ADT的不同檢視 1.3 資料結構的基本概念 ADT 抽象資料型別名 Data 資料元素之間邏輯關係的定義 Operation 操作1 前置條件:執行此操作前資料所必須的狀態 輸 入:執行此操作所需要的輸入 功 能:該操作將完成的功能 輸 出:執行該操作後產生的輸出 後置條件:執行該操作後資料的狀態 操作2 …… …… 操作n …… endADT ADT的定義形式 1.3 資料結構的基本概念 1.3 資料結構的基本概念(小結) 資料的操作:插入、刪除、修改、檢索、排序等 資料的邏輯結構 資料的儲存結構 順序儲存 鏈式儲存 集合 線性結構 樹結構 圖結構 非數值問題 數 據 表 示 演算法的相關概念 演算法的相關概念 1.演算法(Algorithm):是對特定問題求解步驟的 一種描述,是指令的有限序列。 2. 演算法的五大特性: ⑴ 輸入:一個演算法有零個或多個輸入。 ⑵ 輸出:一個演算法有一個或多個輸出。 ⑶ 有窮性:一個演算法必須總是在執行有窮步之後結束,且 每一步都在有窮時間內完成。 ⑷ 確定性:演算法中的每一條指令必須有確切的含義,對於 相同的輸入只能得到相同的輸出。 ⑸ 可行性:演算法描述的操作可以通過已經實現的基本操作 執行有限次來實現。 1.4 演算法及演算法分析 演算法及演算法分析 歐幾里德演算法 m n r 例:歐幾里德演算法——輾轉相除法 求兩個自然數 m 和 n 的最大公約數 1.4 演算法及演算法分析 演算法及演算法分析 演算法的描述方法——自然語言 優點:容易理解 缺點:冗長、二義性 使用方法:粗線條描述演算法思想 注意事項:避免寫成自然段 1.4 演算法及演算法分析 演算法及演算法分析 ① 輸入m 和n; ② 求m除以n的餘數r; ③ 若r等於0,則n為最大公約數, 演算法結束;否則執行第④步; ④ 將n的值放在m中,將r的值放在 n中; ⑤ 重新執行第②步。 例:歐幾里德演算法 自然語言 1.4 演算法及演算法分析 演算法及演算法分析 優點:流程直觀 缺點:缺少嚴密性、靈活性 使用方法:描述簡單演算法 注意事項:注意抽象層次 演算法的描述方法——流程圖 1.4 演算法及演算法分析 演算法及演算法分析 N 開始 輸入m和n r=m % n r=0 m=n;n=r 輸出n 結束 Y 流程圖 例:歐幾里德演算法 1.4 演算法及演算法分析 演算法及演算法分析 優點:能由計算機執行 缺點:抽象性差,對語言要求高 使用方法:演算法需要驗證 注意事項:將演算法寫成子函式 演算法的描述方法——程式設計語言 1.4 演算法及演算法分析 演算法及演算法分析 清華大學出版社 資料結構( C++版) #include int CommonFactor(int m, int n) { int r=m % n; while (r!=0) { m=n; n=r; r=m % n; } return n; } void main( ) { cout<<<=n; i++) for (j=1; j<=n; j++) x++; 基本語句的執行次數 問題規模:輸入量的多少。 基本語句:是執行次數與整個演算法的執行次數成 正比的操作指令。 for (i=1; i<=n; i++) for (j=1; j<=n; j++) x++; 問題規模:n 基本語句:x++ 1.4 演算法及演算法分析 演算法及演算法分析 演算法分析 定義 若存在兩個正的常數c和n0,對於任意n≥n0, 都有T(n)≤c×f(n),則稱T(n)=O(f(n)) n0 問題規模n 執 行 次 數 n0 之前的 情況無關 緊要 T(n) c×f(n) ™當問題規模充分大時在漸近意義下的階 1.4 演算法及演算法分析 演算法及演算法分析 演算法分析——大O符號 定理:若A(n)=amnm+am-1nm-1+…+a1n+a0是一個 m次多項式,則A(n)=O(nm)。 說明:在計算演算法時間複雜度時,可以 忽略所有低次冪和最高次冪的係數。 1.4 演算法及演算法分析 演算法及演算法分析 演算法分析——大O符號 例1-5 ++x; 例1-6 for (i=1; i<=n; ++i) ++x; 例1-7 for (i=1; i<=n; ++i) for (j=1; j<=n; ++j) ++x; 例1-8 for (i=1; i<=n; ++i) for (j=1; j<=i-1; ++j) ++x; 演算法分析 1.4 演算法及演算法分析 演算法及演算法分析 例1-9 for (i=1; i<=n; ++i) for (j=1; j<=n; ++j) { c[i][j]=0; for (k=1; k<=n; ++k) c[i][j]+=a[i][k]b[k][j]; } 例1-10 for (i=1; i<=n; i=2
    i) ++x; Ο(1)<Ο(log2n)<Ο(n)<Ο(nlog2n)<Ο(n2)<Ο(n3) <…<Ο(2n)<Ο(n!) 1.4 演算法及演算法分析 演算法及演算法分析 基本語句的執行次數是否只和問題規模有關? 9最好情況:出現概率較大時分析 9最差情況:實時系統 9平均情況:已知輸入資料是如何分佈的, 通常假設等概率分佈 結論:如果問題規模相同,時間代價與輸入資料有 關,則需要分析最好情況、最壞情況、平均情況。