BTree实现 - 我是否需要首先了解树的顺序?

时间:2015-01-13 13:20:19

标签: c++ data-structures b-tree

所以我的数据结构类有一个项目,我必须实现一个非常简单的信息数据库。记录必须存储在一个文件中,当程序打开时 - 必须从文件中读取它们并放入BTree中。我的问题是我们还没有谈过BTrees,课程中的讲座不太清楚(它没有任何代码,只是解释和一些例子)。

我的问题是:我可以在不知道订单的情况下创建BTree吗?或者我应该为订单设置一个非常高的数字,以便我可以确定它能够适应很多记录?有什么建议吗?

2 个答案:

答案 0 :(得分:0)

你当然可以 - BTrees旨在对他们的输入进行排序。所需要的只是能够比较任何两个对象,并能够确定哪一个“更大”或者应该更晚。当你向他们添加更多项目时,BTree会动态增长,从而增加更多关卡。我希望你的教授能够很好地涵盖BTrees,因为它们是一个迷人的结构:-)。

如果您希望在作业中实施BTree,那么您需要转到TA并让它们详细解释 - 一般的想法是每个节点都是具有值的节点在其中,排序或指向其他节点的,基于值的范围。每次向此树添加节点时,都会向下走到节点所在的位置,并在可能的情况下添加节点。如果没有,则重新组织树,直到可能,然后添加节点。

细节中的魔鬼,以及这种情况下的细节需要一些时间,并且需要很好的解释才能完全理解。人们忍受所有复杂原因的头痛的原因是因为BTrees不需要事先知道它们最终会有多大,或者元素将涵盖的范围或其他任何东西。作为奖励,它们非常适合在磁盘上使用,您甚至无法将所有元素存储在内存中。

答案 1 :(得分:0)

如果您正在实施自己的BTree,那么您应该确保它可以支持不同的订单,特别是因为您要使用的订单将取决于介质。 BTree的目的是最大限度地减少进行随机访问所需的时间,因此内存中的BTree(如果你以这种方式使用它)会希望单个节点适合缓存行,如果你要去要将BTree存储在磁盘上(在这种情况下你将会这样做),你会希望你的节点适合磁盘扇区。