散列表

散列表用的是数组支持按照下标随机访问数据结构的特性,所以散列表其实就是数组的一种扩展,由数组烟花而来,可以说,没有数组,就没有散列表

散列函数

如何构造散列函数
1,散列函数计算得到的散列值是一个非负值
2,如果key1=key2,那hash(key1)=hash(key2)
2,如果key1≠key2,那hash(key1)≠hash(key2)

散列冲突

如何解决散列冲突
1,开放寻址法(线性探测法、二次探测,双重散列)
缺点
解决冲突,删除数据的时候比较麻烦,需要特殊标记已经删除掉的数据。所以装填因子上限不能太大
当数据量比较小,装填因子小的时候适合使用开放寻址法,java中ThreadLocalMap使用的就是开放寻址
2,链表法
存储大地偶像,大数据量的散列表,而且比起开放寻址法,他更靓货,支持更多优化策略,比如红黑树代替链表

装载因子
散列表的装载因子=填入表中元素个数/散列表长度
装载因子越大,说明空闲位置越少,冲突越多,散列表的性能会下降
一般装载因子大于0.7就需要散列表扩容
均摊法分批次扩容

一个高效的LRU算法

散列表+双向链表
LRU算法需要解决的问题
查找一个元素
删除一个元素
添加一个元素

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 说明:该系列博客整理自《算法导论(原书第二版)》,但更偏重于实用,所以晦涩偏理论的内容未整理,请见谅。另外本人能力...
    黑夜0411阅读 1,534评论 0 2
  • 散列表(hash table)是实现字典操作的一种有效数据结构,尽管最坏情况下,散列表中的查找一个元素的时间与链表...
    Mrsunup阅读 1,576评论 0 2
  • 概念 散列技术: 在记录的存储位置和它的关键字之间建立一个确定的对应关系f,使得每个关键字key对应一个存储位置f...
    liangxifeng833阅读 2,668评论 1 3
  • 散列表(Hash table)——将条目的关键码视作其在映射结构中的存放位置 散列表由两个要素构成:桶数组与散列函...
    峰峰小阅读 2,386评论 0 3
  • 一 清晨,当阳光洒落在大地;当露珠滋润着泥土;当蝴蝶在花丛中飞舞;当蜻蜓第一次点水…… 白就开始起床,洗刷,然后整...
    东田南阅读 207评论 0 0

友情链接更多精彩内容