【发布时间】:2012-05-06 12:03:26
【问题描述】:
我需要实现一个 B+ 树,它被适配为一个 k-d 树。作为一个短 对此的解释,k-d 树就像一棵二叉树,只是在它的 节点它有一个多值键,即具有多个值的键。它会 也是 B+ 树,因为内部节点仅用于存储 1 个 键的值和真实数据存储在叶节点中。这是一个简短的 图形解释:
当我添加前 2 个元素时,我的叶节点有 2 个元素的空间 工作正常,直到我添加第三个并且我必须进行拆分。为此,由于我 选择键的第一个值作为定义顺序的值,我取 所有三个元素的中值,结果是 27,所以所有元素 小于 27 的向左,大于或等于的向右。
当我添加第 4 个元素时,由于 Tom 和 Linda 的年龄小于 27 已经完成了一个叶子节点,儿子添加Dom使节点再次分裂, 但是这次我必须切换键的哪个值定义了顺序 社会安全号码。我再次取中值,结果是 530,所以 SS号小于530的都往左边走,以此类推。
产生最终的 k-d 树,其中键的某些值作为索引 内部节点,以及叶子节点的完整密钥。
现在我的问题是,在解释了上下文之后,我该如何实现 密钥的解决方案,因为我必须在叶子节点存储 完整的键,但在内部节点我只使用的值之一 键。
您可以注意到与数据库的相似之处,其中我们有多个字段 有值,我们可以同时对不同字段的信息进行排序 时间,一个比下一个更重要,依此类推。
我想创建一个名为 Key 的 class 或任何其他名称,其属性为
保存所有值,对于上面的示例,年龄可能是int,对于年龄可能是int
SSNumber 和 string 作为名称。但我的问题是,如果我的客户决定他
想增加更多的价值,那么我的班级会越来越大。这是一个
好的OO决定?我可以用另一种方式实现它并且仍然是 OO 吗?我知道我的
想象力可能很差,但因为我可以假设客户想要更多的价值,我
可以制作某种包含我的价值观的列表,那么这意味着我会有
制作一个可以支持任何类型数据的列表,这听起来不像 OO
方法。有什么想法吗?
我还想补充一点,因为在我的树算法的某个点上 需要将键的 1 个属性用作树中的索引,我必须 也支持这个。
我真的很感激如何通过遵循 OO 来解决这个问题 接近。
【问题讨论】: