This commit is contained in:
krahets
2023-11-09 05:13:54 +08:00
parent 9a09f9407e
commit 3f666fa676
85 changed files with 619 additions and 610 deletions
+9 -9
View File
@@ -3357,7 +3357,7 @@
<p class="admonition-title">Question</p>
<p>给定一个长度为 <span class="arithmatex">\(n\)</span> 的数组 <code>nums</code> ,元素按从小到大的顺序排列,数组不包含重复元素。请查找并返回元素 <code>target</code> 在该数组中的索引。若数组不包含该元素,则返回 <span class="arithmatex">\(-1\)</span></p>
</div>
<p><a class="glightbox" href="../binary_search.assets/binary_search_example.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="二分查找示例数据" src="../binary_search.assets/binary_search_example.png" /></a></p>
<p><a class="glightbox" href="../binary_search.assets/binary_search_example.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="二分查找示例数据" class="animation-figure" src="../binary_search.assets/binary_search_example.png" /></a></p>
<p align="center"> 图 10-1 &nbsp; 二分查找示例数据 </p>
<p>如图 10-2 所示,我们先初始化指针 <span class="arithmatex">\(i = 0\)</span><span class="arithmatex">\(j = n - 1\)</span> ,分别指向数组首元素和尾元素,代表搜索区间 <span class="arithmatex">\([0, n - 1]\)</span> 。请注意,中括号表示闭区间,其包含边界值本身。</p>
@@ -3375,25 +3375,25 @@
<div class="tabbed-set tabbed-alternate" data-tabs="1:7"><input checked="checked" id="__tabbed_1_1" name="__tabbed_1" type="radio" /><input id="__tabbed_1_2" name="__tabbed_1" type="radio" /><input id="__tabbed_1_3" name="__tabbed_1" type="radio" /><input id="__tabbed_1_4" name="__tabbed_1" type="radio" /><input id="__tabbed_1_5" name="__tabbed_1" type="radio" /><input id="__tabbed_1_6" name="__tabbed_1" type="radio" /><input id="__tabbed_1_7" name="__tabbed_1" type="radio" /><div class="tabbed-labels"><label for="__tabbed_1_1">&lt;1&gt;</label><label for="__tabbed_1_2">&lt;2&gt;</label><label for="__tabbed_1_3">&lt;3&gt;</label><label for="__tabbed_1_4">&lt;4&gt;</label><label for="__tabbed_1_5">&lt;5&gt;</label><label for="__tabbed_1_6">&lt;6&gt;</label><label for="__tabbed_1_7">&lt;7&gt;</label></div>
<div class="tabbed-content">
<div class="tabbed-block">
<p><a class="glightbox" href="../binary_search.assets/binary_search_step1.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="二分查找流程" src="../binary_search.assets/binary_search_step1.png" /></a></p>
<p><a class="glightbox" href="../binary_search.assets/binary_search_step1.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="二分查找流程" class="animation-figure" src="../binary_search.assets/binary_search_step1.png" /></a></p>
</div>
<div class="tabbed-block">
<p><a class="glightbox" href="../binary_search.assets/binary_search_step2.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="binary_search_step2" src="../binary_search.assets/binary_search_step2.png" /></a></p>
<p><a class="glightbox" href="../binary_search.assets/binary_search_step2.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="binary_search_step2" class="animation-figure" src="../binary_search.assets/binary_search_step2.png" /></a></p>
</div>
<div class="tabbed-block">
<p><a class="glightbox" href="../binary_search.assets/binary_search_step3.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="binary_search_step3" src="../binary_search.assets/binary_search_step3.png" /></a></p>
<p><a class="glightbox" href="../binary_search.assets/binary_search_step3.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="binary_search_step3" class="animation-figure" src="../binary_search.assets/binary_search_step3.png" /></a></p>
</div>
<div class="tabbed-block">
<p><a class="glightbox" href="../binary_search.assets/binary_search_step4.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="binary_search_step4" src="../binary_search.assets/binary_search_step4.png" /></a></p>
<p><a class="glightbox" href="../binary_search.assets/binary_search_step4.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="binary_search_step4" class="animation-figure" src="../binary_search.assets/binary_search_step4.png" /></a></p>
</div>
<div class="tabbed-block">
<p><a class="glightbox" href="../binary_search.assets/binary_search_step5.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="binary_search_step5" src="../binary_search.assets/binary_search_step5.png" /></a></p>
<p><a class="glightbox" href="../binary_search.assets/binary_search_step5.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="binary_search_step5" class="animation-figure" src="../binary_search.assets/binary_search_step5.png" /></a></p>
</div>
<div class="tabbed-block">
<p><a class="glightbox" href="../binary_search.assets/binary_search_step6.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="binary_search_step6" src="../binary_search.assets/binary_search_step6.png" /></a></p>
<p><a class="glightbox" href="../binary_search.assets/binary_search_step6.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="binary_search_step6" class="animation-figure" src="../binary_search.assets/binary_search_step6.png" /></a></p>
</div>
<div class="tabbed-block">
<p><a class="glightbox" href="../binary_search.assets/binary_search_step7.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="binary_search_step7" src="../binary_search.assets/binary_search_step7.png" /></a></p>
<p><a class="glightbox" href="../binary_search.assets/binary_search_step7.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="binary_search_step7" class="animation-figure" src="../binary_search.assets/binary_search_step7.png" /></a></p>
</div>
</div>
</div>
@@ -3929,7 +3929,7 @@
</div>
<p>如图 10-3 所示,在两种区间表示下,二分查找算法的初始化、循环条件和缩小区间操作皆有所不同。</p>
<p>由于“双闭区间”表示中的左右边界都被定义为闭区间,因此指针 <span class="arithmatex">\(i\)</span><span class="arithmatex">\(j\)</span> 缩小区间操作也是对称的。这样更不容易出错,<strong>因此一般建议采用“双闭区间”的写法</strong></p>
<p><a class="glightbox" href="../binary_search.assets/binary_search_ranges.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="两种区间定义" src="../binary_search.assets/binary_search_ranges.png" /></a></p>
<p><a class="glightbox" href="../binary_search.assets/binary_search_ranges.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="两种区间定义" class="animation-figure" src="../binary_search.assets/binary_search_ranges.png" /></a></p>
<p align="center"> 图 10-3 &nbsp; 两种区间定义 </p>
<h2 id="1012">10.1.2 &nbsp; 优点与局限性<a class="headerlink" href="#1012" title="Permanent link">&para;</a></h2>
@@ -3570,7 +3570,7 @@
<h3 id="1">1. &nbsp; 复用查找左边界<a class="headerlink" href="#1" title="Permanent link">&para;</a></h3>
<p>实际上,我们可以利用查找最左元素的函数来查找最右元素,具体方法为:<strong>将查找最右一个 <code>target</code> 转化为查找最左一个 <code>target + 1</code></strong></p>
<p>如图 10-7 所示,查找完成后,指针 <span class="arithmatex">\(i\)</span> 指向最左一个 <code>target + 1</code>(如果存在),而 <span class="arithmatex">\(j\)</span> 指向最右一个 <code>target</code> <strong>因此返回 <span class="arithmatex">\(j\)</span> 即可</strong></p>
<p><a class="glightbox" href="../binary_search_edge.assets/binary_search_right_edge_by_left_edge.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="将查找右边界转化为查找左边界" src="../binary_search_edge.assets/binary_search_right_edge_by_left_edge.png" /></a></p>
<p><a class="glightbox" href="../binary_search_edge.assets/binary_search_right_edge_by_left_edge.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="将查找右边界转化为查找左边界" class="animation-figure" src="../binary_search_edge.assets/binary_search_right_edge_by_left_edge.png" /></a></p>
<p align="center"> 图 10-7 &nbsp; 将查找右边界转化为查找左边界 </p>
<p>请注意,返回的插入点是 <span class="arithmatex">\(i\)</span> ,因此需要将其减 <span class="arithmatex">\(1\)</span> ,从而获得 <span class="arithmatex">\(j\)</span></p>
@@ -3763,7 +3763,7 @@
<li>查找最左一个 <code>target</code> :可以转化为查找 <code>target - 0.5</code> ,并返回指针 <span class="arithmatex">\(i\)</span></li>
<li>查找最右一个 <code>target</code> :可以转化为查找 <code>target + 0.5</code> ,并返回指针 <span class="arithmatex">\(j\)</span></li>
</ul>
<p><a class="glightbox" href="../binary_search_edge.assets/binary_search_edge_by_element.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="将查找边界转化为查找元素" src="../binary_search_edge.assets/binary_search_edge_by_element.png" /></a></p>
<p><a class="glightbox" href="../binary_search_edge.assets/binary_search_edge_by_element.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="将查找边界转化为查找元素" class="animation-figure" src="../binary_search_edge.assets/binary_search_edge_by_element.png" /></a></p>
<p align="center"> 图 10-8 &nbsp; 将查找边界转化为查找元素 </p>
<p>代码在此省略,值得注意以下两点。</p>
@@ -3358,7 +3358,7 @@
<p class="admonition-title">Question</p>
<p>给定一个长度为 <span class="arithmatex">\(n\)</span> 的有序数组 <code>nums</code> 和一个元素 <code>target</code> ,数组不存在重复元素。现将 <code>target</code> 插入到数组 <code>nums</code> 中,并保持其有序性。若数组中已存在元素 <code>target</code> ,则插入到其左方。请返回插入后 <code>target</code> 在数组中的索引。</p>
</div>
<p><a class="glightbox" href="../binary_search_insertion.assets/binary_search_insertion_example.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="二分查找插入点示例数据" src="../binary_search_insertion.assets/binary_search_insertion_example.png" /></a></p>
<p><a class="glightbox" href="../binary_search_insertion.assets/binary_search_insertion_example.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="二分查找插入点示例数据" class="animation-figure" src="../binary_search_insertion.assets/binary_search_insertion_example.png" /></a></p>
<p align="center"> 图 10-4 &nbsp; 二分查找插入点示例数据 </p>
<p>如果想要复用上节的二分查找代码,则需要回答以下两个问题。</p>
@@ -3602,7 +3602,7 @@
<li>执行二分查找,得到任意一个 <code>target</code> 的索引,记为 <span class="arithmatex">\(k\)</span></li>
<li>从索引 <span class="arithmatex">\(k\)</span> 开始,向左进行线性遍历,当找到最左边的 <code>target</code> 时返回。</li>
</ol>
<p><a class="glightbox" href="../binary_search_insertion.assets/binary_search_insertion_naive.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="线性查找重复元素的插入点" src="../binary_search_insertion.assets/binary_search_insertion_naive.png" /></a></p>
<p><a class="glightbox" href="../binary_search_insertion.assets/binary_search_insertion_naive.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="线性查找重复元素的插入点" class="animation-figure" src="../binary_search_insertion.assets/binary_search_insertion_naive.png" /></a></p>
<p align="center"> 图 10-5 &nbsp; 线性查找重复元素的插入点 </p>
<p>此方法虽然可用,但其包含线性查找,因此时间复杂度为 <span class="arithmatex">\(O(n)\)</span> 。当数组中存在很多重复的 <code>target</code> 时,该方法效率很低。</p>
@@ -3615,28 +3615,28 @@
<div class="tabbed-set tabbed-alternate" data-tabs="2:8"><input checked="checked" id="__tabbed_2_1" name="__tabbed_2" type="radio" /><input id="__tabbed_2_2" name="__tabbed_2" type="radio" /><input id="__tabbed_2_3" name="__tabbed_2" type="radio" /><input id="__tabbed_2_4" name="__tabbed_2" type="radio" /><input id="__tabbed_2_5" name="__tabbed_2" type="radio" /><input id="__tabbed_2_6" name="__tabbed_2" type="radio" /><input id="__tabbed_2_7" name="__tabbed_2" type="radio" /><input id="__tabbed_2_8" name="__tabbed_2" type="radio" /><div class="tabbed-labels"><label for="__tabbed_2_1">&lt;1&gt;</label><label for="__tabbed_2_2">&lt;2&gt;</label><label for="__tabbed_2_3">&lt;3&gt;</label><label for="__tabbed_2_4">&lt;4&gt;</label><label for="__tabbed_2_5">&lt;5&gt;</label><label for="__tabbed_2_6">&lt;6&gt;</label><label for="__tabbed_2_7">&lt;7&gt;</label><label for="__tabbed_2_8">&lt;8&gt;</label></div>
<div class="tabbed-content">
<div class="tabbed-block">
<p><a class="glightbox" href="../binary_search_insertion.assets/binary_search_insertion_step1.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="二分查找重复元素的插入点的步骤" src="../binary_search_insertion.assets/binary_search_insertion_step1.png" /></a></p>
<p><a class="glightbox" href="../binary_search_insertion.assets/binary_search_insertion_step1.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="二分查找重复元素的插入点的步骤" class="animation-figure" src="../binary_search_insertion.assets/binary_search_insertion_step1.png" /></a></p>
</div>
<div class="tabbed-block">
<p><a class="glightbox" href="../binary_search_insertion.assets/binary_search_insertion_step2.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="binary_search_insertion_step2" src="../binary_search_insertion.assets/binary_search_insertion_step2.png" /></a></p>
<p><a class="glightbox" href="../binary_search_insertion.assets/binary_search_insertion_step2.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="binary_search_insertion_step2" class="animation-figure" src="../binary_search_insertion.assets/binary_search_insertion_step2.png" /></a></p>
</div>
<div class="tabbed-block">
<p><a class="glightbox" href="../binary_search_insertion.assets/binary_search_insertion_step3.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="binary_search_insertion_step3" src="../binary_search_insertion.assets/binary_search_insertion_step3.png" /></a></p>
<p><a class="glightbox" href="../binary_search_insertion.assets/binary_search_insertion_step3.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="binary_search_insertion_step3" class="animation-figure" src="../binary_search_insertion.assets/binary_search_insertion_step3.png" /></a></p>
</div>
<div class="tabbed-block">
<p><a class="glightbox" href="../binary_search_insertion.assets/binary_search_insertion_step4.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="binary_search_insertion_step4" src="../binary_search_insertion.assets/binary_search_insertion_step4.png" /></a></p>
<p><a class="glightbox" href="../binary_search_insertion.assets/binary_search_insertion_step4.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="binary_search_insertion_step4" class="animation-figure" src="../binary_search_insertion.assets/binary_search_insertion_step4.png" /></a></p>
</div>
<div class="tabbed-block">
<p><a class="glightbox" href="../binary_search_insertion.assets/binary_search_insertion_step5.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="binary_search_insertion_step5" src="../binary_search_insertion.assets/binary_search_insertion_step5.png" /></a></p>
<p><a class="glightbox" href="../binary_search_insertion.assets/binary_search_insertion_step5.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="binary_search_insertion_step5" class="animation-figure" src="../binary_search_insertion.assets/binary_search_insertion_step5.png" /></a></p>
</div>
<div class="tabbed-block">
<p><a class="glightbox" href="../binary_search_insertion.assets/binary_search_insertion_step6.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="binary_search_insertion_step6" src="../binary_search_insertion.assets/binary_search_insertion_step6.png" /></a></p>
<p><a class="glightbox" href="../binary_search_insertion.assets/binary_search_insertion_step6.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="binary_search_insertion_step6" class="animation-figure" src="../binary_search_insertion.assets/binary_search_insertion_step6.png" /></a></p>
</div>
<div class="tabbed-block">
<p><a class="glightbox" href="../binary_search_insertion.assets/binary_search_insertion_step7.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="binary_search_insertion_step7" src="../binary_search_insertion.assets/binary_search_insertion_step7.png" /></a></p>
<p><a class="glightbox" href="../binary_search_insertion.assets/binary_search_insertion_step7.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="binary_search_insertion_step7" class="animation-figure" src="../binary_search_insertion.assets/binary_search_insertion_step7.png" /></a></p>
</div>
<div class="tabbed-block">
<p><a class="glightbox" href="../binary_search_insertion.assets/binary_search_insertion_step8.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="binary_search_insertion_step8" src="../binary_search_insertion.assets/binary_search_insertion_step8.png" /></a></p>
<p><a class="glightbox" href="../binary_search_insertion.assets/binary_search_insertion_step8.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="binary_search_insertion_step8" class="animation-figure" src="../binary_search_insertion.assets/binary_search_insertion_step8.png" /></a></p>
</div>
</div>
</div>
+1 -1
View File
@@ -3292,7 +3292,7 @@
<!-- Page content -->
<h1 id="10">第 10 章 &nbsp; 搜索<a class="headerlink" href="#10" title="Permanent link">&para;</a></h1>
<div class="center-table">
<p><a class="glightbox" href="../assets/covers/chapter_searching.jpg" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="搜索" src="../assets/covers/chapter_searching.jpg" width="600" /></a></p>
<p><a class="glightbox" href="../assets/covers/chapter_searching.jpg" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="搜索" class="cover-image" src="../assets/covers/chapter_searching.jpg" /></a></p>
</div>
<div class="admonition abstract">
<p class="admonition-title">Abstract</p>
@@ -3359,7 +3359,7 @@
</div>
<h2 id="1041">10.4.1 &nbsp; 线性查找:以时间换空间<a class="headerlink" href="#1041" title="Permanent link">&para;</a></h2>
<p>考虑直接遍历所有可能的组合。如图 10-9 所示,我们开启一个两层循环,在每轮中判断两个整数的和是否为 <code>target</code> ,若是则返回它们的索引。</p>
<p><a class="glightbox" href="../replace_linear_by_hashing.assets/two_sum_brute_force.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="线性查找求解两数之和" src="../replace_linear_by_hashing.assets/two_sum_brute_force.png" /></a></p>
<p><a class="glightbox" href="../replace_linear_by_hashing.assets/two_sum_brute_force.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="线性查找求解两数之和" class="animation-figure" src="../replace_linear_by_hashing.assets/two_sum_brute_force.png" /></a></p>
<p align="center"> 图 10-9 &nbsp; 线性查找求解两数之和 </p>
<div class="tabbed-set tabbed-alternate" data-tabs="1:12"><input checked="checked" id="__tabbed_1_1" name="__tabbed_1" type="radio" /><input id="__tabbed_1_2" name="__tabbed_1" type="radio" /><input id="__tabbed_1_3" name="__tabbed_1" type="radio" /><input id="__tabbed_1_4" name="__tabbed_1" type="radio" /><input id="__tabbed_1_5" name="__tabbed_1" type="radio" /><input id="__tabbed_1_6" name="__tabbed_1" type="radio" /><input id="__tabbed_1_7" name="__tabbed_1" type="radio" /><input id="__tabbed_1_8" name="__tabbed_1" type="radio" /><input id="__tabbed_1_9" name="__tabbed_1" type="radio" /><input id="__tabbed_1_10" name="__tabbed_1" type="radio" /><input id="__tabbed_1_11" name="__tabbed_1" type="radio" /><input id="__tabbed_1_12" name="__tabbed_1" type="radio" /><div class="tabbed-labels"><label for="__tabbed_1_1">Python</label><label for="__tabbed_1_2">C++</label><label for="__tabbed_1_3">Java</label><label for="__tabbed_1_4">C#</label><label for="__tabbed_1_5">Go</label><label for="__tabbed_1_6">Swift</label><label for="__tabbed_1_7">JS</label><label for="__tabbed_1_8">TS</label><label for="__tabbed_1_9">Dart</label><label for="__tabbed_1_10">Rust</label><label for="__tabbed_1_11">C</label><label for="__tabbed_1_12">Zig</label></div>
@@ -3561,13 +3561,13 @@
<div class="tabbed-set tabbed-alternate" data-tabs="2:3"><input checked="checked" id="__tabbed_2_1" name="__tabbed_2" type="radio" /><input id="__tabbed_2_2" name="__tabbed_2" type="radio" /><input id="__tabbed_2_3" name="__tabbed_2" type="radio" /><div class="tabbed-labels"><label for="__tabbed_2_1">&lt;1&gt;</label><label for="__tabbed_2_2">&lt;2&gt;</label><label for="__tabbed_2_3">&lt;3&gt;</label></div>
<div class="tabbed-content">
<div class="tabbed-block">
<p><a class="glightbox" href="../replace_linear_by_hashing.assets/two_sum_hashtable_step1.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="辅助哈希表求解两数之和" src="../replace_linear_by_hashing.assets/two_sum_hashtable_step1.png" /></a></p>
<p><a class="glightbox" href="../replace_linear_by_hashing.assets/two_sum_hashtable_step1.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="辅助哈希表求解两数之和" class="animation-figure" src="../replace_linear_by_hashing.assets/two_sum_hashtable_step1.png" /></a></p>
</div>
<div class="tabbed-block">
<p><a class="glightbox" href="../replace_linear_by_hashing.assets/two_sum_hashtable_step2.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="two_sum_hashtable_step2" src="../replace_linear_by_hashing.assets/two_sum_hashtable_step2.png" /></a></p>
<p><a class="glightbox" href="../replace_linear_by_hashing.assets/two_sum_hashtable_step2.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="two_sum_hashtable_step2" class="animation-figure" src="../replace_linear_by_hashing.assets/two_sum_hashtable_step2.png" /></a></p>
</div>
<div class="tabbed-block">
<p><a class="glightbox" href="../replace_linear_by_hashing.assets/two_sum_hashtable_step3.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="two_sum_hashtable_step3" src="../replace_linear_by_hashing.assets/two_sum_hashtable_step3.png" /></a></p>
<p><a class="glightbox" href="../replace_linear_by_hashing.assets/two_sum_hashtable_step3.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="two_sum_hashtable_step3" class="animation-figure" src="../replace_linear_by_hashing.assets/two_sum_hashtable_step3.png" /></a></p>
</div>
</div>
</div>
@@ -3396,7 +3396,7 @@
</div>
<h2 id="1053">10.5.3 &nbsp; 搜索方法选取<a class="headerlink" href="#1053" title="Permanent link">&para;</a></h2>
<p>给定大小为 <span class="arithmatex">\(n\)</span> 的一组数据,我们可以使用线性搜索、二分查找、树查找、哈希查找等多种方法在该数据中搜索目标元素。各个方法的工作原理如图 10-11 所示。</p>
<p><a class="glightbox" href="../searching_algorithm_revisited.assets/searching_algorithms.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="多种搜索策略" src="../searching_algorithm_revisited.assets/searching_algorithms.png" /></a></p>
<p><a class="glightbox" href="../searching_algorithm_revisited.assets/searching_algorithms.png" data-type="image" data-width="100%" data-height="auto" data-desc-position="bottom"><img alt="多种搜索策略" class="animation-figure" src="../searching_algorithm_revisited.assets/searching_algorithms.png" /></a></p>
<p align="center"> 图 10-11 &nbsp; 多种搜索策略 </p>
<p>上述几种方法的操作效率与特性如表 10-1 所示。</p>