【发布时间】:2014-07-29 17:58:27
【问题描述】:
我有一个双向链表,我想从中创建一个索引树以提高随机访问性能。链表中的节点没有唯一标识,可以是派生 Node 对象的任何实例,该对象具有下一个和前一个引用。为了提高随机访问节点的性能,即列表的特定索引,我想在这个列表的顶部添加一个索引树。例如,用户可能想要检索列表的第三个节点,然后是第 5 个节点。 我想知道是否已经针对此问题提出了任何解决方案。
我想到的一个解决方案是使用一种特殊类型的二叉树,其中每个节点都保存一个数字。此数字将显示在其子引用中保留了多少节点。例如,如果根节点的编号是 5,这意味着列表有 5 个节点。想象一下左节点的编号是 3,右节点的编号是 2,这意味着前 3 个节点在左侧,其余 2 个在右侧。这将继续到具有数字 1 的叶子,该叶子将指向列表的节点。期望的树是平衡的 BST。
另一种方法是将列表中节点的索引视为其数据(因此对其进行排序)并使用Convert Sorted List to Balanced Binary Search Tree之类的内容。此外,在树节点中添加对实际列表节点的引用,以便编号(数据)为 2 的节点引用列表中的第二个节点。 我想知道从链表创建和维护这棵树的最快方法是什么?
提前谢谢你
编辑: 由于内存问题和持久性要求,我必须使用链接列表,而不仅仅是引用数组。这部分已经完成,所以考虑一个从头开始的链接列表。此外,您可以访问列表中的尾部和项目数。
【问题讨论】:
标签: algorithm data-structures indexing binary-search-tree doubly-linked-list