【发布时间】:2017-03-01 11:44:42
【问题描述】:
请解释一下二叉搜索树和m-way树的区别?
【问题讨论】:
标签: algorithm
请解释一下二叉搜索树和m-way树的区别?
【问题讨论】:
标签: algorithm
m 路树是具有m 值和m + 1 链接的树结构。
二叉树是 m 路树的特殊情况,m 等于 1,这意味着每个节点和两个链接只有一个值(您可以向下移动到左侧或右侧链接)。这是一个二叉树的例子,它显示了这一点:
+----+
| 20 |
+----+
/ \
+----+ +----+
| 14 | | 23 |
+----+ +----+
m 路树的每个节点可以有多个值,但理论仍然相同。您可以根据值选择要向下移动的链接,并且有m + 1 可能的选择。一棵 m 路树(m 为 2)可能如下所示:
+----+----+
| 17 | 30 |
+----+----+
______/ | \______
/ | \
+----+----+ +----+----+ +----+----+
| 11 | 15 | | 19 | 28 | | 33 | 34 |
+----+----+ +----+----+ +----+----+
这些 m-way 树通常用于在有效块中可以容纳多个值的情况。我所说的高效是指可以高效读写的,例如磁盘块、扇区、集群或柱面,具体取决于您的存储子系统的运行方式。
例如,假设:
在这种情况下,您可以将 4 个值放入一个磁盘块中,计算如下:
numvals = int ((blocksize - linksize) / (valuesize + linksize))
= int (( 512 - 4 ) / ( 122 + 4 ))
= int ( 508 / 126 )
= int ( 4.0317 )
= 4
这为您提供了四个值和五个链接,总共 508 个字节:
4 * 122 = 488
5 * 4 = 20
---
508
虽然有一些浪费(在这种情况下是四个字节),但这样做的好处是可以在每个可高效检索的块中存储整数个值。
【讨论】:
binary search tree 只有两个固定分支,因此更容易实现。当树必须存储在磁盘上而不是内存中时,通常使用 m 路树,例如 B-trees。示例包括文件系统和数据库索引。
【讨论】:
m 向搜索树是一种 m 向树,其中:
每个节点有 m 个子节点和 m-1 个关键字段 每个节点中的键是按升序排列的。 第 i 个孩子中的键小于第 i 个键 最后 m-i 个孩子中的键大于第 i 个键
m阶多路搜索树的扩展是m阶B树。当要访问/存储的数据位于辅助存储设备上时,将使用这种类型的树,因为它们允许将大量数据存储在节点中。
m 阶 B 树是多路搜索树,其中:
根至少有两个子树,除非它是树中唯一的节点。 每个非根节点和每个非叶节点最多有 m 个非空子节点和至少 m/2 个非空子节点。 每个非根节点和每个非叶节点中的键数量比其非空子节点的数量少一。 所有叶子都在同一水平面上。
【讨论】: