Course 4 搜尋 Search.

Slides:



Advertisements
Similar presentations
Software Learning Resource Service Platform CHAPTER 7 搜尋和排序 (Search and Sort) 1.
Advertisements

广州宜家选址分析 0连锁 李若谷 陈玉风 黄小飞 蓝柔盈.
Course 1 演算法: 效率、分析與量級 Algorithms: Efficiency, Analysis, and Order
基本概論 Basic concepts.
Chapter 10 搜尋(search).
数据结构 杨鹏宇 QQ: 版权所有,转载或翻印必究
Introduction 基本概念 授課老師:蕭志明
第一章 資料結構導論 1-1 資料結構簡介 1-2 認識程式設計 1-3 演算法效能分析 1-4 物件導向程式設計與Java.
資料結構 第9章 搜尋.
第 九 章 搜尋(Search) 課程名稱:資料結構 授課老師:_____________.
公會組織糾紛 指導老師:柯伶玫 組員 495B0065 劉致維 495B0072 廖怡塵 495B0097 范家皓.
数据结构(C语言版) Data Structure
供应链管理一体化.
Performance Evaluation
第八章 查找.
運用網路資源趣味化 「每日飲食指南份量」教學
第8章 查找 数据结构(C++描述).
能量買賣訊號 ◎波段賣訊:下列四項出現三項以上(含三項) 1、空方能量升至整波上漲之最高水準,且空方能量>多方 能量30%以上。
中國大陸稅法 ─增值稅 真理大學會計資訊學系 會計專題研究 2009/12/14.
Chapter 7 Search.
Tree(樹) 什麼是「樹」? 「樹」的範例 「樹」的定義 「樹」的表示法.
教育人員退休新法說明會 106年12月14日 ★資料來源:參考銓敘部及高雄市教育局人事室簡報檔.
國文(一) 1.第一單元---青春印記 (學習篇、愛情篇) 2.第二單元---生活美學 3.第三單元---優遊家園.
计算机问题求解 – 论题 算法的效率 2018年03月14日.
DSS架構 其他以電腦為基礎之系統 資料:外部與內部 資料管理 模式管理 知識管理 使用者界面 管理者(使用者)
分治演算法 各個擊破獲得最後勝利 國立中央大學 資工系 江振瑞 教授.
Chapter 4 歸納(Induction)與遞迴(Recursion)
第十章 排序與搜尋.
第 1 章 演算法分析.
搜尋資料結構 Search Structures.
計算機概論 第十章 檔案與資料庫管理系統 陳維魁/陳邦治 旗標出版社.
第8章 記憶體管理的概念.
第九章 查找 2018/12/9.
第七章常見的演算法 目的:解決問題 遞迴演算法 (一)從程式語言的角度來看:就是程序自 己呼叫自己的情況。
重點 資料結構之選定會影響演算法 選擇對的資料結構讓您上天堂 程式.
Ch4.SQL Server 2005資料庫組成員元件介紹
数据结构 -Maple Related- 牟克典 数学科学学院信息科学系 2012秋季 1/16/2019.
基數排序法.
Data Structure.
数据结构 第9章 查找 什么是查找?? 静态查找 动态查找 哈希表 数据结构.
数据结构 第八章 查找.
B+ Tree.
為何電子商務的安全性令人擔憂? 電子商務資訊安全 實體商務也擔心安全-但數位化的偽造數量會更多更快
Sorting in Linear Time Michael Tsai 2013/5/21.
鄧姚文 資料結構 第一章:基本概念 鄧姚文
Week 2: 程式設計概念與 演算法的效能評估
小小銀行家 擔心子女未來的「錢」途嗎?或是否正苦思對策,希望能教導子女更負責任的使用、管理金錢?
Hash(雜湊) 授課者:李驕芸.
作業系統 Operating System 第四單元 檔案系統
Total Review of Data Structures
第1章 绪论 2019/4/16.
计算机算法基础 周中成 苏州科技学院应用数学系 2019/4/18.
第8章 資料排序 資料結構設計與C++程式應用
软件设计任务 从工程管理的角度来看,软件设计分两步完成。 概要设计,将软件需求转化为数据结构和软件的系统结构。
第十二章 文件管理 (Chapter 5 File Management)
Hashing Michael Tsai 2013/06/04.
Course 10 削減與搜尋 Prune and Search
99高中資訊科選修課程 夥伴學習教師 專業進修研習 進階程式設計--演算法 教學示例與研討
演算法時間複雜度 (The Complexity of Algorithms)
講師:郭育倫 第2章 效能分析 講師:郭育倫
Amortized Analysis Michael Tsai 2013/11/14.
演算法分析 (Analyzing Algorithms)
Hashing Michael Tsai 2017/4/25.
Open topic2: 大O( Θ ,Ω)和小o( θ ,ω)有什么区别? 3/19/18 黄秉焜
勞工保險年金制度 簡報人:吳宏翔.
臺灣的障礙者權利運動 ( ) 障礙文化與心靈敘事課程.
本教學投影片係屬教科書著作之延伸,亦受著作權法之保護。
法律的解釋 楊智傑.
Data Structure.
演講綱要 1. 簡介資料結構 2. Hashing (赫序) 模式 3. 如何存取小群的文字資料 4. 如何存取大群的文字資料
Presentation transcript:

