Presentation is loading. Please wait.

Presentation is loading. Please wait.

計算機概論 - 搜尋 1 Ming-Shang Lee CopyRight 2001 搜尋 (Searching) 李明山 編撰.

Similar presentations


Presentation on theme: "計算機概論 - 搜尋 1 Ming-Shang Lee CopyRight 2001 搜尋 (Searching) 李明山 編撰."— Presentation transcript:

1

2 MSLee2002@Yes 計算機概論 - 搜尋 mslee@nctu 1 Ming-Shang Lee CopyRight 2001 搜尋 (Searching) 李明山 編撰

3 MSLee2002@Yes 計算機概論 - 搜尋 mslee@nctu 2 搜尋的意義 從很多資料錄 (Records) 中找出 特定的資料錄 (Record) ,稱 為搜尋 (Searching)

4 MSLee2002@Yes 計算機概論 - 搜尋 mslee@nctu 3 搜尋的實例  學生資料查詢 ─ 學號搜尋  電話號碼簿 ─ 人名搜尋  銀行交易 ─ 帳號搜尋  ‧‧‧‧‧‧

5 MSLee2002@Yes 計算機概論 - 搜尋 mslee@nctu 4 資料處理名詞釋義  平行陣列 (Parallel arrays)

6 MSLee2002@Yes 計算機概論 - 搜尋 mslee@nctu 5 資料處理名詞釋義  資料表 (Table) 學號作業二作業三作業四作業五作業六練習一練習二 8432092100889589 ○ 9075 8532001100958090 ○ 9085 8532002100909095 ○ 8085 853200393907595 △ 6590 8532004881009094 ○ 6570 853200696858589 ○ 6585 853200785100700075 8532008869890959080 8532009838580896080 853201090838095 ○ 8065 8532011850758965100 8532012869085896575 853201383938089 ○ 9085 8532014758890897095

7 MSLee2002@Yes 計算機概論 - 搜尋 mslee@nctu 6 資料處理名詞釋義  資料錄 (Record) 學號作業二作業三作業四作業五作業六練習一練習二 8432092100889589 ○ 9075 8532001100958090 ○ 9085 8532002100909095 ○ 8085 853200393907595 △ 6590 8532004881009094 ○ 6570 853200696858589 ○ 6585 853200785100700075 8532008869890959080 8532009838580896080 853201090838095 ○ 8065 8532011850758965100 8532012869085896575 853201383938089 ○ 9085 8532014758890897095

8 MSLee2002@Yes 計算機概論 - 搜尋 mslee@nctu 7 資料處理名詞釋義  欄位 (Field) 學號作業二作業三作業四作業五作業六練習一練習二 8432092100889589 ○ 9075 8532001100958090 ○ 9085 8532002100909095 ○ 8085 853200393907595 △ 6590 8532004881009094 ○ 6570 853200696858589 ○ 6585 853200785100700075 8532008869890959080 8532009838580896080 853201090838095 ○ 8065 8532011850758965100 8532012869085896575 853201383938089 ○ 9085 8532014758890897095

9 MSLee2002@Yes 計算機概論 - 搜尋 mslee@nctu 8 資料處理名詞釋義  關鍵欄 (Key Field) 學號作業二作業三作業四作業五作業六練習一練習二 8432092100889589 ○ 9075 8532001100958090 ○ 9085 8532002100909095 ○ 8085 853200393907595 △ 6590 8532004881009094 ○ 6570 853200696858589 ○ 6585 853200785100700075 8532008869890959080 8532009838580896080 853201090838095 ○ 8065 8532011850758965100 8532012869085896575 853201383938089 ○ 9085 8532014758890897095

10 MSLee2002@Yes 計算機概論 - 搜尋 mslee@nctu 9 資料處理名詞釋義  關鍵值 (Key) 學號作業二作業三作業四作業五作業六練習一練習二 8432092100889589 ○ 9075 8532001100958090 ○ 9085 8532002100909095 ○ 8085 853200393907595 △ 6590 8532004881009094 ○ 6570 853200696858589 ○ 6585 853200785100700075 8532008869890959080 8532009838580896080 853201090838095 ○ 8065 8532011850758965100 8532012869085896575 853201383938089 ○ 9085 8532014758890897095

11 MSLee2002@Yes 計算機概論 - 搜尋 mslee@nctu 10 搜尋的方法  循序搜尋法 (Sequential Search)  二元搜尋法 (Binary Search)  赫序函數搜尋法 (Hashing Function Search)

12 MSLee2002@Yes 計算機概論 - 搜尋 mslee@nctu 11 循序搜尋法 (Sequential Search)  所謂循序搜尋法 (Sequential Search) , 就是從資料中的第一項或最後一項開 始,逐項與所要找尋的特定資料做比 較,若兩者相同即找到了。  這是最簡單的資料搜尋法,也是最沒 有效率的一種方法。

