我读了一个术语抽象类型,这意味着你可以使用结构或骨架。我在谈论二进制堆树。我读它是一个抽象类型但是当出现问题时,合并两个最小堆以创建最大堆的时间复杂度是多少? 我得到了一些答案,说将树的复制元素复制到数组中,使用构建堆方法n在O(n)时间内创建最大堆!但是,如果不能将树作为抽象类型遍历,那么如何在const时间/或O(n)时间内复制最小堆的元素。你唯一剩下的就是逐个删除所有元素n将它保存在数组中,这将花费O(nlogn)时间。 谁能花点时间让我明白这个疑问?
由于
答案 0 :(得分:0)
我认为您将抽象数据类型的实现与其接口混淆。
要实现堆(或队列等),您可以使用其内部结构执行任何操作。 注意堆的内部结构可以是任何东西(数组,列表......);事实上,Heap的内部结构对用户是隐藏的(但同样:开发人员可以看到它。)
实现的Heap将仅提供定义其抽象类型的接口方法。
当人们谈论合并两个堆时,他们正在讨论一个实现合并功能的堆。在合并函数内部(在堆的实现中),您可以使用内部实现的所有功能。