为什么哈希表能够加快查找效率?

很多语言都提供map的数据类型,map一个很常用的功能,那就是key-value的存储和查找功能。这种数据类型的实现原理就是通过哈希表来实现快速查找。

 

哈希表的基本原理:原本无序的集合经过哈希算法被重新调整位置,排列成新序列,也就是hashtable(与其说是表,不如说是某种数据结构的数组)。

以某string集合为例,如图:

原始序列  hash算法   关键字   取模(10)   重排后的数组(somestructurea[])

string1------------>>  24  ----->>4  --------->>a[4] 

string2------------>>  2940 ---->>0  --------->>a[0]

string3------------>>  598  ---->>8  --------->>a[8]

string4------------>>  97  ----->>7  --------->> a[7]

 

此处hash算法其实包括了两部分,(1)把字符串压缩成一个整数关键字(2)对关键字取模,将2^32的整数范围压缩成10。当然由于压缩率太大,所以发生冲突的概率是很高的,实际问题的解决中不会采用这么大的压缩率。如果有冲突,参见哈希表如何解决冲突

 

ok,现在来了一个新的元素string_x,我们要判断此元素是否在先前的string集合中。那么:

addr = hash(string_x)

if(a[addr].data==string_x)

     return1;//找到了

else

    ruturn 0;//没找到

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页