Showing posts with label questions. Show all posts
Showing posts with label questions. Show all posts

Sunday, January 9, 2011

Heapsort

Heap
 Sort in place
 Binary tree
 Worst case runtime (n lg n)
PARENT(i) -> i/2
Left (i)  -> 2i
Right (i) -> 2i + 1
MAX_HEAP
A[PARENT(i)] >= A[i]

MIN_HEAP
A[PARENT(i)] <= A[i]
MAX-HEAPIFY
 Maintain the max-heap propert
 MAX-HEAPIFY (A, i)
   l = LEFT (i)
   r = RIGHT (i)
   if l <= A:heap-size and A[l] > A[i]
        largest = l
   else largest = i
   if r <= A.heap-size and A[r] > A[largest]
        largest = r
   if largest != i
        exchange A[i] with A[largest]
        MAX-HEAPIFY (A, largest)

Heap Sorting
 HEAPSORT (A)
  BUILD-MAX-HEAP (A)
  for i = A.length downto 2
    exchange A[1] with A[i]
    A.heap-size = A.heap-size - 1
    MAX-HEAPIFY (A, 1)

Priority queues
 One of the main usage is that we can use max-priority queues to schedule jobs on a shared computer.The max-priority queue keeps track of the jobs to
be performed and their relative priorities. When a job is finished or interrupted,the scheduler selects the highest-priority job from among those pending by calling EXTRACT-MAX. The scheduler can add a new job to the queue at any time by calling INSERT.

Reference: Introduction to Algorithms By Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein