|
14 | 14 | 在上图例子中,我们使用 `value = Hash(key) = key // 1000` 作为哈希函数。`//` 符号代表整除。我们以这个例子来说明一下哈希表的插入和查找策略。 |
15 | 15 |
|
16 | 16 | - 插入:通过哈希函数解析关键字,并将对应值存放到该区块中。 |
17 | | - - 比如:`0138` 通过哈希函数 `Hash(key) = 0138 // 100 == 0`,得出应将 `0138` 分配到`0` 所在的区块中。 |
| 17 | + - 比如:`0138` 通过哈希函数 `Hash(key) = 0138 // 100 = 0`,得出应将 `0138` 分配到`0` 所在的区块中。 |
18 | 18 | - 查找:通过哈希函数解析关键字,并在特定的区块搜索该关键字对应的值。 |
19 | | - - 比如:查找 `2321`,通过哈希函数,得出 `2321` 应该在 `2` 所对应的区块中,则我们从 `2` 对应的区块中继续搜索,并在 `2` 对应的区块中成功找到了 `2321`。 |
20 | | - - 比如:查找 `3214`,通过哈希函数,得出 `3214` 应该在 `3` 所对应的区块中,则我们从 `3` 对应的区块中继续搜索,但并没有找到对应值。则说明 `3214` 不在哈希表中。 |
| 19 | + - 比如:查找 `2321`,通过哈希函数,得出 `2321` 应该在 `2` 所对应的区块中。然后我们从 `2` 对应的区块中继续搜索,并在 `2` 对应的区块中成功找到了 `2321`。 |
| 20 | + - 比如:查找 `3214`,通过哈希函数,得出 `3214` 应该在 `3` 所对应的区块中。然后我们从 `3` 对应的区块中继续搜索,但并没有找到对应值,则说明 `3214` 不在哈希表中。 |
21 | 21 |
|
22 | 22 | 哈希表在生活中的应用也很广泛,其中一个常见例子就是「查字典」。 |
23 | 23 |
|
|
68 | 68 |
|
69 | 69 | 这也是一种简单且常用的哈希函数方法。其关键点在于 `p` 的选择。根据经验而言,一般 `p` 取素数或者 `m`,这样可以尽可能的减少冲突。 |
70 | 70 |
|
71 | | -比如我们需要将 `7` 个数(`432`、`5`、`128`、`193`、`92`、`111`、`88`)存储在 `11` 个区块中(长度为 `11` 的数组),通过除留余数法将这 `7` 个数应分别位于如下地址: |
| 71 | +比如我们需要将 `7` 个数 `[432, 5, 128, 193, 92, 111, 88]` 存储在 `11` 个区块中(长度为 `11` 的数组),通过除留余数法将这 `7` 个数应分别位于如下地址: |
72 | 72 |
|
73 | 73 | | 索引 | 00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | |
74 | 74 | | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | |
75 | | -| 数据 | | 111 | | 432 | 92 | 5 | 193 | | 128 | | | |
| 75 | +| 数据 | 88 | 111 | | 432 | 92 | 5 | 193 | | 128 | | | |
76 | 76 |
|
77 | 77 | ### 3.3 平方取中法 |
78 | 78 |
|
79 | | -- 平方取中法:先通过求关键字平方值的方式扩大相近数之间的差别,然后根据表长度取平方后的中间几位数为哈希地址。 |
80 | | - - 比如:`Hash(key) = (key * key) // 100 % 1000`,先计算平方,再去除末尾的 2 位数,再取中间 3 位数作为哈希地址。 |
| 79 | +- 平方取中法:先通过求关键字平方值的方式扩大相近数之间的差别,然后根据表长度取关键字平方值的中间几位数为哈希地址。 |
| 80 | + - 比如:`Hash(key) = (key * key) // 100 % 1000`,先计算平方,去除末尾的 2 位数,再取中间 3 位数作为哈希地址。 |
81 | 81 |
|
82 | | -这种方法因为关键字平方后的中间几位数和原关键字的每一位数都相关,所以产生的哈希地址也比较均匀,有利于减少冲突的发生。 |
| 82 | +这种方法因为关键字平方值的中间几位数和原关键字的每一位数都相关,所以产生的哈希地址也比较均匀,有利于减少冲突的发生。 |
83 | 83 |
|
84 | 84 | ### 3.4 基数转换法 |
85 | 85 |
|
|
0 commit comments