refactor: Replace 结点 with 节点 (#452)
* Replace 结点 with 节点 Update the footnotes in the figures * Update mindmap * Reduce the size of the mindmap.png
|
Before Width: | Height: | Size: 85 KiB After Width: | Height: | Size: 85 KiB |
|
Before Width: | Height: | Size: 57 KiB After Width: | Height: | Size: 57 KiB |
@@ -24,13 +24,13 @@
|
||||
|
||||
链式地址下,哈希表的操作方法包括:
|
||||
|
||||
- **查询元素**:输入 key ,经过哈希函数得到数组索引,即可访问链表头结点,然后遍历链表并对比 key 以查找目标键值对。
|
||||
- **添加元素**:先通过哈希函数访问链表头结点,然后将结点(即键值对)添加到链表中。
|
||||
- **删除元素**:根据哈希函数的结果访问链表头部,接着遍历链表以查找目标结点,并将其删除。
|
||||
- **查询元素**:输入 key ,经过哈希函数得到数组索引,即可访问链表头节点,然后遍历链表并对比 key 以查找目标键值对。
|
||||
- **添加元素**:先通过哈希函数访问链表头节点,然后将节点(即键值对)添加到链表中。
|
||||
- **删除元素**:根据哈希函数的结果访问链表头部,接着遍历链表以查找目标节点,并将其删除。
|
||||
|
||||
尽管链式地址法解决了哈希冲突问题,但仍存在一些局限性,包括:
|
||||
|
||||
- **占用空间增大**,由于链表或二叉树包含结点指针,相比数组更加耗费内存空间;
|
||||
- **占用空间增大**,由于链表或二叉树包含节点指针,相比数组更加耗费内存空间;
|
||||
- **查询效率降低**,因为需要线性遍历链表来查找对应元素;
|
||||
|
||||
为了提高操作效率,**可以将链表转换为「AVL 树」或「红黑树」**,将查询操作的时间复杂度优化至 $O(\log n)$ 。
|
||||
|
||||
|
Before Width: | Height: | Size: 80 KiB After Width: | Height: | Size: 79 KiB |
|
Before Width: | Height: | Size: 88 KiB After Width: | Height: | Size: 88 KiB |
|
Before Width: | Height: | Size: 65 KiB After Width: | Height: | Size: 65 KiB |
@@ -12,8 +12,8 @@
|
||||
|
||||
1. **无序数组**:每个元素为 `[学号, 姓名]` ;
|
||||
2. **有序数组**:将 `1.` 中的数组按照学号从小到大排序;
|
||||
3. **链表**:每个结点的值为 `[学号, 姓名]` ;
|
||||
4. **二叉搜索树**:每个结点的值为 `[学号, 姓名]` ,根据学号大小来构建树;
|
||||
3. **链表**:每个节点的值为 `[学号, 姓名]` ;
|
||||
4. **二叉搜索树**:每个节点的值为 `[学号, 姓名]` ,根据学号大小来构建树;
|
||||
|
||||
各项操作的时间复杂度如下表所示(详解可见[二叉搜索树章节](https://www.hello-algo.com/chapter_tree/binary_search_tree/))。无论是查找元素还是增删元素,哈希表的时间复杂度都是 $O(1)$,全面胜出!
|
||||
|
||||
|
||||