青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

面對現實,超越自己
逆水行舟,不進則退
posts - 269,comments - 32,trackbacks - 0
散列表(Hash table,也叫哈希表),是根據關鍵碼值(Key value)而直接進行訪問的數據結構。也就是說,它通過把關鍵碼值映射到表中一個位置來訪問記錄,以加快查找的速度。這個映射函數叫做散列函數,存放記錄的數組叫做散列表。

哈希表算法-哈希表的構造方法

1、直接定址法

例如:有一個從1到100歲的人口數字統計表,其中,年齡作為關鍵字,哈希函數取關鍵字自身。

           但這種方法效率不高,時間復雜度是O(1),空間復雜度是O(n),n是關鍵字的個數

 

哈希表算法哈希表算法

 

2、數字分析法

有學生的生日數據如下:

年.月.日

75.10.03
75.11.23
76.03.02
76.07.12
75.04.21
76.02.15
...

經分析,第一位,第二位,第三位重復的可能性大,取這三位造成沖突的機會增加,所以盡量不取前三位,取后三位比較好。

3、平方取中法

取關鍵字平方后的中間幾位為哈希地址

4、折疊法

將關鍵字分割成位數相同的幾部分(最后一部分的位數可以不同),然后取這幾部分的疊加和(舍去進位)作為哈希地址,這方法稱為折疊法。

例如:每一種西文圖書都有一個國際標準圖書編號,它是一個10位的十進制數字,若要以它作關鍵字建立一個哈希表,當館藏書種類不到10,000時,可采用此法構造一個四位數的哈希函數。如果一本書的編號為0-442-20586-4,則:

 

哈希表算法哈希表算法

 

5、除留余數法

取關鍵字被某個不大于哈希表表長m的數p除后所得余數為哈希地址。

H(key)=key MOD p (p<=m)

6、隨機數法

選擇一個隨機函數,取關鍵字的隨機函數值為它的哈希地址,即

H(key)=random(key) ,其中random為隨機函數。通常用于關鍵字長度不等時采用此法。

5、除留余數法

取關鍵字被某個不大于哈希表表長m的數p除后所得余數為哈希地址。

H(key)=key MOD p (p<=m)

6、隨機數法

選擇一個隨機函數,取關鍵字的隨機函數值為它的哈希地址,即

H(key)=random(key) ,其中random為隨機函數。通常用于關鍵字長度不等時采用此法。

5、除留余數法

取關鍵字被某個不大于哈希表表長m的數p除后所得余數為哈希地址。

H(key)=key MOD p (p<=m)

6、隨機數法

選擇一個隨機函數,取關鍵字的隨機函數值為它的哈希地址,即

H(key)=random(key) ,其中random為隨機函數。通常用于關鍵字長度不等時采用此法。


處理沖突的方法 

 通常有兩類方法處理沖突:開放定址(Open Addressing)法和拉鏈(Chaining)法。前者是將所有結點均存放在散列表T[0..m-1]中;后者通常是將互為同義詞的結點鏈成一個單鏈表,而將此鏈表的頭指針放在散列表T[0..m-1]中。

1、開放定址法
(1)開放地址法解決沖突的方法
 用開放定址法解決沖突的做法是:當沖突發生時,使用某種探查(亦稱探測)技術在散列表中形成一個探查(測)序列。沿此序列逐個單元地查找,直到找到給定 的關鍵字,或者碰到一個開放的地址(即該地址單元為空)為止(若要插入,在探查到開放的地址,則可將待插入的新結點存人該地址單元)。查找時探查到開放的 地址則表明表中無待查的關鍵字,即查找失敗。
注意:
①用開放定址法建立散列表時,建表前須將表中所有單元(更嚴格地說,是指單元中存儲的關鍵字)置空。
②空單元的表示與具體的應用相關。
【例】關鍵字均為非負數時,可用"-1"來表示空單元,而關鍵字為字符串時,空單元應是空串。
總之:應該用一個不會出現的關鍵字來表示空單元。

(2)開放地址法的一般形式
開放定址法的一般形式為: hi=(h(key)+di)%m 1≤i≤m-1 
其中:
  ①h(key)為散列函數,di為增量序列,m為表長。
 ②h(key)是初始的探查位置,后續的探查位置依次是hl,h2,…,hm-1,即h(key),hl,h2,…,hm-1形成了一個探查序列。
  ③若令開放地址一般形式的i從0開始,并令d0=0,則h0=h(key),則有:
hi=(h(key)+di)%m 0≤i≤m-1 
探查序列可簡記為hi(0≤i≤m-1)。

(3)開放地址法堆裝填因子的要求
 開放定址法要求散列表的裝填因子α≤l,實用中取α為0.5到0.9之間的某個值為宜。