13 MSLee2002@Yes 計算機概論 - 搜尋 mslee@nctu 12 循序搜尋法 (Sequential Search) INPUT DESIRED_NAME I  1 WHILE NAME(I)  DESIRED_NAME DO I  I +1 END WHILE OUTPUT NUMBER(I)

14 MSLee2002@Yes 計算機概論 - 搜尋 mslee@nctu 13 循序搜尋法 (Sequential Search) INPUT DESIRED_NAME NAME(6)  DESIRED_NAME I  1 WHILE NAME(I)  DESIRED_NAME DO I  I +1 END WHILE IF I  5 THEN OUTPUT NUMBER(I) ELSE OUTPUT ‘NOT FOUND!’ ENDIF

15 MSLee2002@Yes 計算機概論 - 搜尋 mslee@nctu 14 二元搜尋法 (Binary Search)  將資料表按鍵值大小次序排序  取資料表搜尋範圍最中間一筆資料錄比對  如果對上搜尋之關鍵值則搜尋結束  如果搜尋之關鍵值較小,則將搜尋範圍縮為前半段  如果搜尋之關鍵值較大,則將搜尋範圍縮為後半段  重複搜尋之步驟

16 MSLee2002@Yes 計算機概論 - 搜尋 mslee@nctu 15 Ming-Shang Lee CopyRight 2001 二元搜尋法 (Binary Search)  搜尋 8532009 學號作業二作業三作業四作業五作業六練習一練習二 8432092100889589 ○ 9075 8532001100958090 ○ 9085 8532002100909095 ○ 8085 853200393907595 △ 6590 8532004881009094 ○ 6570 853200696858589 ○ 6585 853200785100700075 8532008869890959080 8532009838580896080 853201090838095 ○ 8065 8532011850758965100 8532012869085896575 853201383938089 ○ 9085 8532014758890897095

17 MSLee2002@Yes 計算機概論 - 搜尋 mslee@nctu 16 二元搜尋法 (Binary Search)  搜尋 8532009 學號作業二作業三作業四作業五作業六練習一練習二 8532008869890959080 8532009838580896080 853201090838095 ○ 8065 8532011850758965100 8532012869085896575 853201383938089 ○ 9085 8532014758890897095

18 MSLee2002@Yes 計算機概論 - 搜尋 mslee@nctu 17 二元搜尋法 (Binary Search)  搜尋 8532009 學號作業二作業三作業四作業五作業六練習一練習二 8532008869890959080 8532009838580896080 853201090838095 ○ 8065

19 MSLee2002@Yes 計算機概論 - 搜尋 mslee@nctu 18 二元搜尋法 (Binary Search) Low High Middle

20 MSLee2002@Yes 計算機概論 - 搜尋 mslee@nctu 19 二元搜尋法 (Binary Search) Low Middle High

21 MSLee2002@Yes 計算機概論 - 搜尋 mslee@nctu 20 二元搜尋法 (Binary Search) Low Middle High

22 MSLee2002@Yes 計算機概論 - 搜尋 mslee@nctu 21 二元搜尋法 (Binary Search) (重複)  將資料表按鍵值大小次序排序  取資料表搜尋範圍最中間一筆資料錄比對  如果對上搜尋之關鍵值則搜尋結束  如果搜尋之關鍵值較小,則將搜尋範圍縮為前半段  如果搜尋之關鍵值較大,則將搜尋範圍縮為後半段  重複搜尋之步驟

23 MSLee2002@Yes 計算機概論 - 搜尋 mslee@nctu 22 二元搜尋法 (Binary Search)  搜尋 8532009 作業四 (HW4) 成績 # StuID HW1 HW2 HW3 HW4 HW5 Ex1 Ex2 1 8432092 100 88 95 89 ○ 90 75 2 8532001 100 95 80 90 ○ 90 85 3 8532002 100 90 90 95 ○ 80 85 4 8532003 93 90 75 95 △ 65 90 5 8532004 88 100 90 94 ○ 65 70 6 8532006 96 85 85 89 ○ 65 85 7 8532007 85 100 70 0 0 75 8 8532008 86 98 90 95 90 80 9 8532009 83 85 80 89 60 80 10 8532010 90 83 80 95 ○ 80 65 11 8532011 85 0 75 89 65 100 12 8532012 86 90 85 89 65 75 13 8532013 83 93 80 89 ○ 90 85 14 8532014 75 88 90 89 70 95 Low High Mid

