插入优先级队列的复杂性

时间:2016-07-07 19:50:24

标签: queue big-o complexity-theory priority-queue

考虑以下代码,从优先级队列中弹出前2个元素,添加它们并将总和插回到优先级队列。

while (pq.size() > 1)
{
    // Extract shortest two ropes from pq
    int first = pq.top();
    pq.pop();
    int second = pq.top();
    pq.pop();

    // Connect the ropes: update result and
    // insert the new rope to pq
    res += first + second;
    pq.push(first + second);
}

众所周知,为n个元素插入优先级队列是O(nlogn)操作。但是让我们说优先级队列是作为一个数组实现的。 它不会成为O(N * N)操作。 或者n元素的上述代码的复杂性。

1 个答案:

答案 0 :(得分:2)

良好实现的优先级队列将在每次插入时以O(log n)分摊的步骤插入元素。一个良好实现的优先级队列很可能使用一个数组,数组元素根据heapsort算法排列。