哈希表一个通过哈希函数来计算数据存储位置的数据结构,通常支持
如下操作:
①、insert(key, value):插入键值对(key, value)
②、get(key):如果存在键值对则返回器value,否则返回空置
③、delete(key):删除键为key的键值对
直接寻址技术缺点:
当域U更大时,需要消耗大量内存,很不实际。
如果域U很大而实际出现的key很小,则大量空间被浪费。
无法处理关键字不是数字的情况。
哈希
直接寻址表:key为k的元素放在k的位置上
改进直接寻址表:哈希。
①、构建大小为m的寻址表T。
②、key为k元素放到 h(k) 位置上
③、h(k) 是一个函数(哈希函数),其将域U映射到表T【0,1 ,... ,m - 1】
哈希表
哈希表(Hash Table, 有称为散列表),是一个线性表的存储结构。哈希表有一个直接寻址表和一个哈希函数构成。哈希函数 h(k) 将元素关键字k作为自变量,返回元素的存储下标。
假设有一个长度为7 的哈希表,哈希函数h(k) = k % 7。元素集合{14, 22, 3, 5}
的存储方式如下图。
哈希冲突
通俗的说经过哈希函数到达一个地方。
由于哈希表的大小是有限的, 而要存储的值总数量是无限的,因此对于任何哈希函数,都会出现两个不同元素映射到同一个位置上的情况,这种情况叫做哈希冲突。
比如:h(k) = k % 7,h(0) = h(7) = h(14) = ....。
解决哈希冲突——开放寻址法
开放寻址法:如果哈希函数返回的位置已经有值,则可以向后探查新的位置来存储这个值。
①、线性探查:如果位置i 被占用,则探查
,
....
②、二次探查:如果位置i 被占用, 则
,
,
,
,....
③、二度哈希:有n个哈希函数,当使用第一个哈希函数h1发生冲突时,则尝试使用h2, h3,...
哈希表——常用的哈希函数
哈希表的应用——集合与字典
哈希表的应用——SHA2