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

Jiang's C++ Space

創作,也是一種學習的過程。

   :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::

七、哈希表(Hash Table)及散列法(Hashing)

數組的特點是:尋址容易,插入和刪除困難;而鏈表的特點是:尋址困難,插入和刪除容易。那么我們能不能綜合兩者的特性,做出一種尋址容易,插入刪除也容易的數據結構?答案是肯定的,這就是我們要提起的哈希表,哈希表有多種不同的實現方法,我接下來解釋的是最常用的一種方法——拉鏈法,我們可以理解為“鏈表的數組”,如圖:


左邊很明顯是個數組,數組的每個成員包括一個指針,指向一個鏈表的頭,當然這個鏈表可能為空,也可能元素很多。我們根據元素的一些特征把元素分配到不同的鏈表中去,也是根據這些特征,找到正確的鏈表,再從鏈表中找出這個元素。

元素特征轉變為數組下標的方法就是散列法。散列法當然不止一種,我下面列出三種比較常用的。

1,除法散列法
最直觀的一種,上圖使用的就是這種散列法,公式:
index = value % 16
學過匯編的都知道,求模數其實是通過一個除法運算得到的,所以叫“除法散列法”。

2,平方散列法
求index是非常頻繁的操作,而乘法的運算要比除法來得省時(對現在的CPU來說,估計我們感覺不出來),所以我們考慮把除法換成乘法和一個位移操作。公式:
index = (value * value) >> 28
如果數值分配比較均勻的話這種方法能得到不錯的結果,但我上面畫的那個圖的各個元素的值算出來的index都是0——非常失敗。也許你還有個問題,value如果很大,value * value不會溢出嗎?答案是會的,但我們這個乘法不關心溢出,因為我們根本不是為了獲取相乘結果,而是為了獲取index。

3,斐波那契(Fibonacci)散列法

平方散列法的缺點是顯而易見的,所以我們能不能找出一個理想的乘數,而不是拿value本身當作乘數呢?答案是肯定的。

1,對于16位整數而言,這個乘數是40503
2,對于32位整數而言,這個乘數是2654435769
3,對于64位整數而言,這個乘數是11400714819323198485

這幾個“理想乘數”是如何得出來的呢?這跟一個法則有關,叫黃金分割法則,而描述黃金分割法則的最經典表達式無疑就是著名的斐波那契數列,如果你還有興趣,就到網上查找一下“斐波那契數列”等關鍵字,我數學水平有限,不知道怎么描述清楚為什么,另外斐波那契數列的值居然和太陽系八大行星的軌道半徑的比例出奇吻合,很神奇,對么?

對我們常見的32位整數而言,公式:
index = (value * 2654435769) >> 28

如果用這種斐波那契散列法的話,那我上面的圖就變成這樣了:


看起來不錯,以后就用斐波那契散列法吧。

不過我們要注意了,前面提到的都是針對整數的散列法,那如果不是整數呢?下面給出一些參考算法,我把其它類型的數據轉變為32位整數,之后的處理前面已經說了。

1,浮點數的散列法