24 MSLee2002@Yes 計算機概論 - 搜尋 mslee@nctu 23 二元搜尋法 (Binary Search)  搜尋 8532009 作業四 (HW4) 成績 # StuID HW1 HW2 HW3 HW4 HW5 Ex1 Ex2 1 8432092 100 88 95 89 ○ 90 75 2 8532001 100 95 80 90 ○ 90 85 3 8532002 100 90 90 95 ○ 80 85 4 8532003 93 90 75 95 △ 65 90 5 8532004 88 100 90 94 ○ 65 70 6 8532006 96 85 85 89 ○ 65 85 7 8532007 85 100 70 0 0 75 8 8532008 86 98 90 95 90 80 9 8532009 83 85 80 89 60 80 10 8532010 90 83 80 95 ○ 80 65 11 8532011 85 0 75 89 65 100 12 8532012 86 90 85 89 65 75 13 8532013 83 93 80 89 ○ 90 85 14 8532014 75 88 90 89 70 95 Low High Mid

25 MSLee2002@Yes 計算機概論 - 搜尋 mslee@nctu 24 二元搜尋法 (Binary Search)  搜尋 8532009 作業四 (HW4) 成績 # StuID HW1 HW2 HW3 HW4 HW5 Ex1 Ex2 1 8432092 100 88 95 89 ○ 90 75 2 8532001 100 95 80 90 ○ 90 85 3 8532002 100 90 90 95 ○ 80 85 4 8532003 93 90 75 95 △ 65 90 5 8532004 88 100 90 94 ○ 65 70 6 8532006 96 85 85 89 ○ 65 85 7 8532007 85 100 70 0 0 75 8 8532008 86 98 90 95 90 80 9 8532009 83 85 80 89 60 80 10 8532010 90 83 80 95 ○ 80 65 11 8532011 85 0 75 89 65 100 12 8532012 86 90 85 89 65 75 13 8532013 83 93 80 89 ○ 90 85 14 8532014 75 88 90 89 70 95 Low High Mid

26 MSLee2002@Yes 計算機概論 - 搜尋 mslee@nctu 25 二元搜尋法 (Binary Search)  搜尋 8532009 作業四 (HW4) 成績 Low = 1 ; High = Record_Count Repeat Mid = INT((Low + High) / 2) If StuID(Mid) < “8532009” Then Low = Mid +1 ElseIf StuID(Mid) > “8532009” Then High = Mid - 1 End If Until StuID(Mid) = “8532009” or Low > High If Low <= High Then Output HW4(Mid) Else Output “ 無學號 8532009 之學生成績 “ End If

27 MSLee2002@Yes 計算機概論 - 搜尋 mslee@nctu 26 LOW  1 HIGH  N REPEAT MIDDLE  INT( (LOW +HIGH) / 2 ) IF DESIRED_NAME <NAME(MIDDLE) THEN HIGH  MIDDLE - 1 ELSE IF DESIRED_NAME >NAME(MIDDLE) THEN LOW  MIDDLE + 1 END IF UNTIL (DESIRED_NAME =NAME(MIDDLE) ) OR (LOW >HIGH) 二元搜尋法 (Binary Search)

28 MSLee2002@Yes 計算機概論 - 搜尋 mslee@nctu 27 SUBROUTINE BinarySearch(Key, X(), LowBound, UpperBound, Index) Low  LowBound High  UpperBound REPEAT Middle  INT( (Low + High ) / 2 ) IF Key <X(Middle) THEN High  Middle - 1 ELSE IF Key >X(Middle) THEN Low  Middle + 1 END IF UNTIL (Key =X(Middle) ) OR (Low > High) IF Low >High THEN Index =0 ELSE Index =Middle END SUBROUTINE 二元搜尋法 Subroutine - Nonrecursive version

29 MSLee2002@Yes 計算機概論 - 搜尋 mslee@nctu 28 SUBROUTINE BinarySearch(Key, X(), LowBound, UpperBound, Index) Middle  INT( (LowBound + UpperBound) / 2 ) IF Key <X(Middle) THEN BinarySearch(Key, X(), LowBound, Middle -1, Index) ELSE IF Key >X(Middle) THEN BinarySearch(Key, X(), Middle +1, UpperBound, Index) ELSE IF LowBound >UpperBound THEN Index =0 ELSE Index =Middle END IF END SUBROUTINE 二元搜尋法 Subroutine - Recursive version

30 MSLee2002@Yes 計算機概論 - 搜尋 mslee@nctu 29 資料存取技術 -- 赫序函數搜尋法 (Hashing Function Search)  赫序 (Hashing) 是一種相當有效率的資料存 取技術,從檔案存取到資料庫管理系統 (Database Management System) ,高階程式 語言的翻譯程式與編譯程式,計算機的作 業系統 (Operating System) ,以致於許多系統 程式為求簡單快速地運用有限的儲存資源 達成資料運作 (Data manipulate) 的功能,都 是應用這種技術。

