【问题标题】:Beneftis of Hybrid Data Structures on Efficiency混合数据结构对效率的好处
【发布时间】:2014-07-22 16:00:37
【问题描述】:

我在计算机科学课上有一项家庭作业,其中涉及组合不同的数据结构以明显提高效率

TL;DR --- 向下滚动

""""构建一个数据结构,其行为类似于以二叉树为索引结构的链表。它应该能够用作链表并继承自以构造索引队列和索引堆栈。您可以假设将放入此数据结构的所有内容都是 Comparable 的,因此索引树将用作二叉搜索树。您应该构建一个迭代器类来促进与此数据结构的交互。插入列表可以在列表迭代器指定的位置“之后”完成(有时可以由 find 方法返回)。自然地,在继承的索引队列中,插入只会在队列的后面,但是通过树的索引将需要保留二叉搜索树的顺序,对于继承的索引堆栈也是如此。您应该有插入和删除的方法,以及查找(返回迭代器)和排序的方法(任何排序技术都足以解决这个问题,尽管您可能很想利用从树派生的固有排序信息!!) .使用与人玩耍的主要方法测试此结构(也许通过高度比较?)。""""

TL;DR --- 二叉搜索树节点包含与双向链表节点相同的对象有什么好处?

另外,继承如何处理这样的列表?

【问题讨论】:

    标签: algorithm inheritance data-structures tree linked-list


    【解决方案1】:

    二叉搜索树节点包含与双向链表节点相同的对象有什么好处?

    也许提出相同问题的更好方法是“将二叉搜索树 (BST) 的节点与其他链接连接起来以从相同节点构建链表有什么好处?”

    添加额外链接的好处是能够使用O(1) 内存遍历整个树。如果没有这个额外的链接,您将需要O(Log(N)) 内存来迭代树,因为您需要在每个级别保持位置。

    为此付出的“代价”是为链接使用额外的O(N) 内存块,以及用于维护数据结构的更复杂的算法。当您多次迭代同一棵树时,这可能是一个公平的交易,而插入和修改通常很少。

    继承如何处理这样的列表?

    您应该为列表和树实现接口,而不是从列表和树继承。

    【讨论】:

    • 为澄清起见,您是说通过从已排序的树中生成列表,可以比直接迭代树更有效地迭代该列表?
    • @jeanluc 不,您不是在生成列表,而是在同时维护列表和树。您的 ListTreeNode 类具有三个 ListTreeNode 链接 - nextleftright。当您插入或删除一个项目时,您会维护这两个链接(如果列表是双向链接的,则可能还有第四个项目previous)。 next / previous 链接的存在有助于您在不使用显式或隐式堆栈的情况下迭代“列表树”混合。
    猜你喜欢
    • 2013-04-21
    • 1970-01-01
    • 2012-04-18
    • 2012-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多