数据结构之哈希表

       哈希表是一种数据结构,可以提供快速的插入和查找操作。哈希表的速度明显比树快,树的操作通常需要O(N)的时间级,而哈希表只需要接近常量的时间:即O(1).哈希表不仅速度快,编程实现也相对容易。哈希表也有缺点:它是基于数组的,数组创建之后,难于扩展。某些哈希表被基本填满时,性能下降的非常严重,所以必须要清楚表中将要存储多少数据(或者准备好定期地把数据转移到更大的哈希表中,这是个费时的过程)。而且,也没有一种简便的方法可以以任何一种顺序(例如从小到达)遍历表中数据项。如果需要这种能力,就只能选择其他数据结构。然而,如果不需要有序遍历数据,并且可以提前预测数据量的大小,那么哈希表在速度和易用性方便是无与伦比的。

       哈希表和哈希化有一个重要的概念是如何把关键字转换成数组下标,在哈希表中这个转换是通过哈希函数来完成的。比如规定一个单词含有4个字符,对于单词cats,我们采用“幂的连乘”的方式将一个单词映射成数字。因为有27个可能的字符,包括空格,所以幂采用27,则cats的数字下标是3*27^3+1*27^2+20*27^1+19*27^0 = 60337.如果规定一个单词含有10个字符,则zzzzzzzzzz的数组下标是一个非常大的数字,在内存中的数组根本不可能有这么多的内存单元。解决的方式是哈希(转换)化,将一个非常大的范围的数字压缩到可接受的数组范围中。比如arrayIndex = hugeNumber % arraySize;这就是一个哈希函数,使用哈希函数向数组插入数据之后,这个数组就被称为哈希表。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值