mirror of
https://github.com/zhwei820/learn.lianglianglee.com.git
synced 2025-11-17 06:33:49 +08:00
fix img
This commit is contained in:
@@ -242,13 +242,13 @@ function hide_canvas() {
|
||||
</ul>
|
||||
<p>即当一个关键字和另一个关键字发生冲突时,使用某种探测技术在哈希表中形成一个探测序列,然后沿着这个探测序列依次查找下去。当碰到一个空的单元时,则插入其中。</p>
|
||||
<p><strong>常用的探测方法是线性探测法。</strong> 比如有一组关键字 {12,13,25,23},采用的哈希函数为 key mod 11。当插入 12,13,25 时可以直接插入,地址分别为 1、2、3。而当插入 23 时,哈希地址为 23 mod 11 = 1。然而,地址 1 已经被占用,因此沿着地址 1 依次往下探测,直到探测到地址 4,发现为空,则将 23 插入其中。如下图所示:</p>
|
||||
<p><img src="assets/Ciqc1F7p9paAVH4IADEh_1KYIxQ882.gif" alt="1.gif" /></p>
|
||||
<p><img src="assets/Ciqc1F7p9paAVH4IADEh_1KYIxQ882.gif" alt="png" /></p>
|
||||
<ul>
|
||||
<li>第二,链地址法</li>
|
||||
</ul>
|
||||
<p>将哈希地址相同的记录存储在一张线性链表中。</p>
|
||||
<p>例如,有一组关键字 {12,13,25,23,38,84,6,91,34},采用的哈希函数为 key mod 11。如下图所示:</p>
|
||||
<p><img src="assets/CgqCHl7p9riAPdv4ACylkQqBCr0627.gif" alt="2.gif" /></p>
|
||||
<p><img src="assets/CgqCHl7p9riAPdv4ACylkQqBCr0627.gif" alt="png" /></p>
|
||||
<p>哈希表相对于其他数据结构有很多的优势。它可以提供非常快速的插入-删除-查找操作,无论多少数据,插入和删除值需要接近常量的时间。在查找方面,哈希表的速度比树还要快,基本可以瞬间查找到想要的元素。</p>
|
||||
<p>哈希表也有一些不足。哈希表中的数据是没有顺序概念的,所以不能以一种固定的方式(比如从小到大)来遍历其中的元素。在数据处理顺序敏感的问题时,选择哈希表并不是个好的处理方法。同时,哈希表中的 key 是不允许重复的,在重复性非常高的数据中,哈希表也不是个好的选择。</p>
|
||||
<h3>哈希表的基本操作</h3>
|
||||
@@ -274,9 +274,9 @@ function hide_canvas() {
|
||||
<p>H (9) = 6</p>
|
||||
<p>H (14) = 0</p>
|
||||
<p><strong>按关键字序列顺序依次向哈希表中填入,发生冲突后按照“线性探测”探测到第一个空位置填入。</strong></p>
|
||||
<p><img src="assets/CgqCHl7p9vKAZm8sABD1_Vye6xM491.gif" alt="3.gif" /></p>
|
||||
<p><img src="assets/CgqCHl7p9vKAZm8sABD1_Vye6xM491.gif" alt="png" /></p>
|
||||
<p><strong>最终的插入结果如下表所示:</strong></p>
|
||||
<p><img src="assets/CgqCHl8IM5KADjjgAABYugcwKiI662.png" alt="Lark20200710-172310.png" /></p>
|
||||
<p><img src="assets/CgqCHl8IM5KADjjgAABYugcwKiI662.png" alt="png" /></p>
|
||||
<p><strong>接着,有了这个表之后,我们再来看一下查找的流程:</strong></p>
|
||||
<ul>
|
||||
<li>查找 7。输入 7,计算得到 H (7) = 0,根据哈希表,在 0 的位置,得到结果为 7,跟待匹配的关键字一样,则完成查找。</li>
|
||||
|
||||
Reference in New Issue
Block a user