Course 4 搜尋 Search

▓ Outlines 本章重點 Search 分類觀點 Linear Search Binary Search Interpolation Search Hashing

▓ Search 分類觀點 Internal Search v.s. External Search. Static Search v.s. Dynamic Search. Partial Key v.s. Whole Key Actual Key v.s. Transformation Key

Internal Search v.s. External Search 觀點: 資料量的多寡 Internal Search: Def: 資料量少,可以一次全部置於Memory中進行search之工作 External Search: Def: 資料量大,無法一次全置於Memory中,須藉助輔助儲存體 (E.g. Disk),進行分段search之工作 B-tree M-way Search tree

Static Search v.s. Dynamic Search 被搜尋的資料集合、資料的搜尋範圍、或資料所存在的表格,其內容是否經常異動 (如: 是否常做資料的插入、刪除或更新) ? 否: Static 紙本的字典、電話簿 是: Dynamic 日常交易資料、電腦字典

▓ Linear Search (線性搜尋) Def: 特質: 又稱Sequential Search。 自左到右 (或右到左),逐一比較各個記錄的鍵值與搜尋鍵值是否相同。 若有找到,則Found (成功搜尋); 若Search完整個資料範圍仍未找到,謂之失敗 (Not found)。 特質: 檔案記錄不須事先排序 可由Random Access (e.g., Array) 或Sequential Access (e.g., Link List) 機制支援 Time Complexity: O(n),n為資料個數 (∵線性)

Linear Search的演算法可分成兩種: Non-Sential (無崗哨) Linear Search Sential Linear Search

Non-Sential Linear Search //記錄個數 //Array of records (file of records) //欲搜尋的鍵值 //輸出的結果 ├ Found: location指出記錄的所在位置 └ Not Found: location重設為0   4 2 n … 5 3 1 S location

分析 平均比較次數 (針對 “成功” 的搜尋): (1+2+3+…+n)/n = n(n+1)/21/n = (n+1)/2 Time: O(n)

Sential Linear Search 觀念: 多一個S[0]記錄,其鍵值設定為x 4 2 n … 5 3 1 S  location x  location   //記錄個數 //Array of records (file of records) //欲搜尋的鍵值 //輸出的結果 ├ Found: location表示出記錄的所在位置 └ Not Found: location為0    

分析 以實際的執行時間而言: 以Time Complexity分析而言: 由於少了 “測試Search範圍是否結束” 之比較 (即: location <= n),所以當n極大時,大約可以省下 ½ 的比較時間。 以Time Complexity分析而言: 由於仍然是線性搜尋,所以時間複雜度還是 O(n)。

▓ Binary Search (二分搜尋) 實施前提: 觀念: 檔案中記錄須事先由小到大排序過 須由Random (或Direct) access之機制支援 (e.g., Array) 觀念: 每次皆與Search範圍的中間記錄進行比較!! while ( l  u ) 比較 (k, S[m]) case “=”: found, i = m, return i; case “<”: u = m-1; case “>”: l = m+1; recurn 0; l m u middle l m u S … 小 大 //找到了 //要找的資料在左半部 //要找的資料在右半部

Algorithm Recursion Version:

Iteration Version:

分析 利用Time function T(n) = T(n/2) + O(1) = T(n/2) + c = (T(n/4 + c)) + c = T(n/4) + 2c = (T(n/8) + c) + 2c = T(n/8) +3c = … = T(n/n) + log2nc = T(1) + c log2n (T(1) = 1, c 為大於 0 的常數) = 1 + c log2n  T(n) = O(log2n)

