Machine-translated by Google. Questions are authored in English.
Top

Discussion

Let A be a priority queue for maintaining a set of elements. Suppose A is implemented using a max-heap data structure. The operation Extract-Max(A) extracts and deletes the maximum element from A. The operation Insert(A,key) inserts a new element key in A. The properties of a max-heap are preserved at the end of each of these operations.

When A contains n elements, which one of the following statements about the worst case running time of these two operations is TRUE?

  • A.Both Extract-Max(A) and Insert(A,key) run in \(O(1)\).
  • B.Both Extract-Max(A) and Insert(A,key) run in \(O(\log(n))\).
  • C.Extract-Max(A) runs in \(O(1)\) whereas Insert(A,key) runs in \(O(n)\).
  • D.Extract-Max(A) runs in \(O(1)\) whereas Insert(A,key) runs in \(O(\log(n))\).

Answer: B

Both Extract-Max(A) and Insert(A,key) run in \(O(\log(n))\).

Extract-Max reads the maximum at the root in constant time, but it must also delete it: the last element is moved to the root and sifted down, swapping with the larger child until the heap property holds again. That can take one swap per level, and a heap of n elements has about \(\log_{2} n\) levels.

Insert places the new key in the next free leaf and sifts it up towards the root, again at most one swap per level, \(O(\log(n))\).

The options with Extract-Max in \(O(1)\) confuse finding the maximum with extracting it while keeping a valid heap. Insert is never \(O(n)\) in a binary heap, and neither operation is \(O(1)\) in the worst case.

No comment is present. Be the first to comment.
Loading…

Post your comment

Please log in or register to post a comment.