您的位置:首页 > 其它

哈希表(hash)

2017-03-29 12:34 148 查看

C++ hash

STL c++ hash_table 分析

简介

由索引到值的数据结构(data structure that maps keys to values)

直接映射,需要很大的空间。空间的利用率不高,为了将某一元素映射到一个“大小可以接受之索引”,这样的函数为hash function(散列函数或者哈希函数)。通常的哈希函数为取模。

哈希函数(hash function)

h(key) => hash table index

好的哈希函数特点

易于计算

分布均匀(Reduce chance of collision)

different keys should ideally map to different indices

distribute keys uniformly over table

复杂度(complexity)

最好情况O(1)查找

最坏情况O(N)发生了冲突(collisions)

对于string类型哈希函数的设计

简单的ASCII码值相加,隐患很大

使用前三个字符,以27为基,计算key值

使用所有字符,以比字符个数大的质数为基。26个字母,则选择,29,31,37

解决冲突的办法

分离链路(Chaining):在哈希表索引同样的地方,以链表的形式存储value

开放地址(Open addressing):

二次哈希(double hash)

Reference

hash代码实现

usc课件

cis课件
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  hash 哈希 散列 stl