(4)形成探測序列的方法
 按照形成探查序列的方法不同,可將開放定址法區分為線性探查法、二次探查法、雙重散列法等。
①線性探查法(Linear Probing)
該方法的基本思想是:
將散列表T[0..m-1]看成是一個循環向量,若初始探查的地址為d(即h(key)=d),則最長的探查序列為:
d,d+l,d+2,…,m-1,0,1,…,d-1
 即:探查時從地址d開始,首先探查T[d],然后依次探查T[d+1],…,直到T[m-1],此后又循環到T[0],T[1],…,直到探查到T[d-1]為止。

探查過程終止于三種情況:
 (1)若當前探查的單元為空,則表示查找失敗(若是插入則將key寫入其中);
   (2)若當前探查的單元中含有key,則查找成功,但對于插入意味著失敗;
 (3)若探查到T[d-1]時仍未發現空單元也未找到key,則無論是查找還是插入均意味著失敗(此時表滿)。

利用開放地址法的一般形式,線性探查法的探查序列為:
hi=(h(key)+i)%m 0≤i≤m-1 //即di=i

利用線性探測法構造散列表
【例9.1】已知一組關鍵字為(26,36,41,38,44,15,68,12,06,51),用除余法構造散列函數,用線性探查法解決沖突構造這組關鍵字的散列表。
解答:為了減少沖突,通常令裝填因子α
 由除余法的散列函數計算出的上述關鍵字序列的散列地址為(0,10,2,12,5,2,3,12,6,12)。
 前5個關鍵字插入時,其相應的地址均為開放地址,故將它們直接插入T[0],T[10),T[2],T[12]和T[5]中。
 當插入第6個關鍵字15時,其散列地址2(即h(15)=15%13=2)已被關鍵字41(15和41互為同義詞)占用。故探查h1=(2+1)%13=3,此地址開放,所以將15放入T[3]中。
 當插入第7個關鍵字68時,其散列地址3已被非同義詞15先占用,故將其插入到T[4]中。
 當插入第8個關鍵字12時,散列地址12已被同義詞38占用,故探查hl=(12+1)%13=0,而T[0]亦被26占用,再探查h2=(12+2)%13=1,此地址開放,可將12插入其中。
 類似地,第9個關鍵字06直接插入T[6]中;而最后一個關鍵字51插人時,因探查的地址12,0,1,…,6均非空,故51插入T[7]中。
 構造散列表的具體過程【參見動畫演示】

聚集或堆積現象
用線性探查法解決沖突時,當表中i,i+1,…,i+k的位置上已有結點時,一個散列地址為i,i+1,…,i+k+1的結點都將插入在位置i+k+1 上。把這種散列地址不同的結點爭奪同一個后繼散列地址的現象稱為聚集或堆積(Clustering)。這將造成不是同義詞的結點也處在同一個探查序列之 中,從而增加了探查序列的長度,即增加了查找時間。若散列函數不好或裝填因子過大,都會使堆積現象加劇。
【例】上例中,h(15)=2,h(68)=3,即15和68不是同義詞。但由于處理15和同義詞41的沖突時,15搶先占用了T[3],這就使得插入68時,這兩個本來不應該發生沖突的非同義詞之間也會發生沖突。
 為了減少堆積的發生,不能像線性探查法那樣探查一個順序的地址序列(相當于順序查找),而應使探查序列跳躍式地散列在整個散列表中。

②二次探查法(Quadratic Probing)
 二次探查法的探查序列是:
hi=(h(key)+i*i)%m 0≤i≤m-1 //即di=i2
即探查序列為d=h(key),d+12,d+22,…,等。
 該方法的缺陷是不易探查到整個散列空間。

③雙重散列法(Double Hashing)
 該方法是開放定址法中最好的方法之一,它的探查序列是:
hi=(h(key)+i*h1(key))%m 0≤i≤m-1 //即di=i*h1(key)
 即探查序列為:
d=h(key),(d+h1(key))%m,(d+2h1(key))%m,…,等。
 該方法使用了兩個散列函數h(key)和h1(key),故也稱為雙散列函數探查法。
注意:
定義h1(key)的方法較多,但無論采用什么方法定義,都必須使h1(key)的值和m互素,才能使發生沖突的同義詞地址均勻地分布在整個表中,否則可能造成同義詞地址的循環計算。
【例】若m為素數,則h1(key)取1到m-1之間的任何數均與m互素,因此,我們可以簡單地將它定義為:
h1(key)=key%(m-2)+1
【例】對例9.1,我們可取h(key)=key%13,而h1(key)=key%11+1。
【例】若m是2的方冪,則h1(key)可取1到m-1之間的任何奇數。
2、拉鏈法
(1)拉鏈法解決沖突的方法
 拉鏈法解決沖突的做法是:將所有關鍵字為同義詞的結點鏈接在同一個單鏈表中。若選定的散列表長度為m,則可將散列表定義為一個由m個頭指針組成的指針數 組T[0..m-1]。凡是散列地址為i的結點,均插入到以T[i]為頭指針的單鏈表中。T中各分量的初值均應為空指針。在拉鏈法中,裝填因子α可以大于 1,但一般均取α≤1。

