亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

數據結構之哈希表

系統 2351 0


wikipedia上的解釋

http://zh.wikipedia.org/wiki/%E5%93%88%E5%B8%8C%E8%A1%A8


下圖示意了哈希表(Hash Table)這種數據結構。

哈希表


如上圖所示,首先分配一個指針數組,數組的每個元素是一個鏈表的頭指針,每個鏈表稱為一個槽(Slot) 。哪個數據應該放入哪個槽中由哈希函數決定,在這個例子中我們簡單地選取哈希函數h(x) = x % 11,這樣任意數據x都可以映射成0~10之間的一個數,就是槽的編號,將數據放入某個槽的操作就是鏈表的插入操作。

如果每個槽里至多只有一個數據,可以想像這種情況下 search insert delete 操作的時間復雜度都是O(1),但有時會有多個數據被哈希函數映射到同一個槽中,這稱為碰撞(Collision) ,設計一個好的哈希函數可以把數據比較均勻地分布到各個槽中,盡量避免碰撞。如果能把n個數據比較均勻地分布到m個槽中,每個糟里約有n/m個數據,則 search insert delete 和操作的時間復雜度都是O(n/m),如果n和m的比是常數,則時間復雜度仍然是O(1)。一般來說,要處理的數據越多,構造哈希表時分配的槽也應該越多,所以n和m成正比這個假設是成立的。

請讀者自己編寫程序構造這樣一個哈希表,并實現 search insert delete 操作。

如果用我們學過的各種數據結構來表示n個數據的集合,下表是 search insert delete 操作在平均情況下的時間復雜度比較。

各種數據結構的search、insert和delete操作在平均情況下的時間復雜度比較

數據結構 search insert delete
數組 O(n),有序數組折半查找是O(lgn) O(n) O(n)
雙向鏈表 O(n) O(1) O(1)
排序二叉樹 O(lgn) O(lgn) O(lgn)
哈希表(n與槽數m成正比) O(1) O(1) O(1)

根據以上算法,抽象數據結構如下:

/*哈希表*/

struct obj_container {
obj_hash_fn *hash_fn;//哈希函數
obj_callback_fn *cmp_fn;
int n_buckets; //分配多少個slot ?
int elements; //哈希表中元素數目
int version;
/*!variable size */
struct bucket buckets[0]; /*! lengthen tailq, each bucket is a linkedlist */
};

// 每個slot 為一個鏈表

struct bucket_entry {
SPD_LIST_ENTRY(bucket_entry)entry;
int version;
struct obj *pobj; /* pointer to internal data */
}bucket;


接下來實現 search, link , unlink函數。


數據結構之哈希表


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 国产亚洲精品福利在线 | 国产精品一区二区在线观看 | 99在线精品日韩一区免费国产 | 久久福利资源国产精品999 | 国产免费人视频在线观看免费 | 免费性网站 | 四虎免费永久网站入口 | 2019中文字幕视频 | 欧美高清在线精品一区二区不卡 | 五月婷婷免费视频 | 香蕉尹人综合精品 | 成人毛片免费视频 | 美女又黄又免费的视频 | 国产精品va | 国产精品福利视频手机免费观看 | 久久综合久久伊人 | 大伊香蕉精品视频在线天堂 | 久久国产这里只有精品 | 久久不卡一区二区三区 | 四虎.com| www成人免费视频 | 欧美精品一级毛片 | 波多野吉衣一区二区三区在线观看 | 麻豆国内精品久久久久久 | 国产成人欧美 | 毛片大| 亚洲乱码在线观看 | 伊人网综合在线观看 | 热热涩热热狠狠色香蕉综合 | 久操视频在线播放 | 婷婷国产| 国产福利视频精品 | 夜间福利影院 | 亚洲精品久久精品h成人 | jiucao在线观看精品 | 日韩中文字幕免费 | 久久久久久a亚洲欧洲aⅴ | 午夜国产福利在线观看 | 国产一区二区高清在线 | 久久久精品在观看999 | 国产亚洲欧美在在线人成 |