<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>数据结构---散列表(Hash Set) on MU</title><link>https://choy-mutao.github.io/dsa_1/hash/</link><description>Recent content in 数据结构---散列表(Hash Set) on MU</description><generator>Hugo</generator><language>zh-cn</language><atom:link href="https://choy-mutao.github.io/dsa_1/hash/index.xml" rel="self" type="application/rss+xml"/><item><title>解决哈希冲突的一般方法</title><link>https://choy-mutao.github.io/dsa_1/hash/%E8%A7%A3%E5%86%B3%E5%93%88%E5%B8%8C%E5%86%B2%E7%AA%81%E7%9A%84%E4%B8%80%E8%88%AC%E6%96%B9%E6%B3%95/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://choy-mutao.github.io/dsa_1/hash/%E8%A7%A3%E5%86%B3%E5%93%88%E5%B8%8C%E5%86%B2%E7%AA%81%E7%9A%84%E4%B8%80%E8%88%AC%E6%96%B9%E6%B3%95/</guid><description>什么是哈希冲突 简单来说, 假设一个哈希函数是: \(y=x \ mod \ 5\), 那么又两个键 1987 和 2 得到的结果都是 2, 则称为 哈希冲突, 其与 哈希函数 有关
冲突的解决 线性试探法 线性试探法属于 开放定址法 的一种, 除此之外, 开放定址法还包括 二元探测法, 双重嘻哈希发等. 当插入键 key 时候, 如果发现桶单元 bucket[hash(key)] 已经被占用, 则向下线性寻找, 直到找到可以使用的空桶. 故而经过第 i 次试探后, 桶单元为:
$$ bucket[(hash(key)+i) \ mod \ M], \ i = 1, 2, 3, \cdots $$
当 查找到某个 key 时, 首先通过哈希函数计算出桶的位置, 然后比较该桶中保存的值是否为该 key, 如果不是, 则继续向下寻找, 如果查到末尾, 则会从头开始查找
而删除某个 key 时, 为了避免查找过程中出现信息丢失, 则会将删除位置标记为 deleted, 这样, 当进行线性查找时, 遇到 deleted 会继续向下查找而不会中断</description></item></channel></rss>