hashing(杂凑法).ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
hashing(杂凑法)

雜湊法 Hashing 學習目標 1.Hashing(雜湊)的定義。 2.雜湊/赫序函數的選擇原則及方法。 3.Hashing(雜湊)搜尋可能發生的問題。 4.如何處理Hashing(雜湊)搜尋的碰撞及溢位問題。 5.Dynamic Hashing(動態雜湊)函數的各種理論。 何謂Hashing 雜湊法定義 雜湊搜尋法是透過一個數學函數來計算或轉換一個鍵值所對應的位址,這種搜尋可以直接且快速的找到鍵值所放的位址;任何透過雜湊搜尋的檔案皆不須經過事先的排序,也就是可以直接以: 鍵值 ---> 雜湊函數 ---> 位址 雜湊(赫序)表格 雜湊(赫序)表格通常用來達成像字典般功能之資料結構。 例如拼字檢查,百科字典載入器之地址連結,編譯器裡的符號表,保留字表等查尋。 定義雜湊(赫序)表格的函數稱為雜湊函數 表格的一個位置稱為一個bucket 每個bucket可以存放記錄個數為5,稱為slot(槽) 通常s=1時,如果不同的鍵值對應至同一位置時,則發生碰撞 如果一個鍵值被對應到一個沒有空位的bucket時,則發生溢位 因此當s=1時,溢位與碰撞同時發生。 雜湊的相關名詞 ? Bucket(桶): 雜湊表中儲存資料的立置,每一個位置對應到唯一的位址,稱為bucket address。一個bucket(桶)就好比是一筆記錄。 s lot(槽): 每一個bucket有好幾個儲存區,此儲存區就是slot(槽)。每一個slot(槽) 即代表記錄中的某個欄位。 Collision(碰撞): 當兩筆不同的資料,經過雜湊函數運算後對應到相同的bucket address,稱為Collision(碰撞)。 Overflow(溢位): 如果資料經雜溱函數運算後,所對應的bucket已經滿了,則稱為Overflow(溢位)。 Synonym(同義字): 當兩個識別字I及J的雜湊函數值經過運算後是相同的,則稱I及J為同義字。 Loading Factor(載入密度): 雜湊空間的載入密度是指識別字的使用數目除以雜湊表內槽的總數。 雜湊函數 Hashing Functions 定義 雜湊(赫序)函數f將識別字轉換到雜湊表的Bucket位址上。 理想狀況下的雜湊函數 f 要能符合幾個設計的特點: 設計重點 運算容易且計算速度要快; 碰撞頻率儘量小; 文字儘量轉換成數字。若關鍵值是字串,必須將字串根據ASCII碼轉換成數字; 函數選取通常是考慮能否將關鍵值轉換索引地址時均勻地散開;儘量充分利用所有的Bucket位置,不要有所偏差(Bias),亦儘可能達到均勻分佈。 雜湊(赫序)函數取得方式 除法(Division) 平方取中法(Mid-Square) 折疊法(Folding) 抽取法(Extraction) 乘法(Mutiplication) 基數法(Radix Method) 位數分析法(Digit Analysis) 除法(Division) 利用餘數運算(﹪或mod),將鍵值K除以某一個數值M,餘數即是K的位址。此位址介於0~(M-1)之間。 h(k)=k mod m 其中k代表關鍵值,m表示索引位址的空間大小。 ?以某數M除關鍵值k,所得餘數便是k的雜湊位址h(k) ? h(k)之值可能為0,1,2....M-1,表格有M個buckets。 ?通常m都採用質數,以減少碰撞。 關於m 的選擇,根據經驗,m為偶數時較易發生碰撞。 因此m的選擇最好是質數或是奇數而這奇數必須符合沒有小於20的質因數存在。 【範例】 鍵值k={34,59,72,95},令m=7, =>h(k)=(k mod 7),可得雜湊位址:6,3,2,5 =>即可將鍵值34放入第6號的位址,59放入第3號,以此類推。 平方取中法(Mid-Square): 將識別字先轉換成一個數值,再將此值平方,然後取中間的幾個位數當作Bucket位址。 Bucket位址必須對映至真實的位址內,因此若其範圍超過實際空間範圍,則必須再予以壓縮。 k2=關鍵值k的平方 若m的位數為P,則只取k2中間的P位數值當作索引位址; 其中k代表關鍵值,m表示索引位址的空間大小。 【範例】 m值是從0~9999共四位數,且k=35625, =>k2=1269140625, =>取正中四位數為9140為索引地址。 折疊法(Folding) 將資料均分成幾個部分,再將這些小部分結合或摺疊起來,產生資料儲存的位置。 ?將k值切割成若干相等長度的區塊,將區塊值累加起來,再取Mod m以得索引位址。 【範例】 k=643,180,321分成643,180,321三區塊 =>643+180+321=1144 =>mod 1001 h(k)1144 mod 1001=143。 ?將一個鍵值分割數部分,再予以相加

文档评论(0)

wujianz + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档