何时使用最大堆超过最小堆?

时间:2017-11-30 21:21:30

标签: heap

我刚刚陷入困境,而且我没有看到何时应该在最小堆上使用最大堆,因为它(至少对我而言)对于排序数组更加相关。但似乎它们几乎同样受欢迎?

什么时候在最小堆上设置最大堆更有用?

1 个答案:

答案 0 :(得分:0)

例如,当您想要首先处理具有最低优先级编号的事物时,可以使用最小堆。如果要首先处理具有最高优先级编号的事物,请使用最大堆。

例如,在许多情况下,"优先级1"意味着它是最重要的事情。 "优先级2"在"优先级1"之后处理项目项目。您设置了一个最小堆,以便首先从堆中删除优先级较低的数字。

但在某些情况下,较大的数字决定了优先级。例如,您可能希望在处理10美元订单之前处理1000美元的订单。在这种情况下,您需要设置最大堆,以便首先处理价格较高的订单。

最大堆和最小堆之间的唯一区别是用于确定项的顺序的比较。一个使用"少于,"而另一个使用"大于。"

事实上,许多堆实现并不区分最小堆和最大堆。相反,它们允许您传递执行排序的比较功能。因此,如果您想从低到高订购,则比较会这样做:

int compareForward(int x, int y)
{
    if (x < y) return -1;
    if (x > y) return 1;
    return 0;
}

如果你想从高到低订购,比较会这样做:

int compareReverse(int x, int y)
{
    if (x < y) return 1;
    if (x > y) return -11;
    return 0;
}

例如,请参阅接受comparator参数的Java PriorityQueue constructor。或者是C ++标准库std::priority_queue constructors,它还允许您传递比较函数。