哈希函数与哈希表

1 哈希函数特点

  • 输入域无限,输出域有限

  • 对于同一哈希函数,输入相同,输出一定相同

  • 哈希函数的输出值在一定范围内具有离散性,哈希函数的输出值 % m (即对m取模)后,结果仍就有均匀性

    由第一个特性,对于不同的输入,哈希函数的输出有可能相同,即存在哈希碰撞。
    由第三个特性,当输入数量足够大时,哈希函数的输出值在一定域内(如 0 ~ m-1)的分布是离散的,且碰撞到域中的每个值的数量是几乎均匀的。

2 哈希表的扩容

当哈希表的碰撞累计数量超出一定范围是,哈希表在碰撞链上的查询需消耗更多的时间(尽管碰撞链的查询是线性的)

此时需要对哈希表进行扩容,一般哈希表的初始容量设为奇数(可稍稍提高输出的均匀性),当扩容时,如从17 -> 34,需要对哈希表的内容重新计算哈希值。理论上,平均每插入一个数据,哈希表扩容的时间成本为 O(log N),由于其常数项非常小,故可近似视为 O(1)

此外,对于使用虚拟机的语言,如Java中的JVM,虚拟机会在后台离线扩容,从而不占用用户在线等待时间,进一步减少了哈希表扩容时间成本(用户在线等待的时间成本)。

C++,C等无虚拟机,故每次扩容为在线扩容。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 哈希函数的性质 哈希函数又名散列函数,对于经典哈希函数来说,它具有以下5点性质: 1、输入域无穷大 2、输出域有穷...
    名字是乱打的阅读 426评论 0 1
  • 哈希函数: 输入域无穷大,输出域相对有限。 返回值固定,不是随机函数 不同的输入可能对应一个输出,叫做哈希碰撞 不...
    我还不够强阅读 265评论 0 0
  • 哈希函数 定义 输入域是无穷的,输出域S是有限的。 输入参数一旦确定,返回值一定是相同的,不存在随机性;多个不同的...
    Miss_麦兜阅读 259评论 0 0
  • 本文主要作为自己的学习笔记,并不具备过多的指导意义。 哈希函数 哈希函数 输入域无穷大 输出域有边界(1<<64)...
    kirito_song阅读 754评论 0 1
  • 哈希函数与哈希表 哈希函数的性质 哈希函数又叫散列函数,例如MD5,SHA1等,哈希函数具有以下特性: 一个哈希函...
    憨憨二师兄阅读 649评论 0 1