Chapter 14 搜尋 14.1 循序搜尋 14.2 二元搜尋 14.3 雜湊.

Slides:



Advertisements
Similar presentations
简单迭代法的概念与结论 简单迭代法又称逐次迭代法,基本思想是构造不动点 方程,以求得近似根。即由方程 f(x)=0 变换为 x=  (x), 然后建立迭代格式, 返回下一页 则称迭代格式 收敛, 否则称为发散 上一页.
Advertisements

變數與函數 大綱 : 對應關係 函數 函數值 顧震宇 台灣數位學習科技股份有限公司. 對應關係 蛋餅飯糰土司漢堡咖啡奶茶 25 元 30 元 25 元 35 元 25 元 20 元 顧震宇 老師 台灣數位學習科技股份有限公司 變數與函數 下表是早餐店價格表的一部分: 蛋餅 飯糰 土司 漢堡 咖啡 奶茶.
第一單元 建立java 程式.
专利技术交底书的撰写方法 ——公司知识产权讲座
Chapter 10 搜尋(search).
資料結構 第9章 搜尋.
第 九 章 搜尋(Search) 課程名稱:資料結構 授課老師:_____________.
四种命题 班级:C274 指导教师:钟志勤 任课教师:颜小娟.
第四章 數列與級數 4-1 等差數列與級數 4-2 等比數列與級數 4-3 無窮等比級數 下一頁 總目錄.
第5讲 电子控制防抱死制动系统 (ABS).
資料結構設計與C++程式應用 Fundamentals of Data Structures and Their Applications Using C++ 第3章 佇列 資料結構設計與C++程式應用.
JDK 安裝教學 (for Win7) Soochow University
Course 4 搜尋 Search.
第十章 排序與搜尋.
4B冊 認識公倍數和最小公倍數 公倍數和最小公倍數的關係.
類別(class) 類別class與物件object.
(Circular Linked Lists)
TCP/IP介紹 講師:陳育良 2018/12/28.
Chapter 9 高度平衡二元搜尋樹 AVL Binary Search Tree
鄧姚文 資料結構 第九章:排序與搜尋 鄧姚文
Chap3 Linked List 鏈結串列.
第一章 直角坐標系 1-1 數系的發展.
Chapter 11 B-tree 11.1 m-way 搜尋樹 11.2 B-tree.
第九章 搜尋 9-1 搜尋簡介 9-2 常見的搜尋方法 9-3 雜湊搜尋法.
第二部分 免疫系统与免疫活性分子 第二章 免疫系统 第三章 免疫球蛋白 第二 部分 第五章 细胞因子 第四章 补体系统.
2-3-4 Tree and how it relates to Red Black Tree
第一單元 建立java 程式.
第一章 直角坐標系 1-3 函數圖形.
數學 近似值 有效數值.
Hash(雜湊) 授課者:李驕芸.
輸入&輸出 函數 P20~P21.
Definition of Trace Function
小學四年級數學科 8.最大公因數.
數字定位棋 1-7
Hashing Michael Tsai 2013/06/04.
數位學習資料收集整理 Evernote應用
緩衝區溢位攻擊 學生:A 羅以豪 教授:梁明章
挑戰C++程式語言 ──第8章 進一步談字元與字串
圓的定義 在平面上,與一定點等距的所有點所形成的圖形稱為圓。定點稱為圓心,圓心至圓上任意一點的距離稱為半徑,「圓」指的是曲線部分的圖形,故圓心並不在圓上.
GridView.
第10章 資料搜尋(Searching) 10-1 搜尋的基礎 10-2 循序搜尋法 – 未排序資料 10-3 已排序資料的搜尋法
Teacher: 郭育倫 Mail: 演算法 Teacher: 郭育倫 Mail:
 多項式的除法 x3 + 2x2 – 5x + 6 = (x – 1)(x2 + 3x – 2) + 4 被除式 除式 商式 餘式