▓ Interpolation Search (插補搜尋) 實施前提: 檔案中記錄須事先由小到大排序過 須由Random (或Direct) access之機制支援 (e.g., Array) 作法: while ( l  u && i == 0) 比較 (x, S[mid]) case  “=”: found, i = mid, return i; case  “<”: u = mid-1; case  “>”: l = mid+1; recurn 0; ( m 是一個比較的距離) l m l + m u S 小 大 //找到了 //要找的資料在左半部 //要找的資料在右半部

Algorithm //若S數列中只有一個數字時,防止分母為0 Case  Case  Case 

分析 其時間分析的效能是與鍵值分佈有關。一般而言,Uniform Distribution有Best effect. Time Complexity: O(log2 n) ~ O(n) 最佳情況: 同Binary Search– O(log2 n) 每一次都切一半 最差情況: 同線性Search– O(n) 第一次切割後,會剩下 (n-1); 第二次切割後,會剩下 (n-2)筆; …依此類推。 即每一次切割後,只有一筆資料被摒除於下一次的搜尋資料之外。

▓ Hashing (雜湊) Def: 為一種資料貯存與搜尋的技術。若要存取某筆資料x,則先將x經過Hashing Function計算,得出Hashing Address,再到Hash Table對應的Bucket中進行存取x的動作。 Hash Table的結構 由一組Buckets所組成,每個Buckets由一組Slot所組成,每個Slot可存一筆記錄。 圖示:  Hash Table Size = b  s Hash Table Bucket (桶子) b 個 存 / 取 Hashing Function x H(x) (Hash Address) Slot (槽) s 個

優點: 資料搜尋時,記錄不需要事先排序 在沒有collision及overflow情況下,資料搜尋的Time為 O(1) 保密性高 ∵若不知Hashing function,則無法存取資料 可作資料壓縮之用

Identifier Density 與 Loading Density 相關術語 Identifier Density 與 Loading Density Def: 令T為identifier總數,n為目前使用者的identifier個數,b為Hash Table之Bucket數目,S為Bucket中之Slot數目,則: Identifier Density = n/T Loading Density = n/(bS) =   愈大,則表示Hash Table Utilization高,但相對地Collision / Overflow機率也變高。 Collision Def: 不同的資料 (e.g., x與y) 在經由Hashing Function計算,竟得出相同的Hashing Address (即 H(x) = H(y)) 稱之。

Overflow Def: 當Collision產生,且Bucket中無多餘的Slot可存資料稱之。 有Collision並不一定有Overflow,但有Overflow,則必有Collision發生。 若Bucket只有一個Slot,則Collision = Overflow w  H(w) x  H(x) w x y z: Overflow y  H(y) z  H(z)

Hashing Function設計 一個良好的Hashing Function須滿足下列三個準則: 上述準則導引出兩個名詞: 計算簡單 Collision 宜盡量少 Ex: x mod 2就是不好的Hashing Function!! (∵不是0就是1,會經常發生Collision) 不要造成Hashing Table局部儲存 (局部偏重) 的情況 會引發 “空間利用度差” 與 “Collision上升” 的缺失 上述準則導引出兩個名詞: Perfect Hashing Function (完美的雜湊函數) Def: 此Hashing Function 絕對不會有Collision發生 前提: 須先知道所有資料 (for Static Search) Uniform Hashing Function (均勻的雜湊函數) Def: 此種Hashing Function計算所得出的Hashing Address,對應到每個Bucket No.的機率皆相等。(不會有局部偏重的情況)

4種常見的Hashing Function Middle Square (平方值取中間位數) Mod (餘數,或 Division) Folding Addition (折疊相加) Digits Analysis (位數值分析)

Middle Square (平方值取中間位數) Def: 將Key值取平方,依Hashing Table Bucket數目,選取適當的中間位數值作為Hash Address。 e.g., 假設有1000個Bucket,範圍編號為000~999,若有一數值x = 8125,試利用Middle Square求其適當之Hash Address Sol: x = 8125 66015625 取中間三位  156 = Hash Address (取015亦可) (取平方)

Mod (餘數,或 Division) Def: H(x) = x mod m m的選擇之注意事項: m不宜為 “2” 求得的位址僅有0或1,collision的機會很大 m的選擇最好是質數 (除盡1和除盡自已)

Folding Addition (折疊相加) Def: 將資料鍵值切成幾個相同大小的片段,然後將這些片段相加,其總和即為Hashing Address 相加方式有兩種: Shift (移位) Boundary (邊界) 若有一資料x = 12320324111220,請利用兩種不同的Folding Addition方法求Hashing Address (假設片段長度為3)。

