This commit is contained in:
krahets
2023-12-14 02:53:40 +08:00
parent 68eab8e7c1
commit a85d95787b
19 changed files with 156 additions and 156 deletions
+3 -3
View File
@@ -6374,10 +6374,10 @@
<p>平方探测与线性探测类似,都是开放寻址的常见策略之一。当发生冲突时,平方探测不是简单地跳过一个固定的步数,而是跳过“探测次数的平方”的步数,即 <span class="arithmatex">\(1, 4, 9, \dots\)</span> 步。</p>
<p>平方探测主要具有以下优势。</p>
<ul>
<li>平方探测通过跳过平方的距离,试图缓解线性探测的聚集效应。</li>
<li>平方探测通过跳过探测次数平方的距离,试图缓解线性探测的聚集效应。</li>
<li>平方探测会跳过更大的距离来寻找空位置,有助于数据分布得更加均匀。</li>
</ul>
<p>然而,平方探测并不是完美的。</p>
<p>然而,平方探测并不是完美的。</p>
<ul>
<li>仍然存在聚集现象,即某些位置比其他位置更容易被占用。</li>
<li>由于平方的增长,平方探测可能不会探测整个哈希表,这意味着即使哈希表中有空桶,平方探测也可能无法访问到它。</li>
@@ -6394,7 +6394,7 @@
<p>请注意,开放寻址(线性探测、平方探测和多次哈希)哈希表都存在“不能直接删除元素”的问题。</p>
</div>
<h2 id="623">6.2.3 &nbsp; 编程语言的选择<a class="headerlink" href="#623" title="Permanent link">&para;</a></h2>
<p>编程语言采取了不同的哈希表实现策略,下举几个例子。</p>
<p>编程语言采取了不同的哈希表实现策略,下举几个例子。</p>
<ul>
<li>Python 采用开放寻址。字典 dict 使用伪随机数进行探测。</li>
<li>Java 采用链式地址。自 JDK 1.8 以来,当 HashMap 内数组长度达到 64 且链表长度达到 8 时,链表会转换为红黑树以提升查找性能。</li>
+1 -1
View File
@@ -3527,7 +3527,7 @@
</ul>
<h3 id="2-q-a">2. &nbsp; Q &amp; A<a class="headerlink" href="#2-q-a" title="Permanent link">&para;</a></h3>
<div class="admonition question">
<p class="admonition-title">哈希表的时间复杂度什么<span class="arithmatex">\(O(n)\)</span> </p>
<p class="admonition-title">哈希表的时间复杂度什么情况下<span class="arithmatex">\(O(n)\)</span> </p>
<p>当哈希冲突比较严重时,哈希表的时间复杂度会退化至 <span class="arithmatex">\(O(n)\)</span> 。当哈希函数设计得比较好、容量设置比较合理、冲突比较平均时,时间复杂度是 <span class="arithmatex">\(O(1)\)</span> 。我们使用编程语言内置的哈希表时,通常认为时间复杂度是 <span class="arithmatex">\(O(1)\)</span></p>
</div>
<div class="admonition question">