unsigned int HashingDouble(double d)
{
 
if (d==0)
  
return 0;
 
else
 {
  
int exponent;
  
double mantissa = frexp(d, &exponent);
  
return (unsigned int)((2*mantissa-1* (~0U));
 }
}

2,字符串的散列法

unsigned int HashingString(char *str, int iLen)
{
 unsigned 
int hsval = 2654435769;
 
int i;
 
int iShift = 0;
 
for(i=0; i<iLen; i++)
 {
  hsval 
^= (str[i]<<iShift);
  iShift
+=3;
  
if(iShift>24)
   iShift
=0;
 }
 
return hsval;
}

方法就提供那么多,遇到別的情況,比如說Unicode字符串,隨機應變吧!

posted on 2009-10-15 16:50 Jiang Guogang 閱讀(5501) 評論(3)  編輯 收藏 引用 所屬分類: Knowledge

評論

# re: 圖解數據結構(5)——散列法及哈希表 2010-04-06 09:09 小弟
嗯,長見識了~~另外,哈希表只有求索引,怎么沒有求值的呢?  回復  更多評論
  

# re: 圖解數據結構(5)——散列法及哈希表[未登錄] 2012-02-24 14:46 andy
請問為什么是 >>28,而不是其它數  回復  更多評論
  

# re: 圖解數據結構(5)——散列法及哈希表 2013-04-11 08:16 jiapei100
因為 32-4 = 28, 而2^4=16,這里只用了16個索引! @andy
  回復  更多評論
  

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            免费观看在线综合色| 欧美一区二区三区视频免费播放| 亚洲欧美另类中文字幕| 农村妇女精品| 欧美大片91| 欧美国产日韩二区| 亚洲国产成人一区| 亚洲电影在线播放| 亚洲欧洲日韩综合二区| 亚洲视频免费在线观看| 亚洲一区二区在线免费观看| 欧美一级视频免费在线观看| 亚洲先锋成人| 麻豆成人在线观看| 欧美网站在线观看| 亚洲精品视频在线| 久久亚洲精品网站| 亚洲人成亚洲人成在线观看图片 | 国产精品成人免费| 国产精品人成在线观看免费| 亚洲第一区在线| 午夜精品久久久| 亚洲日本激情| 老**午夜毛片一区二区三区| 国产精品不卡在线| 日韩一级视频免费观看在线| 免费在线成人av| 久久精品99国产精品酒店日本| 欧美日韩在线观看视频| 亚洲欧洲精品一区二区三区 | 亚洲国产精品综合| 一区二区三区欧美在线观看| 久久天天综合| 新67194成人永久网站| 欧美三级免费| 日韩亚洲成人av在线| 久久一区欧美| 久久综合九色| 伊人久久大香线| 久久综合色播五月| 久久精品国产亚洲精品| 国产精品一区二区黑丝| 一本一本久久a久久精品综合麻豆 一本一本久久a久久精品牛牛影视 | 亚洲视频综合| 欧美日韩一区二区在线观看| 在线视频精品一区| 亚洲视频在线观看视频| 国产欧美亚洲日本| 麻豆精品视频在线观看视频| 欧美成人一区在线| 午夜精品视频一区| 欧美成人r级一区二区三区| 亚洲综合色丁香婷婷六月图片| 亚洲欧洲av一区二区三区久久| 狠狠入ady亚洲精品| 亚洲精品看片| 伊人狠狠色j香婷婷综合| 亚洲欧洲一区二区三区在线观看 | 激情视频一区二区三区| 亚洲精品一区二区在线| 韩国精品久久久999| 亚洲另类在线视频| 有坂深雪在线一区| 欧美一级淫片播放口| 久久久最新网址| 久久久久久91香蕉国产| 欧美三区在线观看| 日韩视频在线你懂得| 亚洲激情校园春色| 久久免费偷拍视频| 免费观看亚洲视频大全| 国产午夜精品全部视频播放| 亚洲永久免费| 久久精品视频在线免费观看| 国产精品视频最多的网站| 国产精品99久久99久久久二8 | 久久精品国产综合精品| 国产精品v欧美精品v日韩精品| 亚洲国产一区在线| 亚洲免费观看高清在线观看 | 亚洲一区二区三区四区中文 | 久久精品av麻豆的观看方式| 亚洲激情专区| 久久在线免费观看| 亚洲国产一区在线| 亚洲欧美另类综合偷拍| 国产欧美日韩综合一区在线播放| 亚洲欧美偷拍卡通变态| 欧美激情在线有限公司| 亚洲一区二区综合| 国产在线高清精品| 欧美国产日韩亚洲一区| 亚洲欧美日韩国产| 欧美大片在线看免费观看| 中国成人亚色综合网站| 国内自拍一区| 国产精品丝袜久久久久久app| 欧美有码视频| 99热这里只有成人精品国产| 欧美xx视频| 久久精品国产99| 亚洲深夜福利在线| 亚洲第一伊人| 国语自产精品视频在线看| 欧美日韩一区二区三区视频| 欧美成人亚洲成人| 久久久久成人精品| 亚洲在线中文字幕| 亚洲午夜小视频| 99在线精品免费视频九九视| 亚洲激情偷拍| 最新国产乱人伦偷精品免费网站| 伊甸园精品99久久久久久| 国产精品色婷婷| 国产精品日韩一区| 国产欧美91| 精品电影一区| 一二三区精品福利视频| 日韩亚洲国产精品| 亚洲一级一区| 久久精品亚洲一区| 欧美激情中文字幕一区二区| 欧美国产另类| 日韩一级免费| 久久成人精品一区二区三区| 久久免费精品视频| 国产精品扒开腿做爽爽爽软件| 欧美性开放视频| 国产最新精品精品你懂的| 91久久精品网| 久久精品国产视频| 日韩手机在线导航| 欧美一区免费视频| 欧美日韩精品高清| 尤物yw午夜国产精品视频| 亚洲男人av电影| 亚洲福利在线视频| 亚洲欧美日韩国产一区二区| 欧美福利视频在线观看| 国产日本精品| 欧美资源在线观看| 一区二区毛片| 欧美日韩国产bt| 99pao成人国产永久免费视频| 欧美大色视频| 亚洲日本激情| 欧美伦理91i| 欧美一区二区三区喷汁尤物| 久久久久久有精品国产| 这里只有精品视频在线| 欧美日产国产成人免费图片| 欧美承认网站| 欧美在线免费视频| 亚洲高清一区二| 国产精品有限公司| 亚洲欧美日韩久久精品| 亚洲黑丝一区二区| 99精品国产高清一区二区| 欧美风情在线| 老色批av在线精品| 欧美**字幕| 欧美福利视频在线| 欧美激情视频给我| 欧美专区日韩视频| 国产在线观看精品一区二区三区| 久久精品官网| 久久久久久久久久久久久久一区| 国产精品亚洲片夜色在线| 亚洲欧美日韩专区| 久久福利一区| 亚洲欧洲日本在线| 亚洲最新视频在线播放| 国产综合色产| 一本色道精品久久一区二区三区| 国产精自产拍久久久久久蜜| 欧美77777| 国产精品porn| 亚洲福利在线看| 国产欧美va欧美va香蕉在| 亚洲高清av在线| 国产日韩欧美亚洲一区| 亚洲黄色在线| 韩国av一区二区三区| 日韩视频―中文字幕| 国产精品理论片| 亚洲国语精品自产拍在线观看| 国产日韩精品视频一区| 亚洲日本欧美| 亚洲精品久久久久久久久久久久久| 久久久久一区二区| 亚洲一区在线直播| 国产九九精品视频| 亚洲一区精品电影| 香蕉成人伊视频在线观看| 久久香蕉国产线看观看网| 欧美在线黄色| 国产午夜精品福利| 午夜一区不卡| 久久久在线视频| 狠狠久久婷婷|