File tree Expand file tree Collapse file tree 3 files changed +16
-4
lines changed Expand file tree Collapse file tree 3 files changed +16
-4
lines changed Original file line number Diff line number Diff line change 44
55
66## 更多
7+ [ Python字典对象实现原理] ( https://foofish.net/python_dict_implements.html )
8+ [ 哈希表] ( https://python-data-structures-and-algorithms.readthedocs.io/zh/latest/07_%E5%93%88%E5%B8%8C%E8%A1%A8/hashtable/ )
Original file line number Diff line number Diff line change 33### 基本数据结构
44- [ 数组] ( )
55- [ 链表] ( ./Linked_list )
6- #### TODO:
76- [ 堆] ( ./Heap )
87- [ 栈] ( ./Stack )
98- [ 队列] ( ./Queue )
2423- [ 树] ( ./Tree )
2524- [ 图] ( ./Graph )
2625
26+ 第一周:数组与链表、栈与队列
27+ 第二周:哈希表、映射、集合
28+ 第二周:树、二叉数和图
29+ 第三周:递归、分治和回溯
30+ 第四周:深度、广度优先搜索与剪枝
31+ 第四周:贪心算法与二分查找
32+ 第五周:动态规划
33+ 第六周:并查集、字典树、红黑树和 AVL 树
34+ 第七周:位运算、布隆过滤器和 LRU Cache
35+ 第七周:排序、字符串操作串讲
36+
2737## 书籍及资源
2838
2939对使用 ` Python ` 学习数据结构和算法的资料进行收集并学习。对于外文资料,会列出英文原版,并尽量找到中文译文版。
Original file line number Diff line number Diff line change @@ -135,11 +135,11 @@ B 树(英语:B-tree)是一种自平衡的树,又名平衡多路(即不
135135
136136Q: 为什么说 B+树 比 B 树更适合实际应用中操作系统的文件索引和数据库索引?
137137
138- - B+树的磁盘读写代价更低
139- B+树 的内部结点并没有指向关键字具体信息的指针 。因此其内部结点相对 B 树更小。如果把所有同一内部结点的关键字存放在同一盘块中,那么盘块所能容纳的关键字数量也越多。一次性读入内存中的需要查找的关键字也就越多。相对来说 IO 读写次数也就降低了。
138+ - B+树的磁盘读写代价更低
139+ B+树的内部结点并没有指向关键字具体信息的指针 。因此其内部结点相对 B 树更小。如果把所有同一内部结点的关键字存放在同一盘块中,那么盘块所能容纳的关键字数量也越多。一次性读入内存中的需要查找的关键字也就越多。相对来说 IO 读写次数也就降低了。
140140 举个例子,假设磁盘中的一个盘块容纳 16bytes,而一个关键字 2bytes,一个关键字具体信息指针 2bytes。一棵 9 阶 B 树(一个结点最多 8 个关键字)的内部结点需要 2 个盘块。而 B+ 树内部结点只需要 1 个盘快。当需要把内部结点读入内存中的时候,B 树就比 B+ 树多一次盘块查找时间(在磁盘中就是盘片旋转的时间)。
141141
142- - B+树的查询效率更加稳定
142+ - B+树的查询效率更加稳定
143143 由于非终结点并不是最终指向文件内容的结点,而只是叶子结点中关键字的索引。所以任何关键字的查找必须走一条从根结点到叶子结点的路。所有关键字查询的路径长度相同,导致每一个数据的查询效率相当。
144144
145145总而言之,B 树在提高了磁盘 IO 性能的同时并没有解决元素遍历的效率低下的问题。正是为了解决这个问题,B+树应运而生。B+树只要遍历叶子节点就可以实现整棵树的遍历,支持基于范围的查询,而 B 树不支持 range-query 这样的操作(或者说效率太低)。
You can’t perform that action at this time.
0 commit comments