• 沒有找到結果。

導論

N/A
N/A
Protected

Academic year: 2021

Share "導論"

Copied!
16
0
0

加載中.... (立即查看全文)

全文

(1)

第1章 導論

(2)

為甚麼要學資料結構?

計算機科學家

維爾特

(Niklaus Wirth, 1934/2/15~)

於1975年寫了一本書,書名為

“Algorithms

Data Structures

Programs”

( 演算法

資料結構

程式 )

程式設計師必須有資料結構的基礎,才能撰寫出優良

的程式。

(3)

+

資料結構 (DATA STRUCTURE)的定義

 計算機系統中資料的「組織方式」及 「存取運算方法」  探討如何將資料有系統地安排組織配合適當的演算法以 達到最佳化的處理結果。  設計資料結構時主要考量: 1. 如何產製 (create) 儲存結構 2. 如何儲存 (store)資料 3. 如何取出 (retrieve) 資料 4. 有哪些運算 (operator) 資料結構 10 50 1060 50 60

(4)

演算法(ALGORITHM)的定義

在有限步驟內解決問題的方法或程序

Donald E. Knuth(高德納) 提出五個基本要素:

1. 輸入指令 (input):零個或一個以上的輸入資料。 2. 輸出指令 (output):一個或一個以上的結果輸出。 3. 明確性 (definiteness):指令必須明確不混淆。 4. 有限性 (finiteness):在有限步驟內執行結束。 5. 有效性 (effectiveness):又稱可行性。

(5)

描述演算法的方法

使用自然語言 ( 中文、英文……等 )

數學式

程式語言

流程圖 (flowchart)

虛擬碼 (pseudo-code)

(6)

演算法範例

-- 以

自然語言描述

求兩實數相減之絕對值

解:

(1) 輸入兩個實數 a 與 b 的值。

(2) 設定實數 c 值為 a

b。

(3) 如果 ( c < 0 ) 成立,

則實數 c 設定為

c。

(4) 輸出實數 c 的值

(7)

演算法範例

-- 以

流程圖描述

開始 輸入a, b兩實數 c = a - b ( c < 0 )? c = - c 輸出c 結束 是 否

求兩實數相減之絕對值

解:

(1) 輸入兩個實數 a 與 b 的值。

(2) 設定實數 c 值為 a

b。

(3) 如果 ( c < 0 ) 成立,

則實數 c 設定為

c。

(4) 輸出實數 c 的值

(8)

演算法範例

--以

C 語言

描述

開始 輸入a, b兩實數 c = a - b ( c < 0 )? c = - c 輸出c 結束 是 否

求兩實數相減之絕對值

(9)

程式的效能分析

好程式的條件

執行結果正確

可維護性高

執行效率高

1) 執行時間(run time)的長短:簡略以程式執行的敘 述多寡(頻率計數)來測量 2) 儲存變數資料所需的記憶體空間大小 電腦執行結果要對! 程式碼容易看懂! 執行時間要短、 記憶體用得少!

(10)

頻率計數(FREQUENCY COUNT)

可執行的敘述才會影響程式的執行時間

頻率計數

1. 計算程式敘述被執行的總次數 2. 用來評估程式的執行時間,以判斷演算法的優劣。 10

(11)

範例

計算 N 位學生的總平均分數

程 式 執行次數

float avg(float score[], int n) {

int i;

float sum, average; if( n <= 0)

average = 0; else{

sum = 0;

for(i=0; i<n; i++) sum += score[i]; average = sum / n; } return average; } 1 1 1 n+1 n 1 1 執行總次數 2n+6

(12)

BIG-O 函數

程式的效率以頻率計數函數的級數 (order)分級

描述,稱為

時間複雜度 (time complexity)。

時間複雜度分為

Ω :最佳時間複雜度 Θ :平均時間複雜度 O :最壞時間複雜度

一般皆以 O 符號來表示時間複雜度,讀作

“Big-oh” 。

12 不可靠! 不易計算! 容易計算, 品質保證!

(13)

範例

考慮以下兩個頻率計數函數為: 當資料量 時, 的執行時間永遠比 好。  是 的上界。  的最壞時間複雜度為 1000 10 ) (nn2  nf 2 ) (n n g  2 ( ( )) ( ) O g nO n ) ( 2g n 38 0   n n ( ) f n ( ) f n ) ( 2g n f n( )

(14)

頻率計數與時間複雜度

時間複雜度的計算

1. 只取頻率計數函數的最高次項。 2. 不計係數。

範例:若程式敘述之執行次數為 3n+5

1. 則以O(n) 表示,讀作 “Big oh of n ”。 2. 程式執行時間之成長速率與資料量 n 成正比。 3. 當資料量變成10倍時,執行時間大約也是10倍的時間。

(15)

時間複雜度(TIME COMPLEXITY)

頻率計數 時間複雜度 120 O(1) 2logn+5 O(logn) 3n+100 O(n) 2nlogn+3n O(nlogn) 3n2+5n+8 O(n2) n2 *(n-1)/2 O(n3) 3*2n + 5n3 +7 O(2n) n! + 2n5 + 7 O(n!) 優劣順序 優 劣

(16)

時間複雜度排序

(1) OO(log )nO n( )O n( log )nO n( 2)O n( 3)O(2 )nO n( !)

常見的複雜度其大小排序為

0 0 1 2 4 8 10 16 32 n 1 2 4 8 16 32 64 128 256 512 1024 2048 4096 65536 2n n3 n2 n log n n log n

參考文獻

相關文件

有效憑證簽發申請 -&gt; 新的申請資料 即可看到剛申 請的介面.. 設定

(四)於結訓後一百二十日 TIMS

五、依據保有資料之重要性,評估有備份必要時,予以備

討論結束,整理腦圖。首先嘗試將資料歸類,然 後可以開始收窄範圍,定出文章中心,再按照重

left

「全球環境變遷」為出發點,討論氣候變化對 全世界水資源的影響,藉由資料閱讀,先建立 學生的基本知識,同時教導閱讀科學文章的方 法,透過 ORID- 焦點討論法

• 雙極性電晶體 (bipolar junction transistor , BJ T) 依結構區分,有 npn 型及 pnp 型兩種. Base

神秘的資料結構