Max Heap和排序堆栈之间的区别

时间:2010-06-13 08:07:05

标签: java data-structures

我想知道当我们可以使用Collections.sort方法对堆栈进行排序时,为什么我们需要像max heap这样的新数据结构?谢谢

3 个答案:

答案 0 :(得分:6)

堆栈和堆具有完全不同的属性和用法。

LIFO需要

堆栈。对它进行排序将花费O(N * logN),推/弹O(1)。

优先级队列需要

,例如,获取最小/最大元素将花费O(1),插入元素O(log(N))

您需要确定使用模式和目标,然后确定您需要什么。

答案 1 :(得分:1)

Collections.sort需要O(n log n)。因此,虽然通过在每次操作之后调用Collections.sort来模拟具有列表的堆是正确的,但是它将是不必要的低效率。堆允许您插入任何元素或检索O(log n)中的顶部元素。

当你需要排序一次时,Collections.sort很好。如果在修改集合时必须对集合进行排序,则使用已排序的数据结构(例如堆或树)会更有效。

答案 2 :(得分:0)

这取决于您的要求。 Stack和Heap中的访问模式完全不同。堆栈实现为简单列表,而Heap实现为优先级队列。堆栈中的排序时间是O(nlog(n)),而您可以在O(log(n))时间内提取最大优先级(Max / Min)的元素。

所以你的问题在哪里使用MaxHeap,想想你必须找到1000个中第7个最大元素的场景。在堆栈中必须首先排序然后从开始排序第7个(降序排序)将是解决方案但是使用MaxHeap你有提取元素7次和7次将是解决方案。所以这取决于你的情况,哪一个对你更好。

相关问题