31 MSLee2002@Yes 計算機概論 - 搜尋 mslee@nctu 30 赫序函數搜尋法的意義  所謂「赫序函數」,簡單地說,就是 可以將鬆散而無序的資料換算成密集 的、有對應關係的整數值之簡單函數。  有人稱赫序函數為一種由關鍵字至位 址 (Key-to-address) 的轉換函數。

32 MSLee2002@Yes 計算機概論 - 搜尋 mslee@nctu 31 赫序函數搜尋法之資料儲存與擷取  首先,欲將資料儲存在檔案時,用赫序函 數我們可以計算出每一資料錄之關鍵字所 對應的整數值,而該整數即為預備作為存 放該資料錄之位址。  其次,在以赫序函數儲存資料的檔案中, 欲找尋特定之資料錄,即可以該資料錄之 關鍵字,運用相同之赫序函數計算出對應 的整數值,而該整數即為存放該資料錄之 位址。

33 MSLee2002@Yes 計算機概論 - 搜尋 mslee@nctu 32 赫序函數搜尋法 ─ 範例 ( 餘數法 )

34 MSLee2002@Yes 計算機概論 - 搜尋 mslee@nctu 33 赫序函數搜尋法之要領  設定一種以資料錄關鍵值決定儲存位址的赫序函 數。  每一筆資料錄依設定的赫序函數決定儲存位址。  搜尋時,由特定的資料錄之關鍵值求算赫序函數 值即可推算儲存位址,找出特定的資料錄。  赫序函數的計算時間得遠小於在資料表中比對資 料錄的時間。

35 MSLee2002@Yes 計算機概論 - 搜尋 mslee@nctu 34 1. 餘數法  將資料錄關鍵值除以固定數之餘數為 儲存位址  H(K) = (K mod N) + 1 K 代表資料錄關鍵值 N 代表儲存位址容納資料錄的數量  {10, 13, 19, 52, 31} 之儲存位址分別是 1, 4, 5, 3, 2 幾種簡單的赫序函數

36 MSLee2002@Yes 計算機概論 - 搜尋 mslee@nctu 35 2. 平方取中間數法  計算出鍵值 K 的平方,然後截取中間 N 位儲存位址  H(K) = H(1234) = G(1234 ×1234) = G(1522756) = 227 幾種簡單的赫序函數

37 MSLee2002@Yes 計算機概論 - 搜尋 mslee@nctu 36 3. 折疊法  將鍵值 K 以 L 為長度切割成許多段落, 然後將這些段落相加得儲存位址  K = 1234567, L = 2 H(1234567) = 12 + 34 + 56 + 7 = 109 幾種簡單的赫序函數

38 MSLee2002@Yes 計算機概論 - 搜尋 mslee@nctu 37 赫序函數的碰撞 (Collision)  當兩個以上的資料錄藉由赫序函數計算而得 的整數值相同時,意即兩者都將使用相同的 儲存位置,此時,即產生碰撞問題。 44  {10, 13, 19, 53, 31} 之儲存位址分別是 1, 4, 5, 4, 2 4  “13” 與 “53” 都要選擇 4 號位置作儲存  碰撞問題  處理碰撞問題的方法 -- 基本上,「先入為主」, 後來者即需往後面的位置找尋空位! 1. 線性移位法 2. 跳蛙式移位法

39 MSLee2002@Yes 計算機概論 - 搜尋 mslee@nctu 38 赫序函數的碰撞 ─ 線性移位法  若預備作為存放資料錄之位址已先有 資料佔用,則往下找尋空的位置,將 該資料錄存入。  若是到達儲存位置的末端依舊無空位, 則轉向儲存位置的前端繼續找尋空的 位置。

40 MSLee2002@Yes 計算機概論 - 搜尋 mslee@nctu 39 赫序函數的碰撞 ─ 線性移位法 K=43N=10 H(K) = (K mod N) + 1 = 4 43

41 MSLee2002@Yes 計算機概論 - 搜尋 mslee@nctu 40 赫序函數的碰撞 ─ 跳蛙式移位法  若預備作為存放資料錄之位址已先有資料 佔用,則改試下一個位置(意即下移一 步),若也被佔用,則跳過新位置之下一 個,而以其下下一個(意即下移二步)為 新位置,若這個新位置也被佔用,則下移 四步為新位置,依此類推。  若是到達儲存位置的末端依舊無空位,則 依步數轉向儲存位置的前端繼續找尋空的 位置。

42 MSLee2002@Yes 計算機概論 - 搜尋 mslee@nctu 41 赫序函數的碰撞 ─ 跳蛙式移位法 K=43N=10 H(K) = (K mod N) + 1 = 4 43


Download ppt "計算機概論 - 搜尋 1 Ming-Shang Lee CopyRight 2001 搜尋 (Searching) 李明山 編撰."

Similar presentations


Ads by Google