- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
LARSON動態雜湊函數
動態雜湊 (Dynamic Hashing) 動態雜湊函數 利用所謂的「索引」的輔助區域,配合雜湊函數的設計: 如Litwin的虛擬雜湊、Larson動態雜湊和Fagin等人的延展雜湊等。 則是不需要索引輔助的動態雜湊函數: 如Litwin的Trie雜湊。 Larson的動態雜湊函數 定義 在1978年,Larson以串列樹(Link-Tree)的架構,提出了動態雜湊函數的檔案結構 他利用串列樹(Link-Tree)建構了一個稱之為索引的輔助區域,藉以偵測當檔案有新記錄加入時,其所指定儲存的區段當時是否已經放滿了記錄;若已放滿,則需將該區段一分為二;而這些需要儲存的記錄,則由所謂的動態雜湊函數對應於該記錄的主鍵值決定之。 在Larson的方法中,一開始會先有一個雜湊函數h0,用來決定儲存於檔案的記錄類別,進而利用該類別來決定儲存記錄的區段。 記錄的插入 設一筆新的記錄其主鍵值為”in”欲加入檔案中,h0(“in”)=1,但因其每個區段只能儲存四筆記錄,區段0便發生了碰撞的現象,因此必須對區段0做一次分裂(Split)的程序處理。 在Larson的理論中,當第一次分類儲存的區段發生碰撞,便以各個分類節點為樹根(Root),做類似二元樹的結構分裂。 分裂的依據和方法,Larson是選擇一個與h0雜湊函數毫不相關的虛擬0/1亂數產生器。該亂數產生器每次出現0和1的機率是相等的,利用這個產生器就可以決定該i+1筆記錄分裂後的儲存定址位置,其中i表示每個區段的容量。 記錄的搜尋 Larson的雜湊函數中的索引呈現一個樹林的結構,而每棵樹皆是二元樹。 其中的節點,若是屬於外部節點者(即樹葉)皆會指到一個區段位址上;因此當使用者想找尋某一筆記錄時,首先利用h0雜湊函數來分辨其在索引中所屬的二元樹。 決定節點所屬的二元樹後,再檢查是否為外部節點 若是,則到該節點所指的區段中找尋該筆記錄, 若不存在則表示該記錄不在檔案中。 若該節點是樹根節點,則再利用主鍵值去執行虛擬亂數產生器 當產生器傳回的值是0,則找左邊的左子樹 反之則找右子樹。 若該節點為內部節點,則繼續執行亂數產生器,直到找到外部節點為止,即可以找到所屬的區段了 記錄的刪除 Larson的方法中亦考慮了當記錄被刪除時,如何處理以節省空間。 他的方法中,索引內的外部節點均指到某一區段,因此當某一區段內的某一筆記錄被刪除時,可以統計指向該區段的外部節點和其兄弟節點所關連的總記錄數。 若兩個區段總記錄數可以被一個區段所容納,則合併成一個區段;此時索引內指向此兩個區段的外部節點應同時去除,而他們父節點即成為外部節點,而其內容則儲存了結合後的區段位址。 Litwin的虛擬雜湊函數 在1977年Litwin提出了虛擬雜湊函數(Virtual Hashing Function)的概念,其中的雜湊函數本身會隨著檔案中記錄的加入或刪除而做自我調整。 Litwin的虛擬雜湊函數定義如下: hj:Key→Key mod 2jN,j=0,1,2,..., 其中j一開始設為0。 當某一個區段發生碰撞現象時,對應於該區段的部份則取為j=1,亦即該區段之雜湊函數變動為: h1:Key→Key mod 2N 同理,第二次,第三次,...碰撞時,j的值即依次增加。 j值的增加只發生在有碰撞現象的區段中。當發生碰撞時,增加j值可以重新分配該區段中的記錄到兩個不同的區段,主要原因是Litwin的雜湊函數本身在決定區段編號時,是取同餘數的方法,而j值的增加等於對同餘數的除數擴增為兩倍,因此其餘數的範圍亦會隨之擴增兩倍,因此區段內的記錄便分散到兩個不同的區段中。 記錄的插入 以N=100為例,將記錄分散在編號0至99的區段中,如圖。 當新加入一筆主鍵值為4900的記錄時,造成區段0發生碰撞的現象,因而對應於區段0之雜湊函數的j值必須加1,故造成區段0中的五筆記錄分散到區段0和區段100,如圖。 延展雜湊函數 定義 在1979年Fangin、Nieverglt和Pippenger提出了延展雜湊函數。 保證尋找記錄的過程中絕對不曾超過兩次磁碟機讀取次數(Disk Access Time)。 在延展雜湊函數中,包含一個動態結構的輔助區,用以協助記錄的加入或刪除時,彈性分配記錄到各個區段中, 這一彈性的動態輔助區即是「索引」。 在索引中,若所含的深度(depth)數為d,則整個區域將有2d個節點,而每一個節點均儲存一個區段位址 在延展雜湊函數法中,首先利用一個雜湊函數h將主鍵值轉換對應到一個虛擬鍵值(Pseudo-Key),再根據此虛擬鍵值的前d個位元值,分辨其在索引中是屬於那一個節點,再利用每個節點都存有一個區段位址的特點,該區段即是儲存該記錄的區段。 其中d代表索引中對於每個虛擬鍵值選取前面的位元數。 記錄的加入 加
原创力文档


文档评论(0)