Ogive plot example 說明者:吳東陽 2003/10/10.
程式設計-- Binary Search 通訊一甲 B 楊穎穆.
Chapter 10 赫序函數 資料結構導論 - C語言實作.
MicroSim pspice.
MiRanda Java Interface v1.0的使用方法
第14章 結構與其他資料形式.
陣列與結構.
資料存取技術--赫序函數搜尋法 (Hashing Function Search)
第 4 章 認識 SQL 語言與資料型別.
Chapter 1 演算法分析 1.1 演算法 1.2 Big-O.
Hashing Michael Tsai 2017/4/25.
10394: Twin Primes ★★★☆☆ 題組:Problem Set Archive with Online Judge
Chapter 15 檔案存取 LabVIEW中的檔案存取函數也可將程式中的資料儲存成Excel或Word檔。只要將欲存取的檔案路徑位址透過LabVIEW中的路徑元件告訴檔案存取函數後,LabVIEW便可將資料存成Excel或Word檔;當然也可以將Excel或Word檔的資料讀入LabVIEW的程式中。
第七章 資料轉換和 個案選擇 7.1 前言 7.2 〝Recode〞功能 7.3 〝Compute〞功能 7.4 〝Count〞功能
1-1 二元一次式運算.
第 十一 章 搜尋(Search) 課程名稱:資料結構 授課老師:________ 2019/5/22.
1757: Secret Chamber at Mount Rushmore
資料表示方法 資料儲存單位.
第一章 直角坐標系 1-3 函數及其圖形.
補充 數值方法 數值方法.
Chapter 1 函數 1.1 函數的定義 1.2 基本函數 1.3 函數的運算 1.4 函數的圖形.
ABAP Basic Concept (2) 運算子 控制式與迴圈 Subroutines Event Block
SQLite資料庫 靜宜大學資管系 楊子青.
10303: How Many Trees? ★★☆☆☆ 題組:Contest Archive with Online Judge
11621 : Small Factors ★★☆☆☆ 題組:Problem Set Archive with Online Judge
快取映射 之直接對映 計算整理.
ABAP Basic Concept (2) 運算子 控制式與迴圈 Subroutines Event Block
Presentation transcript:

Chapter 14 搜尋 14.1 循序搜尋 14.2 二元搜尋 14.3 雜湊

14.1 循序搜尋 循序搜尋(sequential search)又稱為線性搜尋(linear search),適用在小檔案。這是一種最簡單的搜尋方法,從頭開始找一直到找到為止。

14.2 二元搜尋 二元搜尋(binary search)是找尋一個已排序的檔案最好的方法。 14.2 二元搜尋 二元搜尋(binary search)是找尋一個已排序的檔案最好的方法。 二元搜尋的觀念與二元樹十分類似,其比較是從所有記錄的中間點M開始,若欲搜尋的鍵值小於M,則從M之前的記錄繼續搜尋,否則搜尋M以後的記錄,如此反覆進行,直到鍵值被找到為止。

14.2 二元搜尋 舉例來說,假設在已排序數列12, 23, 29, 38, 44, 57, 64, 75, 82, 98,若欲以二元搜尋法找尋82,則先從數列的中間點M = [(left+right)/2] = [(1+10)/2] = 5(第5筆記錄)開始比對,如下所示:

14.2 二元搜尋

14.2 二元搜尋 二元搜尋每一次比較,檔案皆縮小一半,從1/2,1/4,1/8,1/16,...在第k次比較時,最多只剩下[n/2k] 。 14.2 二元搜尋 二元搜尋每一次比較,檔案皆縮小一半,從1/2,1/4,1/8,1/16,...在第k次比較時,最多只剩下[n/2k] 。 最壞的情況是搜尋到最後只剩下一個記錄n/2k = 1,所以 K = log2n,即最多的比較次數是log2n。

14.3 雜湊 在雜湊法中,鍵值(key value)或識別字(identifier)在記憶體的位址是經由函數(function)轉換而得的,如圖14-1。此種函數,一般稱之為雜湊函數(hashing funciton)或鍵值對應位址轉換(key to address transformation)。

14.3 雜湊 4.3.1 雜湊函數 一般常用的雜湊函數有下列四種方法: 14.3 雜湊 4.3.1 雜湊函數 一般常用的雜湊函數有下列四種方法: 平方後取中間值法(mid-square) 此種方法乃是將鍵值平方,然後視儲存空間的大小來決定取幾位數。 除法(division) 此種方法將鍵值利用模數運算(mod)後,其餘數即為此鍵值所對稱的位址,亦即 Fd(x) = x mod m 。

14.3 雜湊 數位分析法(digit analysis) 此種方法適合大的靜態資料 ,亦即所有的鍵值均事先知 道,然後檢查鍵值的所有數 位,分析每一數位是否分佈 均勻,將不均勻的數位刪除 ,然後根據儲存空間的大小 來決定數位的數目。

14.3 雜湊 很容易可觀察在7個鍵值中1、2、3位(由左邊算起)的數值顯得太不均勻,故刪除第1,2,3位數,再觀察第8位也太多8,故刪除。 14.3 雜湊 很容易可觀察在7個鍵值中1、2、3位(由左邊算起)的數值顯得太不均勻,故刪除第1,2,3位數,再觀察第8位也太多8,故刪除。 假設有1000個儲存空間,而且挑選每一鍵值的4,6,7位做為再儲存的位址,分別為523, 937, 382, 497, 616, 954, 236。

14.3 雜湊 上述提及利用四種方法將鍵值(或識別字)轉換其對應的儲存位址,這些儲存位址,一般稱之為雜湊表(Hash table)。 14.3 雜湊 上述提及利用四種方法將鍵值(或識別字)轉換其對應的儲存位址,這些儲存位址,一般稱之為雜湊表(Hash table)。 在雜湊表內將儲存空間劃分為b個桶(bucket),分別為HT(0),HT(1),...,HT(b-1) 。 每個桶具S個記錄,亦即由S個槽(slot)所組合而成。因此雜湊函數是把鍵值轉換;對應到雜湊表的0至b-1桶中。

