本教學投影片係屬教科書著作之延伸,亦受著作權法之保護。

Slides:



Advertisements
Similar presentations
不定積分 不定積分的概念 不定積分的定義 16 不定積分的概念 16.1 不定積分的概念 以下是一些常用的積分公式。
Advertisements

第一單元 建立java 程式.
基本概論 Basic concepts.
計算機程式語言實習課.
武进区三河口中学欢迎您.
第四章 數列與級數 4-1 等差數列與級數 4-2 等比數列與級數 4-3 無窮等比級數 下一頁 總目錄.
陳維魁 博士 儒林圖書公司 第九章 資料抽象化 陳維魁 博士 儒林圖書公司.
絕對不等式 課堂練習2 (算幾不等式).
TQC+ JAVA全國教師研習會 PLWeb 程式設計練習平台 簡介.
Chapter 5 遞迴 資料結構導論 - C語言實作.
主題五 CPU Learning Lab.
記憶體的概況 張登凱.
程式語言的基礎 Input Output Program 世代 程式語言 第一世代 Machine language 第二世代
結構(struct).
第十一章 結構.
Visual C++ introduction
資料結構設計與C++程式應用 Fundamentals of Data Structures and Their Applications Using C++ 第3章 佇列 資料結構設計與C++程式應用.
2-3 基本數位邏輯處理※.
列舉(enum).
101北一女中 資訊選手培訓營 妳不可不了解的指標 Nan.
计算复杂性和算法分析 计算机科学导论第六讲
4B冊 認識公倍數和最小公倍數 公倍數和最小公倍數的關係.
C語言簡介 日期 : 2018/12/2.
類別(class) 類別class與物件object.
SQL Stored Procedure SQL 預存程序.
(Circular Linked Lists)
檔案與磁碟的基本介紹.
資料結構 第1章 導論.
Java 程式設計 講師:FrankLin.
JAVA 程式設計與資料結構 第四章 陣列、字串與數學物件.
Chap3 Linked List 鏈結串列.
|12 結構與列舉型態.
第一單元 建立java 程式.
網頁程式設計 本章投影片錄自HTML5、CSS3、RWD、jQuery Mobile跨裝網頁設計 陳惠貞 著 碁峰資訊股份有限公司出版
資料結構 優點 缺點 1 陣列 (Array) 沒有額外變量 (例head, next,...) 運作/操作較簡單 更新資料時,若要保持順序,需要移動較大量資料 靜態結構Static (宣告時已決定了陣列元素多少,不能在程式執行期間增減元素) 2 隊列Queue (FIFO) 容易更新 加入enqueue:
第一章 直角坐標系 1-3 函數圖形.
第十章 指標.
資料結構與演算法 第一章 基本概念 徐熊健 資料結構與演算法 徐熊健.
使用VHDL設計 七段顯示器 通訊工程系 一年甲班 姓名 : 蘇建宇 學號 : B
緩衝區溢位攻擊 學生:A 羅以豪 教授:梁明章
第7章 指標 7-1 指標的基礎 7-2 指標變數的使用 7-3 指標運算 7-4 指標與陣列 7-5 指向函數的指標.
挑戰C++程式語言 ──第8章 進一步談字元與字串
圓的定義 在平面上,與一定點等距的所有點所形成的圖形稱為圓。定點稱為圓心,圓心至圓上任意一點的距離稱為半徑,「圓」指的是曲線部分的圖形,故圓心並不在圓上.
講師:郭育倫 第2章 效能分析 講師:郭育倫
C qsort.
演算法的效率分析.
MiRanda Java Interface v1.0的使用方法
函數應用(二)與自定函數.
陣列與結構.
Chapter 15 檔案存取 LabVIEW中的檔案存取函數也可將程式中的資料儲存成Excel或Word檔。只要將欲存取的檔案路徑位址透過LabVIEW中的路徑元件告訴檔案存取函數後,LabVIEW便可將資料存成Excel或Word檔;當然也可以將Excel或Word檔的資料讀入LabVIEW的程式中。
北一女中 資訊選手培訓營 妳不可不了解的指標 Nan.
( )下列何者正確? (A) 7< <8 (B) 72< <82 (C) 7< <8 (D) 72< <82 C 答 錯 對.
資料表示方法 資料儲存單位.
程式設計--Quick Sort 通訊一甲 B 楊穎穆.
查表法&電腦IO Port二進制轉七段顯示器
第四章 陣列、指標與參考 4-1 物件陣列 4-2 使用物件指標 4-3 this指標 4-4 new 與 delete
插入排序的正确性证明 以及各种改进方法.
ABAP Basic Concept (2) 運算子 控制式與迴圈 Subroutines Event Block
String類別 在C語言中提供兩種支援字串的方式 可以使用傳統以null結尾的字元陣列 使用string類別
Array(陣列) Anny
SQLite資料庫 靜宜大學資管系 楊子青.
10303: How Many Trees? ★★☆☆☆ 題組:Contest Archive with Online Judge
11621 : Small Factors ★★☆☆☆ 題組:Problem Set Archive with Online Judge
C語言程式設計 老師:謝孟諺 助教:楊斯竣.
快取映射 之直接對映 計算整理.
台大資訊工程學系 資訊系統訓練班 第119期 吳晉賢
微 處 理 機 專 題 – 8051 C語言程式設計 主題:階乘計算
方法(Method) 函數.
ABAP Basic Concept (2) 運算子 控制式與迴圈 Subroutines Event Block
InputStreamReader Console Scanner
Presentation transcript:

