Fine-tune the docs.

This commit is contained in:
krahets 2023-06-25 21:11:24 +08:00
parent 3b3841ba36
commit 3902ccbfc7
6 changed files with 13 additions and 11 deletions

View file

@ -34,6 +34,8 @@
函数function可以独立被执行所有参数都以显式传递。
方法method与一个对象关联方法被隐式传递给调用它的对象方法能够对类的实例中包含的数据进行操作。
因此C 和 Go 只有函数Java 和 C# 只有方法,在 C++, Python 中取决于它是否属于一个类。
!!! question "图片“空间复杂度的常见类型”反映的是否是占用空间的绝对大小?"
不是,该图片展示的是空间复杂度(即增长趋势),而不是占用空间的绝对大小。每个曲线都包含一个常数项,用来把所有曲线的取值范围压缩到一个视觉舒适的范围内。

View file

@ -538,7 +538,7 @@ index = hash(key) % capacity
## 哈希冲突与扩容
本质上看,哈希函数的作用是输入空间(`key` 范围)映射到输出空间(数组索引范围),而输入空间往往远大于输出空间。因此,**理论上一定存在“多个输入对应相同输出”的情况**。
本质上看,哈希函数的作用是输入空间(`key` 范围)映射到输出空间(数组索引范围),而输入空间往往远大于输出空间。因此,**理论上一定存在“多个输入对应相同输出”的情况**。
对于上述示例中的哈希函数,当输入的 `key` 后两位相同时,哈希函数的输出结果也相同。例如,查询学号为 12836 和 20336 的两个学生时,我们得到:

View file

@ -6,6 +6,7 @@
- 完全二叉树非常适合用数组表示,因此我们通常使用数组来存储堆。
- 堆化操作用于维护堆的性质,在入堆和出堆操作中都会用到。
- 输入 $n$ 个元素并建堆的时间复杂度可以优化至 $O(n)$ ,非常高效。
- Top-K 是一个经典算法问题,可以使用堆数据结构高效解决,时间复杂度为 $O(n \log k)$ 。
## Q & A

View file

@ -182,19 +182,18 @@
与插入节点类似,我们需要在删除操作后维持二叉搜索树的“左子树 < 根节点 < 右子树的性质首先我们需要在二叉树中执行查找操作获取待删除节点接下来根据待删除节点的子节点数量删除操作需分为三种情况
当待删除节点的子节点数量 $= 0$ 时,表示待删除节点是叶节点,可以直接删除。
当待删除节点的度为 $0$ 时,表示待删除节点是叶节点,可以直接删除。
![在二叉搜索树中删除节点(度为 0](binary_search_tree.assets/bst_remove_case1.png)
当待删除节点的子节点数量 $= 1$ 时,将待删除节点替换为其子节点即可。
当待删除节点的度为 $1$ 时,将待删除节点替换为其子节点即可。
![在二叉搜索树中删除节点(度为 1](binary_search_tree.assets/bst_remove_case2.png)
当待删除节点的子节点数量 $= 2$ 时,删除操作分为三步
当待删除节点的度为 $2$ 时,我们无法直接删除它,而需要使用一个节点替换该节点。由于要保持二叉搜索树“左 $<$ 根 $<$ 右”的性质,因此这个节点可以是右子树的最小节点或左子树的最大节点。假设我们选择右子树的最小节点(或者称为中序遍历的下个节点),则删除操作为
1. 找到待删除节点在“中序遍历序列”中的下一个节点,记为 `tmp`
2. 在树中递归删除节点 `tmp`
3. 用 `tmp` 的值覆盖待删除节点的值;
2. 将 `tmp` 的值覆盖待删除节点的值,并在树中递归删除节点 `tmp`
=== "<1>"
![二叉搜索树删除节点示例](binary_search_tree.assets/bst_remove_case3_step1.png)