mirror of
https://github.com/krahets/hello-algo.git
synced 2025-02-02 14:18:47 +08:00
Update README.md
This commit is contained in:
parent
518b9efabc
commit
06f87d8066
@ -26,8 +26,7 @@
|
|||||||
hello-algo.com
|
hello-algo.com
|
||||||
</a>
|
</a>
|
||||||
</em>
|
</em>
|
||||||
</p>
|
</br>
|
||||||
<p align="center">
|
|
||||||
<em>
|
<em>
|
||||||
下载 PDF >
|
下载 PDF >
|
||||||
<a href="https://github.com/krahets/hello-algo/releases/tag/1.0.0b1">
|
<a href="https://github.com/krahets/hello-algo/releases/tag/1.0.0b1">
|
||||||
|
@ -392,14 +392,14 @@
|
|||||||
|
|
||||||
哈希表的底层实现是数组,并且可能包含链表、二叉树(红黑树)等数据结构,以提升查询性能(下节会讨论)。
|
哈希表的底层实现是数组,并且可能包含链表、二叉树(红黑树)等数据结构,以提升查询性能(下节会讨论)。
|
||||||
|
|
||||||
首先考虑最简单的情况,**即仅用一个「数组」来实现哈希表**。根据习惯,我们将数组中的每个空位称为「桶 Bucket」,用于存储键值对。
|
首先考虑最简单的情况,**仅用一个「数组」来实现哈希表**。根据习惯,我们将数组中的每个空位称为「桶 Bucket」,用于存储键值对。
|
||||||
|
|
||||||
我们将键值对 key, value 包装成一个类 `Entry` ,并将所有 `Entry` 都放入数组中,那么每个 `Entry` 在数组中都有唯一的索引。显然,访问 `Entry` 需要给定索引,而为了 **建立 key 和索引之间的映射关系**,我们需要使用「哈希函数 Hash Function」。
|
我们将键值对 key, value 包装成一个类 `Entry` ,并将所有 `Entry` 都放入数组中,那么每个 `Entry` 在数组中都有唯一的索引。而为了建立 key 和索引之间的映射关系,我们需要使用「哈希函数 Hash Function」。
|
||||||
|
|
||||||
具体地,设数组为 `buckets` ,哈希函数为 `f(x)` ,输入键为 `key` 。那么获取 value 的步骤为:
|
设哈希表的数组为 `buckets` ,哈希函数为 `f(x)` ,那么查询操作的步骤为:
|
||||||
|
|
||||||
1. 通过哈希函数计算出索引,即 `index = f(key)` ;
|
1. 输入 `key` ,通过哈希函数计算出索引 `index` ,即 `index = f(key)` ;
|
||||||
2. 通过索引在数组中获取键值对,即 `Entry = buckets[index]` ;
|
2. 通过索引在数组中访问到键值对 `entry` ,即 `entry = buckets[index]` ,并在 `entry` 中获取到 `value` 即可;
|
||||||
|
|
||||||
以上述学生数据 `key 学号 -> value 姓名` 为例,我们可以将「哈希函数」设计为
|
以上述学生数据 `key 学号 -> value 姓名` 为例,我们可以将「哈希函数」设计为
|
||||||
|
|
||||||
@ -407,9 +407,7 @@ $$
|
|||||||
f(x) = x \% 100
|
f(x) = x \% 100
|
||||||
$$
|
$$
|
||||||
|
|
||||||
如下图所示,输入一个学号 key ,经过哈希函数计算就能访问到对应的姓名 value 。
|
![哈希函数工作原理](hash_map.assets/hash_function.png)
|
||||||
|
|
||||||
![简单哈希函数示例](hash_map.assets/hash_function.png)
|
|
||||||
|
|
||||||
=== "Java"
|
=== "Java"
|
||||||
|
|
||||||
|
@ -432,7 +432,7 @@
|
|||||||
=== "Go"
|
=== "Go"
|
||||||
|
|
||||||
```go title="array_deque.go"
|
```go title="array_deque.go"
|
||||||
[class]{ArrayDeque}-[func]{}
|
[class]{arrayDeque}-[func]{}
|
||||||
```
|
```
|
||||||
|
|
||||||
=== "JavaScript"
|
=== "JavaScript"
|
||||||
|
Loading…
Reference in New Issue
Block a user