本教學投影片係屬教科書著作之延伸,亦受著作權法之保護。 請依出版社授權使用規範利用本教學資源,非經授權許可不得以影印、拷貝、列印等方法進行重製,亦不得改作、公開展示著作內容,亦請勿對第三人公開傳輸、散布。 戴顯權 著 / 資料結構 © 滄海圖書

Chapter 1 簡介 戴顯權 著 / 資料結構 © 滄海圖書

本章內容 1.1 資料結構+ 演算法= 程式 1.2 C 語言回顧 1.3 漸近式複雜度 戴顯權 著 / 資料結構 © 滄海圖書

資料結構+ 演算法= 程式 如何讓程式執行速度很快 ? 選擇一個好的演算法才是最具決定性的一個因素 必須使用一個高執行速度的電腦 ? 錯 ! 戴顯權 著 / 資料結構 © 滄海圖書

更快的電腦 或 更好的演算法? 演算法的改進成效超過硬體的改進成效! 例如,從 2n 到 n3 戴顯權 著 / 資料結構 © 滄海圖書

快速排序法與直接插入排序法 戴顯權 著 / 資料結構 © 滄海圖書

資料結構+演算法=程式 當輸入資料量大於 1200 筆時,快速排序法在慢電腦 的執行速度比直接插入排序法在快電腦上還快 ! 因此,選擇一個好的演算法是影響程式執行效率的 因素當中最具決定性的一個 但是,沒有好的資料結構不可能有好的演算法 光有好的演算法而沒有好的資料結構的配合,程式 快不起來 戴顯權 著 / 資料結構 © 滄海圖書

資料結構+演算法=程式 例如,求圖 1.1 中的兩條曲線的交點 使用兩個大矩陣 A(i, j)、B(i, j) 來表示 如果曲線一通過座標 (i, j),則設定 A(i, j) = 1;否則 A(i, j) = 0 如果曲線二通過座標 (i, j),則設定 B(i, j) = 1;否則 B(i, j) = 0 另一種表示方法:分別記錄兩條曲線的點之座標 每一條曲線各有 10 個點 戴顯權 著 / 資料結構 © 滄海圖書

資料結構+演算法=程式 兩種表示法都可以用來求出這兩條曲線的交點,但 是演算法會不同 第一種表示法的演算法只需要讀入所有的 A(i, j) 與 B(i, j),然後檢查看看是那一個座標 (i, j) 使得 A(i, j) =B(i, j) =1 需要比較大的記憶體 一開始在決定那些 A(i, j) 與 B(i, j) 要設為 1 時需要大量的 計算 演算法簡單,執行速度卻不見得快 戴顯權 著 / 資料結構 © 滄海圖書

資料結構+演算法=程式 第二種表示法 :掃瞄兩條曲線直到它們的大小關係 反過來為止 n 1200 1400 直接插入排序法 11 14.97 快速排序法 11.09 13.21 戴顯權 著 / 資料結構 © 滄海圖書

資料結構+演算法=程式 總而言之,資料結構直接牽動著演算法的設計 而演算法又直接影響著程式的執行速度 當 n = 1400 時,兩條曲線的大小關係反過來了 因此交點的位置介於 n = 1200 與 n = 1400 之間 計算出兩個線段,分別是由 (1200, 11) 與(1400, 14.97) 所 形成的線段以及由 (1200, 11.09) 與(1400, 13.21) 所形成的 線段,的交點位置 總而言之,資料結構直接牽動著演算法的設計 而演算法又直接影響著程式的執行速度 戴顯權 著 / 資料結構 © 滄海圖書

資料結構+演算法=程式 好的資料結構+好的演算法=好的程式 資料結構:表示資料的方法 演算法:處理資料的方法 程式:C 戴顯權 著 / 資料結構 © 滄海圖書

C 語言回顧 變數宣告 一個整數變數的宣告方式是: 其他類型變數的宣告與這個例子相仿 int iYears; 戴顯權 著 / 資料結構 © 滄海圖書

