Merge branch 'krahets:master' into typescript

This commit is contained in:
Daniel
2022-12-22 00:21:21 +11:00
committed by GitHub
57 changed files with 1163 additions and 688 deletions

View File

@@ -40,7 +40,7 @@ comments: true
## 开放寻址
「开放寻址」不引入额外数据结构,而是通过 “向后探测” 来解决哈希冲突。根据探测方法的不同,主要分为 **线性探测、平方探测、多次哈希**
「开放寻址」不引入额外数据结构,而是通过“向后探测”来解决哈希冲突。根据探测方法的不同,主要分为 **线性探测、平方探测、多次哈希**
### 线性探测
@@ -58,7 +58,7 @@ comments: true
线性探测有以下缺陷:
- **不能直接删除元素**。删除元素会导致桶内出现一个空位,在查找其他元素时,该空位有可能导致程序认为元素不存在(即上述第 `2.` 种情况)。因此需要借助一个标志位来标记删除元素。
- **容易产生聚集**。桶内被占用的连续位置越长,这些连续位置发生哈希冲突的可能性越大,从而进一步促进这一位置的 “聚堆生长” ,最终导致增删查改操作效率的劣化。
- **容易产生聚集**。桶内被占用的连续位置越长,这些连续位置发生哈希冲突的可能性越大,从而进一步促进这一位置的“聚堆生长”,最终导致增删查改操作效率的劣化。
### 多次哈希

View File

@@ -6,7 +6,7 @@ comments: true
哈希表通过建立「键 key」和「值 value」之间的映射实现高效的元素查找。具体地输入一个 key ,在哈希表中查询并获取 value ,时间复杂度为 $O(1)$ 。
例如,给定一个包含 $n$ 个学生的数据库,每个学生有 "姓名 `name`“学号 `id` 两项数据,希望实现一个查询功能:**输入一个学号,返回对应的姓名**,则可以使用哈希表实现。
例如,给定一个包含 $n$ 个学生的数据库,每个学生有姓名 `name`“学号 `id` ”两项数据,希望实现一个查询功能:**输入一个学号,返回对应的姓名**,则可以使用哈希表实现。
![hash_map](hash_map.assets/hash_map.png)
@@ -623,4 +623,4 @@ $$
- 尽量少地发生哈希冲突;
- 时间复杂度 $O(1)$ ,计算尽可能高效;
- 空间使用率高,即 “键值对占用空间 / 哈希表总占用空间” 尽可能大;
- 空间使用率高,即“键值对占用空间 / 哈希表总占用空间”尽可能大;