日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数据结构—— 构造散列函数的六种方法【直接定址法-数字分析法-平方取中法-折叠法-除留余数法-随机数法】

發布時間:2023/12/14 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据结构—— 构造散列函数的六种方法【直接定址法-数字分析法-平方取中法-折叠法-除留余数法-随机数法】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄:

一:直接定址法

二:數字分析法

三:平方取中法

四:折疊法

五:除留余數法

六:隨機數法


這些方法原理都是將原來數字按某種規律變成另一個數字

一:直接定址法

關鍵字的某個線性函數值作為散列地址

?

直接定址法獲取得到的散列函數有點就是簡單,均勻也不會產生沖突

但問題是這需要事先知道關鍵字的分布情況

?

適合查找表較小且連續的情況

由于這樣的限制,在現實應用中,此方法雖然簡單,但卻并不常用

?

二:數字分析法

如果關鍵字是位數較多的數字(比如手機號),且這些數字部分存在相同規律

則可以采用抽取剩余不同規律部分作為散列地址

?

比如手機號前三位是接入號,中間四位是 HLR 識別號,只有后四位才是真正的用戶號

也就是說,如果手機號作為關鍵字,那么極有可能前 7 位是相同的

此時我們選擇后四位作為散列地址就是不錯的選擇

?

同時,對于抽取出來的數字,還可以再進行反轉

右環位移,左環位移等操作

?

目的就是為了提供一個能夠盡量合理地將關鍵字分配到散列表的各個位置的散列函數


數字分析法通常適合處理關鍵字位數比較大的情況

如果事先知道關鍵字的分布且關鍵字的若干位分布較均勻,就可以考慮用這個方法

?

三:平方取中法

即取關鍵字平方的中間位數作為散列地址

?

比如假設關鍵字是 4321,那么它的平方就是 18671041,抽取中間的 3 位就可以是 671,也可以是 710,用做散列地址


平方取中法比較適合不知道關鍵字的分布,而位數又不是很大的情況

?

四:折疊法

折疊法是將關鍵字從左到右分割成位數相等的幾部分(注意最后一部分位數不夠時可以短些)

然后將這幾部分疊加求和

并按散列表表長取后幾位作為散列地址

?

比如假設關鍵字是 9876543210,散列表表長為三位

則我們可以將它分為四組 987|654|321|0

然后將它們疊加求和 987+654+321+0=1962

再取后 3 位得到散列地址即為 962

?

有時可能這還不能夠保證分布均勻

那么也可以嘗試從一端到另一端來回折疊后對齊相加

比如講 987 和 321 反轉

再與 654 和 0 相加,變成 789+654+123+0=1566

此時散列地址為 566


折疊法事先不需要知道關鍵字的分布適合關鍵字位數較多的情況

?

五:除留余數法

此方法為最常用的構造散列函數方法

對于散列表長為的散列函數公式為

很顯然,本方法的關鍵就在于選擇合適的?

根據前輩們的經驗

散列表表長

通常?小于或等于表長(最好接近)的最小質數不包含小于 20 質因子的合數

?

六:隨機數法

選擇一個隨機數

取關鍵字隨機函數值為它的散列地址

?

當關鍵字的長度不等采用這個方法構造散列函數是比較合適

總結

以上是生活随笔為你收集整理的数据结构—— 构造散列函数的六种方法【直接定址法-数字分析法-平方取中法-折叠法-除留余数法-随机数法】的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。