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

很多语言都提供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;//没找到

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值