考虑以下代码,从优先级队列中弹出前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元素的上述代码的复杂性。
答案 0 :(得分:2)
良好实现的优先级队列将在每次插入时以O(log n)分摊的步骤插入元素。一个良好实现的优先级队列很可能使用一个数组,数组元素根据heapsort算法排列。