【问题标题】:What does it mean abstract type when we say it to a binary heap tree?当我们对二叉堆树说抽象类型时,它意味着什么?
【发布时间】:2015-09-18 19:13:33
【问题描述】:

我读过一个术语抽象类型,这意味着您可以使用结构或骨架。我说的是二叉堆树。我读到它是一种抽象类型,但是当出现问题时,合并两个最小堆以创建最大堆的时间复杂度是多少? 我得到了一些答案,说将树的元素复制到数组中,然后使用构建堆方法 n 在 O(n) 时间内创建最大堆!但是,当您无法将树作为抽象类型遍历时,您将如何在 const 时间/或 O(n) 时间内复制最小堆的元素。剩下的唯一事情就是一个一个地删除所有元素 n 将其保存在数组中,这将花费 O(nlogn) 时间。 谁能花点时间让我理解这个疑问?

谢谢

【问题讨论】:

    标签: algorithm data-structures tree


    【解决方案1】:

    我认为您将抽象数据类型的实现与其接口混淆了。

    要实现堆(或队列等),您可以使用其内部结构做任何您想做的事情。 请注意,堆的内部结构可以是任何东西(数组、列表...);事实上,堆的内部结构对用户是隐藏的(但同样:它对开发人员是可见的)。

    实现的堆将只提供定义其抽象类型的接口方法。

    当人们谈论合并两个堆时,他们谈论的是一个也实现了合并功能的堆。在合并函数内部(堆的实现内)可以使用内部实现的所有函数。

    【讨论】:

    • 是的...我知道它只会提供它的界面。但是通过那个接口你可以遍历它吗?假设情况:从最小堆中获取第 2 分钟?我希望你会回答它,删除根,堆化,获取根,那是你的第二分钟,对吧? (&它将花费O(logn)时间)如果我可以遍历树,为什么我要删除根,即第二分钟肯定会在根的下一级。 (这里我只需要 2 个比较,即根的左 n 右之间,小于 O(logn) 时间同意吗??)如果我出错了,请纠正我吗?
    • “遍历”不是可用的界面操作。
    猜你喜欢
    • 1970-01-01
    • 2013-01-16
    • 2013-08-07
    • 2021-11-30
    • 2014-02-08
    • 2015-10-29
    • 2021-03-01
    • 1970-01-01
    • 2014-07-08
    相关资源
    最近更新 更多