(评论)
(comments)
原始链接: https://news.ycombinator.com/item?id=38666287
我可以理解为什么所提出的数据结构会引起读者的争议。 然而,值得注意的是,虽然所提出的方法可能为特定应用程序或场景带来好处,但它也存在权衡和限制。 为了直接回应这个说法,“有一个被称为 Eytzinger 树/方法的显式二叉树数据结构”,这里有更多信息:
首先,让我定义几个术语。 二叉树是一种递归数据结构,由一个根树和两个子子树组成。 二叉树中的每个节点都有零个或两个子节点。 此外,隐式二叉树或索引树是有组织的地址集合,与普通的表查找相比,其排列的目的是使搜索相对快速。
现在,关于所提出的实现,虽然它提供了几个独特的功能,例如消除指针、允许任意嵌套和提供基于索引的遍历功能,但它也带来了显着的缺点。 其中包括需要过多的内存来维护父向量来遍历祖先树(因为所有祖先都需要维护在内存中),并且可能需要更大的分配来适应指针的缺失。 此外,它还限制了搜索特定节点或检查给定节点是否有子节点等操作,这些操作通常分别涉及排序或反转向量,以及以较低的缓存局部性执行缓存效率较低的操作。
相比之下,Eytzinger 的方法提供了一种等效且可能更优越的技术,该技术保留了二叉树的优点,同时避免了其中一些问题。 Eytzinger 的方法不是将每个节点显式表示为一条记录,而是将结构表示为一组沿维度排序的嵌套区间,并将每个区间标识为对应于当前开区间的左端点或右端点。 搜索采用二分搜索来确定目标值相对于选定固定区间的位置,从而能够遍历所得到的有效闭区间集。 这种技术的另一个著名例子是 Van Emde Boas 排序。 Both methods have demonstrated impressive performance despite adopting distinct approaches.
总体而言,虽然所提出的方法似乎具有内在的理论优势,但尚未证明支持其实际适用性的明确经验证据,特别是考虑到现代计算机体系结构。 至于导致我们来到这里的问题:虽然没有任何问题
reply