This commit is contained in:
krahets
2023-07-21 22:21:21 +08:00
parent f53ea2981d
commit 1188810504
8 changed files with 90 additions and 83 deletions

View File

@@ -4711,8 +4711,8 @@
<h2 id="613">6.1.3. &nbsp; 哈希冲突与扩容<a class="headerlink" href="#613" title="Permanent link">&para;</a></h2>
<p>本质上看,哈希函数的作用是将输入空间(<code>key</code> 范围)映射到输出空间(数组索引范围),而输入空间往往远大于输出空间。因此,<strong>理论上一定存在“多个输入对应相同输出”的情况</strong></p>
<p>对于上述示例中的哈希函数,当输入的 <code>key</code> 后两位相同时,哈希函数的输出结果也相同。例如,查询学号为 12836 和 20336 的两个学生时,我们得到:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-34-1" name="__codelineno-34-1" href="#__codelineno-34-1"></a><span class="m">12386</span><span class="w"> </span>%<span class="w"> </span><span class="nv">100</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="m">36</span>
<a id="__codelineno-34-2" name="__codelineno-34-2" href="#__codelineno-34-2"></a><span class="m">20386</span><span class="w"> </span>%<span class="w"> </span><span class="nv">100</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="m">36</span>
<div class="highlight"><pre><span></span><code><a id="__codelineno-34-1" name="__codelineno-34-1" href="#__codelineno-34-1"></a><span class="m">12836</span><span class="w"> </span>%<span class="w"> </span><span class="nv">100</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="m">36</span>
<a id="__codelineno-34-2" name="__codelineno-34-2" href="#__codelineno-34-2"></a><span class="m">20336</span><span class="w"> </span>%<span class="w"> </span><span class="nv">100</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="m">36</span>
</code></pre></div>
<p>如下图所示,两个学号指向了同一个姓名,这显然是不对的。我们将这种多个输入对应同一输出的情况称为「哈希冲突 Hash Collision」。</p>
<p><img alt="哈希冲突示例" src="../hash_map.assets/hash_collision.png" /></p>