我需要实现一个B +树,它适合作为 k -d树。简而言之 对此的解释, k -d树就像二叉树,除了它 节点它有一个多值键,这是一个具有多个值的键。它会 也是一个B +树因为内部节点只是意味着存储1个 密钥和实际数据的值存储在叶节点处。这是一个简短的 图形解释:
当我添加前2个所有内容时,我的叶子节点有2个元素的空间 工作正常,直到我添加第三个,我必须分裂。为此,因为我 我选择键的第一个值作为定义顺序的值 所有三个元素的中值都是27,所以所有元素都是如此 左边小于27,右边大于或等于右边。
当我添加第4个元素时,因为Tom和Linda的年龄小于27岁 已完成一个叶子节点,添加Dom的子节点使节点再次分裂, 但这次我必须切换键的哪个值定义顺序 社会安全号码。我再取中值,结果是530,所以 SS编号小于530的所有人都在左边,依此类推。
导致最终的 k -d树,其中键的某些值作为索引 内部节点和叶节点处的完整密钥。
现在我的问题是,在解释了上下文之后,我该如何实现一个 解决方案,因为我必须存储在叶子节点上 完整的密钥,但在内部节点我只使用其中一个值 键。
你可以注意到与数据库的相似之处,我们有多个字段 使用值,我们可以在不同的字段中对信息进行排序 时间,比下一个更重要,等等。
我想过制作一个名为class
的{{1}}或任何其他名称,并带有属性
保留所有值,对于上面的示例,它可以是Key
年龄和int
SSNumber和int
的名称。但我的问题是,如果我的客户决定他怎么办?
想要增加更多的价值观,那么我的班级会变得越来越大。这是一个
好的OO决定?我可以用另一种方式实现并仍然是OO吗?我知道我的
想象力可能很差,但因为我可以假设客户想要更多的价值观
可以制作一些包含我的价值观的清单,那就意味着我会拥有
制作一个可以支持任何类型数据的列表,这听起来不像是OO
做法。有什么想法吗?
此外,我想补充一点,因为在我的树算法的某些方面 我必须使用密钥的1个属性作为树中的索引 也支持这一点。
我真的很感激如何通过遵循OO来解决这个问题 方法
答案 0 :(得分:1)
使Key
数组为KeyPart
,然后每种类型的键值(age,ss#)都可以从KeyPart
继承。然后,树的每个内部节点都可以存储单个KeyPart
和一个关键部分索引(以了解它的拆分部分)。树叶可以存储完整的Key
。