【例9.2】已知一組關鍵字和選定的散列函數和例9.1相同,用拉鏈法解決沖突構造這組關鍵字的散列表。
解答:不妨和例9.1類似,取表長為13,故散列函數為h(key)=key%13,散列表為T[0..12]。
注意:
當把h(key)=i的關鍵字插入第i個單鏈表時,既可插入在鏈表的頭上,也可以插在鏈表的尾上。這是因為必須確定key不在第i個鏈表時,才能將它插入 表中,所以也就知道鏈尾結點的地址。若采用將新關鍵字插入鏈尾的方式,依次把給定的這組關鍵字插入表中,則所得到的散列表如下圖所示。
 具體構造過程【參見動畫演示】。

(2)拉鏈法的優點
 與開放定址法相比,拉鏈法有如下幾個優點:
(1)拉鏈法處理沖突簡單,且無堆積現象,即非同義詞決不會發生沖突,因此平均查找長度較短;
(2)由于拉鏈法中各鏈表上的結點空間是動態申請的,故它更適合于造表前無法確定表長的情況;
(3)開放定址法為減少沖突,要求裝填因子α較小,故當結點規模較大時會浪費很多空間。而拉鏈法中可取α≥1,且結點較大時,拉鏈法中增加的指針域可忽略不計,因此節省空間;
(4)在用拉鏈法構造的散列表中,刪除結點的操作易于實現。只要簡單地刪去鏈表上相應的結點即可。而對開放地址法構造的散列表,刪除結點不能簡單地將 被刪結點的空間置為空,否則將截斷在它之后填人散列表的同義詞結點的查找路徑。這是因為各種開放地址法中,空地址單元(即開放地址)都是查找失敗的條件。 因此在用開放地址法處理沖突的散列表上執行刪除操作,只能在被刪結點上做刪除標記,而不能真正刪除結點。

(3)拉鏈法的缺點
 拉鏈法的缺點是:指針需要額外的空間,故當結點規模較小時,開放定址法較為節省空間,而若將節省的指針空間用來擴大散列表的規模,可使裝填因子變小,這又減少了開放定址法中的沖突,從而提高平均查找速度。

本文轉自:http://bbs.csdn.net/topics/320198804
                     http://www.cnblogs.com/jiewei915/archive/2010/08/09/1796042.html
posted on 2012-11-21 14:22 王海光 閱讀(724) 評論(0)  編輯 收藏 引用 所屬分類: 算法
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国产精品久久二区| 亚洲欧美成人一区二区三区| 暖暖成人免费视频| 久久精品国产99| 久久久久成人精品免费播放动漫| 亚洲欧美另类国产| 欧美中在线观看| 久久久久久夜精品精品免费| 免费亚洲电影在线| 欧美午夜不卡| 国际精品欧美精品| 亚洲精品一区二区三区福利| 亚洲午夜高清视频| 久久午夜av| 日韩亚洲在线| 午夜精品一区二区三区在线视 | 日韩一级黄色av| 亚洲欧美国产精品va在线观看 | 亚洲你懂的在线视频| 欧美一级精品大片| 美女脱光内衣内裤视频久久网站| 亚洲福利久久| 在线亚洲观看| 麻豆精品国产91久久久久久| 欧美三级午夜理伦三级中视频| 国产视频亚洲精品| 一本色道久久综合亚洲精品高清| 欧美一区二区高清| 亚洲国产精品一区二区第四页av | 欧美日韩精品是欧美日韩精品| 国产精品国产三级国产专播品爱网 | 久久国产欧美| 亚洲国产91| 欧美一区二区视频在线| 欧美成人tv| 国产一区二区三区在线观看免费视频| 日韩午夜视频在线观看| 快射av在线播放一区| 国产精品一区在线观看| 久久高清免费观看| 国产精品久久久久9999吃药| 亚洲国产高清自拍| 久久久久久穴| 午夜国产精品影院在线观看| 欧美韩日一区二区| 在线欧美影院| 免费亚洲电影在线观看| 久久不射2019中文字幕| 国产日韩欧美精品综合| 午夜精品一区二区三区在线视| 91久久精品网| 欧美3dxxxxhd| 亚洲精品中文字幕有码专区| 蜜臀va亚洲va欧美va天堂| 欧美一区二区国产| 国产视频自拍一区| 久久精品综合| 久久精品人人| 亚洲福利专区| 欧美国产先锋| 欧美成人蜜桃| 日韩网站在线观看| 亚洲欧洲日韩综合二区| 欧美美女bbbb| 在线综合亚洲| 国产精品99久久久久久久vr| 国产精品va| 午夜精彩国产免费不卡不顿大片| 在线一区亚洲| 国产亚洲日本欧美韩国| 久久精品在线免费观看| 久久精品72免费观看| 韩日精品中文字幕| 免费视频久久| 欧美乱人伦中文字幕在线| 一区二区三区|亚洲午夜| 亚洲免费av电影| 国产精品羞羞答答| 久久综合亚州| 欧美国产精品中文字幕| 亚洲视频播放| 欧美在线日韩| 亚洲乱码一区二区| 一区二区三区四区五区在线| 国产欧美欧美| 亚洲第一精品在线| 国产精品爱啪在线线免费观看| 欧美呦呦网站| 欧美丰满少妇xxxbbb| 亚洲欧美三级伦理| 久久免费高清| 亚洲自拍另类| 久久综合色播五月| 亚洲婷婷综合久久一本伊一区| 亚洲女女女同性video| 18成人免费观看视频| 亚洲伦理自拍| 伊人精品久久久久7777| 一本色道久久综合一区| 伊人精品在线| 亚洲伊人网站| 久久一区中文字幕| 欧美国产视频一区二区| 欧美一级大片在线观看| 欧美成ee人免费视频| 欧美在线亚洲在线| 欧美精品一区二区三区久久久竹菊| 午夜精品久久久久影视| 欧美va天堂| 久久综合精品一区| 国产精品久久亚洲7777| 亚洲福利视频二区| 狠狠综合久久av一区二区老牛| 亚洲精品日韩在线| 在线播放精品| 午夜精品久久久久影视| 亚洲精选大片| 久久亚洲一区| 久久久久久久999精品视频| 欧美日韩一区在线观看| 欧美成人日本| 国内精品国语自产拍在线观看| 一本色道久久综合亚洲精品婷婷| 亚洲韩国日本中文字幕| 久久国产综合精品| 欧美影视一区| 国产精品一区二区在线观看| 日韩一级片网址| 亚洲精品视频一区| 蜜桃av一区二区| 麻豆精品视频在线| 国产综合欧美| 欧美一区三区三区高中清蜜桃| 亚洲综合第一页| 欧美日韩一区在线| 日韩一区二区精品视频| 9色精品在线| 欧美精品在线极品| 亚洲欧洲一二三| 日韩一级黄色大片| 欧美日韩国产在线播放网站| 亚洲欧洲日产国码二区| av成人免费观看| 欧美日韩免费一区二区三区| 在线观看国产成人av片| 久久国产精品一区二区| 久久综合久久综合久久综合| 影音先锋国产精品| 免费久久99精品国产| 亚洲第一在线视频| 亚洲精品乱码久久久久久按摩观 | 激情视频一区二区| 欧美中文字幕| 免费人成精品欧美精品| 亚洲国产日韩在线| 欧美精品色一区二区三区| 99re66热这里只有精品3直播| 亚洲免费视频网站| 国产亚洲欧美日韩在线一区| 久久午夜电影网| 亚洲精品一区二区三区不| 亚洲免费综合| 狠狠网亚洲精品| 欧美激情一区二区三区高清视频| 亚洲精品在线免费观看视频| 亚洲影院在线| 久久综合九色| 亚洲一区二区三区免费观看| 久久久久国产精品一区二区| 国产精品v日韩精品v欧美精品网站 | 国产小视频国产精品| 一区二区三区回区在观看免费视频| 欧美国产亚洲精品久久久8v| 免费成人av| 午夜精品福利在线观看| 久久国产精品一区二区| 99精品99| 久久精品国产免费观看| 亚洲美洲欧洲综合国产一区| 最新精品在线| 国产综合视频| 亚洲丝袜av一区| 一区二区在线不卡| 欧美国产一区二区| 国产精品久久久久天堂| 欧美大片免费久久精品三p| 欧美网站在线观看| 久久亚洲春色中文字幕久久久| 欧美激情一区二区三区在线视频| 亚洲欧美一区二区精品久久久| 老牛国产精品一区的观看方式| 午夜国产精品影院在线观看| 欧美日韩国产免费观看| 久久精品一区二区三区四区| 欧美体内she精视频在线观看| 欧美ed2k| 亚洲精美视频| 久久亚洲视频| 亚洲精品日日夜夜| 宅男噜噜噜66一区二区|