C 語言回顧 陣列 宣告方式: int iData[5]; iData 自動被宣告成一個指標,指向這個整數陣列的第一 個 戴顯權 著 / 資料結構 © 滄海圖書

C 語言回顧 指標變數 指標是用來記住資料在記憶體中的位置 指向不同資料類型的各種指標屬於不同的資料類型 一個指向整數資料的指標的宣告方式: int* pAmount; 宣告了一個叫做 pAmount 的整數指標,但尚未告訴 C 語 言這個指標的內容應該為何 戴顯權 著 / 資料結構 © 滄海圖書

C 語言回顧 指標變數 int Amount = 3; int* pAmount = & Amount; /* pAmount ← Amount 在記憶體的位置 */ 在這個例子中,我們先用宣告一個整數變數, Amount;然後我們又宣告了一個指向Amount 的整數 指標,pAmount,同時將pAmount 的內容值設定為 &Amount (即,變數Amount 在記憶體裡的位置) 戴顯權 著 / 資料結構 © 滄海圖書

C 語言回顧 指標變數 戴顯權 著 / 資料結構 © 滄海圖書

C 語言回顧 指標變數 在圖1.3 中,左側的數字代表記憶體位址,中間的數 字代表記憶體的內容,右側的文字則代表變數名稱。 從這個圖可以知道,pAmount 的值確實為Amount 的 記憶體位址。 在這一個例子中, 如果讀取pAmount, 我們將得到 x00FA0; 如果讀取*pAmount,我們將得到3,其中* 稱為取值運算子(dereferencing operator)。 戴顯權 著 / 資料結構 © 滄海圖書

C 語言回顧 自定資料型態 宣告了一種新的資料類型,稱為 PData typedef struct PData { char sName[30]; int iAge; } PersonData; /* 宣告PersonData 為新的資料型態*/ 宣告了一種新的資料類型,稱為 PData 每一份 PData 資料類型內,都包含有兩個欄位: sName[30]、iAge 戴顯權 著 / 資料結構 © 滄海圖書

例題一物件陣 PersonData Classmates[20] - 宣告 Classmates[20] 裡 的每一項元素都是 PersonData 型態的變數 戴顯權 著 / 資料結構 © 滄海圖書

例題二指標陣列 PersonData *pClassmates [20] - 宣告 pClassmates[20] 裡的每一項元素都是指向 PersonData 型態的指標 戴顯權 著 / 資料結構 © 滄海圖書

C 語言回顧 遞迴 副程式利用多層次呼叫的方式呼叫自己來處理資料 費氏數列的定義是: f (0) = 0 f (1) = 1 f (n) = f (n – 1) + f (n – 2) 戴顯權 著 / 資料結構 © 滄海圖書

C 語言回顧 遞迴 程式: int Fibonacci(int n) { if (n==0) return 0; /* f (0)=0*/ else if (n==1) return 1; /* f (1)=1*/ else /* f (n)= f (n–1)+ f (n–2)*/ return Fibonacci(n–1)+Fibonacci(n–2); } 戴顯權 著 / 資料結構 © 滄海圖書

漸近式複雜度 假設i, j, k, N 都宣告為整數變數: for(i=1; i<N+1; i++) for( j=0; j<i; j++) k++; 時間複雜度可以表示為一個big-O 函數,即寫成 T(N) = O(N2),這也就是所謂的漸近式複雜度(asymptotic complexity) 戴顯權 著 / 資料結構 © 滄海圖書

漸近式複雜度 f(n) = O(g(n)) 戴顯權 著 / 資料結構 © 滄海圖書

例題三 假設 f(n) = n2 + 2 且 g(n) = n2。 取 c = 4, n0 = 2,那麼當 n  n0 時,0  f(n)  cg(n) 必 定成立,因此我們說 f(n) = O(g(n)) = O(n2)。 戴顯權 著 / 資料結構 © 滄海圖書

例題四 假設 f(n) = n3 + n,那麼 f(n) = O(n3)。 戴顯權 著 / 資料結構 © 滄海圖書

漸近式複雜度 以上的不等式只假設當n 夠大的時候成立;它們是近 似的不等式 O 所提供給我們的是一個演算法的計算複雜度上限 (upper bound); 所提供給我們的則是一個演算法的 計算複雜度下限(lower bound);而  所提供給我們的 同時是一個演算法的計算複雜度上限與下限 戴顯權 著 / 資料結構 © 滄海圖書

漸近式複雜度 常見的演算法複雜度有: 戴顯權 著 / 資料結構 © 滄海圖書

漸近式複雜度 O(1) < O(loglogn) < O(logn) < O(n) < O(nlogn) < O(na) < O(2n)。 戴顯權 著 / 資料結構 © 滄海圖書

漸近式複雜度 戴顯權 著 / 資料結構 © 滄海圖書