《STL源码剖析》之hashtable

hashtable即散列表,也叫哈希表,它对元素的插入、删除和访问操作具有常数时间复杂度的表现,这种表现不依赖于输入元素的随机性。

1 哈希函数的作用概述

假如使用哈希存储数据,且该所有的数据是16-bits且不带正负号,范围是0~65535,那么使用一个array就可以满足上述期望。具体操作:
  • 首先配置一个array,大小为65536,并把所有元素的值初始化为0;每个元素的值为元素出现的次数。


  • 如果插入元素i,那么就执行++A[i];
  • 如果删除元素i,那么就执行--A[i];
  • 如果访问元素i,那么就执行A[i]。

上述操作时间复杂度均为常数时间,这种解法的额外负担是array的空间和初始化时间。且这个解法存在两种问题:

  • 如果元素是32-bits,那么array的大小为2的32次方,即4GB,占用空间实在是太大了;
  • 如果元素的类型是字符串(或其他)而非整数,将不能作为array的索引

第一个问题是实实在在存在的问题,难以解决;第二个问题可通过把字符串转换为ASII来解决,但是仍可能会产生巨大的数字,比如"jjhou"的索引是:


这太不切实际了,更长的字符串会导致更大的数字,这就回归到第一个问题:array的大小可能会巨大。


为解决上述array空间巨大的问题,我们使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值