最近我一直在研究我的想法。我的思维过程是二元搜索树是如此有效,因为比较运算符本身是二元的。所以,如果我要重载比较运算符以返回0-3,那么带有四个子节点的搜索树会更有效。
要解释一下,比如说我重载了一个基本整数类的比较运算符,如果a小于b小于50%则返回0,如果a小于b = 1,则返回1,如果a小于50%则返回2如果a> b大于b,则大于b,3 我假设之前已经完成了这项工作,但我找不到任何有关它的信息,因为我不知道它叫什么。
任何见解都会有所帮助。我有一个BST设置并且刚刚开始实现'N-Tree'(N是比较运算符的可能返回值)但是,坦率地说,它变得非常复杂,我宁愿阅读这个而不是编码它(我是懒,我知道......)。
谢谢!
答案 0 :(得分:0)
这是一个非常合理的想法。如果除了保持方向之外,您还能够将节点分类为“近”或“远”,那么您可以构建更平坦的树,从一个节点到另一个节点的速度更快。
还有一些其他数据结构使用类似的想法。例如,BK-tree使用编辑距离根据字符串的离散距离将字符串分类到不同的存储桶中,更常见的metric trees基于相关的提示。
还有另一种根本不同的方法,这是B树的基础,那就是将多个键放入一个节点,然后生成“少于第一个键”的子节点,“在第一个和第二个键之间, “等等。如果你查看那个空间,你可能会发现很多好主意。
你需要解决一些挑战:保持树木平衡很难 - 这就是红/黑树,AVL树,树木等等如此重要的原因。它们都基于进行树旋转以保持平衡的想法,并且树旋转起作用,因为它们在不破坏树不变量的情况下改变树中节点的平衡。你需要找到一种新的方法来平衡你提出的树形状,这很可能比基本的树形力学更难。考虑一下scapegoat tree的方法,即剥离一棵树的大块不平衡块并进行最佳重建。