deploy
This commit is contained in:
parent
7a00ea3324
commit
98818eb1f1
@ -1490,12 +1490,12 @@
|
||||
<h1 id="_1">哈希冲突处理<a class="headerlink" href="#_1" title="Permanent link">¶</a></h1>
|
||||
<p>理想情况下,哈希函数应该为每个输入产生唯一的输出,使得 key 和 value 一一对应。而实际上,往往存在不同 key 对应相同 value 的情况,这种情况被称为「哈希冲突 Hash Collision」。</p>
|
||||
<p><strong>哈希冲突会严重影响哈希表的实用性</strong>。试想一下,如果在哈希表中总是查找到错误的结果,那么我们肯定不会继续使用这样的数据结构了。</p>
|
||||
<p>然而,即使我们设计了一个足够好的「哈希函数」,却仍然无法杜绝哈希冲突问题,这是因为:</p>
|
||||
<ul>
|
||||
<li>哈希表的桶的大小(地址范围)是有限的,只要数据量足够大,理论上一定会出现冲突;</li>
|
||||
<li>哈希函数很难使键值对完全均匀分布,这也增大了冲突发生的可能性。</li>
|
||||
</ul>
|
||||
<p>虽然理论上哈希冲突无法避免,但我们仍然可以在数据结构与算法的层面缓解冲突问题,尽量保证哈希表的增删查改操作效率。<strong>常见的哈希冲突的解决方案有「链式地址」和「开放寻址」</strong>。</p>
|
||||
<div class="admonition question">
|
||||
<p class="admonition-title">为什么会出现哈希冲突?</p>
|
||||
<p>因为 <strong>哈希函数的输入空间往往远大于输出空间</strong>,所以不可避免地会出现多个输入产生相同输出的情况。比如,输入空间是全体整数,输出空间是一个固定大小的桶(数组)的索引范围,那么必定会有多个整数同时映射到一个桶索引。</p>
|
||||
</div>
|
||||
<p>虽然理论上哈希冲突难以避免,<strong>但我们仍然可以在数据结构层面上缓解哈希冲突所带来的负面影响</strong>,尽量保证哈希表的增删查改操作效率。</p>
|
||||
<p>常见的哈希冲突的解决方案有「链式地址」和「开放寻址」。</p>
|
||||
<h2 id="_2">链式地址<a class="headerlink" href="#_2" title="Permanent link">¶</a></h2>
|
||||
<p>「链式地址」通过引入链表来解决哈希冲突问题,代价是占用空间变大,因为链表或二叉树包含结点指针,相比于数组更加耗费内存空间。</p>
|
||||
<h3 id="_3">链表引入<a class="headerlink" href="#_3" title="Permanent link">¶</a></h3>
|
||||
|
File diff suppressed because one or more lines are too long
BIN
sitemap.xml.gz
BIN
sitemap.xml.gz
Binary file not shown.
Loading…
Reference in New Issue
Block a user