\begin{algorithm} \caption{Minimum Priority Queue} \begin{algorithmic} \PROCEDURE{HeapMinimum}{$A$} \RETURN $A[1]$ \ENDPROCEDURE \STATE \PROCEDURE{HeapExtractMin}{$A$} \IF {$A.\text{heap-size} < 1$} \STATE \textbf{error} "heap underflow" \ENDIF \STATE $min = A[1]$ \STATE $A[1] = A[A.\text{heap-size}]$ \STATE $A.\text{heap-size} = A.\text{heap-size} - 1$ \STATE \CALL{MinHeapify}{$A, 1$} \RETURN $min$ \ENDPROCEDURE \STATE \PROCEDURE{HeapDecreaseKey}{$A, i, key$} \IF{$key > A[i]$} \STATE \textbf{error} "new key is larger than the current key" \ENDIF \STATE $A[i] = key$ \WHILE{$i > 1$ \AND $A[PARENT(i)] > A[i]$} \STATE exchange $A[i]$ with $A[PARENT(i)]$ \STATE $i = PARENT(i)$ \ENDWHILE \ENDPROCEDURE \STATE \PROCEDURE{MinHeapInsert}{$A, key$} \STATE $A.\text{heap-size} = A.\text{heap-size} + 1$ \STATE $A[A.\text{heap-size}] = +\infty$ \STATE \CALL{HeapDecreaseKey}{$A, A.\text{heap-size}, key$} \ENDPROCEDURE \end{algorithmic} \end{algorithm}