14.3 雜湊 在C語言中所有合乎規定變數名稱共有 ,此處假設變數名稱只有六位數是合法的。 14.3 雜湊 在C語言中所有合乎規定變數名稱共有 ,此處假設變數名稱只有六位數是合法的。 而變數名稱不一定要設六位,只要低於或等於六位即可,因此總共有27 + 27×37 + 27×372 + 27×373 + 27×374 + 27×375 即 。

14.3 雜湊 假設有n個,則稱n/T為識別字密度(identifier density),而稱α= n/(sb)為裝載密度(loading density)或裝載因子(loading factor)。 假使有識別字k1和k2,經過雜湊函數轉換,若此二個識別字對應到相同的桶中,此時稱之為碰撞(collision)或同義字(synonyms)。若桶中的S槽還未用完,則凡是該桶的同義字均可對應至該桶中。

14.3 雜湊 如果識別字對應至一個已滿的桶中時,此稱之為溢位(overflow)。如果桶的大小S只有一個槽,則碰撞與溢位必然會同時發生。 14.3 雜湊 如果識別字對應至一個已滿的桶中時,此稱之為溢位(overflow)。如果桶的大小S只有一個槽,則碰撞與溢位必然會同時發生。 假設雜湊表HT 中b = 27桶,每桶有2個槽,即S = 2,而且某程式中所用的變數n = 10個識別字。

14.3 雜湊 裝載因子α= 10/27×2≒0.19。 雜湊函數必須能夠將所有的識別字對應到1-27的整數中,假設以1-27整數來代替英文字母A-Z及底線(_),則將雜湊函數定義為f(x) =識別字X的第一個字母。

14.3 雜湊 例如HD、E、K、H、J、B2、B1、B3、B5與M分別對應到8、5、11、8、10、2、2、2、2、及13號桶中,其中B1、B2、B3、B5分別對應到2號桶中,是同義字亦即產生碰撞。 HD與H亦是同義字,其對應到8號桶中,圖14-2是HD、E、K、H、J、B2與B1對應到雜湊表的情形。

14.3 雜湊 在圖14-2當B3再進入雜湊表時,就發生溢位。假使每個桶中只有一個槽,則產生的溢位的機率就增加了。

14.3 雜湊 14.3.2 解決溢位的方法(overflow handling) 14.3 雜湊 14.3.2 解決溢位的方法(overflow handling) 線性探測(linear probing): 是把雜湊位址視為環狀的空間,當溢位發生時,以線性方式從下一號桶開始探測,找尋一個空的儲存位址將資料存入。 若找完一個循環還沒有找到空間,則表示位置已滿。如將HD、E、H、B2、B1、B3、B5、K、A、Z與ZB,放入具有每一桶只有一個槽的雜湊表中,其結果如圖14-3所示:

14.3 雜湊

14.3 雜湊 由於f(x) = X的第一字母,所以f(HD) = 8,f(E) = 5,亦即HD、E分別放在雜湊表中第8號與第5號桶中,f(H) = 8,此時8號桶已有HD,故發生碰撞及溢位,利用線性探測即往8號桶下找一空白的桶號,發現9號是空的,所以9號桶為H。

14.3 雜湊 f(B2) = 2放入2號桶,f(B1)與f(B3) = 2,由於2號桶已存B2,故往下找各別存於3與4號桶,當B5再轉進來時就存於6號桶。f(K) = 11放入11號桶,f(A) = 1放入1號桶,f(Z) = 26放入26號桶,f(ZB)亦是26只好從1號桶往下找一空間放入7號。 由上例應該明瞭線性探測如何處理溢位的情形。線性探測又稱為線性開放位址(linear open addressing)。

14.3 雜湊 利用線性探測以解決溢位間題,極易造成鍵值聚集在一塊,增加搜尋的時間,如欲尋找ZB則必須尋找HT(26)、HT(1)、...、HT(7),共須八次比較。

14.3 雜湊 重覆雜湊(rehashing): 乃是先設計好一套的雜湊函數f1,f2,f3,...,fm,當溢位發生時先使用f1,若再發生溢位則使用f2,.....一直到沒有溢位發生。

14.3 雜湊 平方探測(quadratic probing): 此法是用來改善線性探測之缺失,避免相近的鍵值聚集在一塊。當f(x)的位址發生溢位時,下一次是探測(f(x)+i2) % b與(f(x) - i2) % b,其中1 < i < (b-1)/2,b是具有4j+3型式的質數。

14.3 雜湊 鏈結串列(chaining): 是將雜湊空間建立成b個串列,起初只有b個串列首,故放起始位址,並不存放資料,相同位址的鍵值,將形成一個鍵值結串列如圖14-4所示。 B5,B3,B1,B2放在第2個串列,H與HD收在第8個串列,以及ZB與Z放在第26個串列上。

14.3 雜湊