Sol: x=12320324111220 are partitioned into three decimal digits long. P1 = 123, P2 = 203, P3 = 241, P4 = 112, P5 = 20. Shift folding: Folding at the boundaries: 123 203 241 112 20 123 302 241 211 h(x) = 123 + 302 + 241 + 211 + 20 = 897 020

Digits Analysis (位數值分析) Def: 當資料事先已知,則可以選定基底r,然後分析每個資料之同一位數值。 若很集中,則捨棄該位; 若很分散,則挑選該位,而挑選的位數值集合成Hashing Address。 Ex:

4種常見的Overflow處理方式 Linear Probing (線性探測) Quadratic Probing (二次方探測) Rehashing (再雜湊) Link List (鏈結串列,或稱Chain)

Linear Probing (線性探測) Def: 又稱Linear Open Addressing。當H(x)發生overflow,則循著H(x)+1, H(x)+2, …, H(x)-1順序,逐步搜尋,直到: 遇見有空的Bucket 已搜尋完一圈為止 (表示Hash Table Full,無法store) 圖示: x

缺點: 易形成資料群聚 (Clustering)現象,增加Searching Time Hash Table有11個buckets (編號: 0~10),每個bucket只有一個slot,假設Hashing Function = x mod 11,並採取 “Linear Probing”處理overflow。試依照下列資料次序存入Hash Table,會得到什麼結果? 5, 16, 33, 21, 22, 27, 38, 17 Sol: 缺點: 易形成資料群聚 (Clustering)現象,增加Searching Time 33 1 22 2 3 4 5 6 16 7 27 8 38 9 17 10 21  H(33)  H(22) 屬於“5”的部落。原本應該屬於位置 “6”的資料17,被擠到很遠的地方,要翻山越嶺才能找到它!! Search Time增加!!  H(5)  H(16)  H(27)  H(38)  H(17)  H(21)

Quadratic Probing (二次方探測) Def: 為改善Clustering現象而提出。當H(x)發生overflow時,則探測 (H(x) ± i2) mod b,b為bucket數,1 ≤ i ≤ (b-1)/2 圖示: 空位的探測次序:    H(x)  

承接上題,並改採 “Quadratic Probing”處理overflow。則Hash Table內容為何? 5, 16, 33, 21, 22, 27, 38, 17 Sol: 33 1 22 2 3 4 27 5 6 16 7 17 8 9 38 10 21  H(33)  H(22)  H(5)  H(16)  H(27)  H(38)  H(17)  H(21)

承接上題,44  ? Sol: H(44) = 0  (0+12) mod 11 = 1 (0-12) mod 11 = 10 33 1 22 2 44 3 4 27 5 6 16 7 17 8 9 38 10 21 負值需先加上11的適當倍數,再取mod!!

Rehashing (再雜湊) Def: 提供一系列的Hashing Functions: f1, f2, f3, … fn。若使用 f1 發生overflow,則改用 f2; 以此類推,直到: 沒有overflow發生 全部function用完

Link List (鏈結串列,或稱Chain) 將具有相同Hashing Address的資料,以Link list方式串連在同一Bucket中。 承接上題,並改採 “Quadratic Probing”處理overflow。則Hash Table內容為何? 5, 16, 33, 21, 22, 27, 38, 17 Sol: H(22) H(33) 22 33 1 2 3 4 5 6 17 7 8 9 10 21 H(38) H(27) H(16) H(5) 16 27 38 H(17) H(21)

補 充

補 1: Decision Tree for Binary Search 目的: 用以描述與了解Binary Search的比較行為 一定是二元樹 給出n = 31筆記錄之Binary Search的決策樹 Sol: 欲搜尋記錄在第18筆,則比較 4 次才能找到 最多之比較次數為何 (比較幾次後,即知失敗)? 5 次 n筆記錄,最多的比較次數 = log2(n+1) = 高度 l m u 1 31 8 u’ 16 l’ 24 [16] [8] [24] [4] [12] [20] [28] [2] [6] [10] [14] [18] [22] [26] [30] [1] [3] [5] [7] [9] [11] [13] [15] [17] [19] [21] [23] [25] [27] [29] [31]

範例練習 繪出n=12筆記錄,執行Binary Search之Decision Tree 有下列資料,26, 55, 77, 19, 13, 2, 5, 49 以Binary Search找 “55” 須比較幾次?