mirror of
https://github.com/janishutz/eth-summaries.git
synced 2025-11-25 18:44:24 +00:00
131 lines
5.4 KiB
TeX
131 lines
5.4 KiB
TeX
\newpage
|
|
\subsubsection{Heap Sort}
|
|
\begin{definition}[]{Heap Sort}
|
|
Heap Sort is a comparison-based sorting algorithm that uses a binary heap data structure. It builds a max-heap (or min-heap) from the input array and repeatedly extracts the largest (or smallest) element to place it in the correct position in the sorted array.
|
|
\end{definition}
|
|
|
|
\begin{properties}[]{Characteristics and Performance}
|
|
\begin{itemize}
|
|
\item \textbf{Efficiency:} Excellent for in-place sorting with predictable performance.
|
|
\item \textbf{Time Complexity:}
|
|
\begin{itemize}
|
|
\item Best case: \tcl{n \log n}
|
|
\item Worst case: \tco{n \log n}
|
|
\item Average case: \tct{n \log n}
|
|
\end{itemize}
|
|
\item \textbf{Space Complexity:} In-place sorting requires \tct{1} additional space.
|
|
\item \textbf{Limitations:} Inefficient compared to Quick Sort for most practical datasets.
|
|
\end{itemize}
|
|
\end{properties}
|
|
|
|
\begin{algorithm}
|
|
\begin{spacing}{1.2}
|
|
\caption{Heap Sort}
|
|
\begin{algorithmic}[1]
|
|
\Procedure{HeapSort}{$A$}
|
|
\State $H \gets \Call{Heapify}{A}$
|
|
\For{$i \gets \text{length}(A)$ to $2$}
|
|
\State $A[i] \gets \Call{ExtractMax}{A}$
|
|
\EndFor
|
|
\EndProcedure
|
|
\end{algorithmic}
|
|
\end{spacing}
|
|
\end{algorithm}
|
|
|
|
The lecture does not cover the implementation of a heap tree. See the specific section \ref{sec:heap-trees} on Heap-Trees
|
|
|
|
|
|
\newpage
|
|
\subsubsection{Bucket Sort}
|
|
\begin{definition}[]{Bucket Sort}
|
|
Bucket Sort is a distribution-based sorting algorithm that divides the input into a fixed number of buckets, sorts the elements within each bucket (using another sorting algorithm, typically Insertion Sort), and then concatenates the buckets to produce the sorted array.
|
|
\end{definition}
|
|
|
|
\begin{properties}[]{Characteristics and Performance}
|
|
\begin{itemize}
|
|
\item \textbf{Efficiency:} Performs well for uniformly distributed datasets.
|
|
\item \textbf{Time Complexity:}
|
|
\begin{itemize}
|
|
\item Best case: \tcl{n + k} (for uniform distribution and $k$ buckets)
|
|
\item Worst case: \tco{n^2} (when all elements fall into a single bucket)
|
|
\item Average case: \tct{n + k}
|
|
\end{itemize}
|
|
\item \textbf{Space Complexity:} Requires \tct{n + k} additional space.
|
|
\item \textbf{Limitations:} Performance depends on the choice of bucket size and distribution of input elements.
|
|
\end{itemize}
|
|
\end{properties}
|
|
|
|
\begin{algorithm}
|
|
\begin{spacing}{1.2}
|
|
\caption{Bucket Sort}
|
|
\begin{algorithmic}[1]
|
|
\Procedure{BucketSort}{$A, k$}
|
|
\State $B[1..n] \gets [0, 0, \ldots, 0]$
|
|
\For{$j \gets 1, 2, \ldots, n$}
|
|
\State $B[A[j]] \gets B[A[j]] + 1$ \Comment{Count in $B[i]$ how many times $i$ occurs}
|
|
\EndFor
|
|
\State $k \gets 1$
|
|
\For{$i \gets 1, 2, \ldots, n$}
|
|
\State $A[k, \ldots, k + B[i] - 1] \gets [i, i, \ldots, i]$ \Comment {Write $B[i]$ times the value $i$ into $A$}
|
|
\State $k \gets k + i$ \Comment{$A$ is filled until position $k - 1$}
|
|
\EndFor
|
|
\EndProcedure
|
|
\end{algorithmic}
|
|
\end{spacing}
|
|
\end{algorithm}
|
|
|
|
|
|
\newpage
|
|
\subsection{Heap trees}
|
|
\label{sec:heap-trees}
|
|
\subsubsection{Min/Max-Heap}
|
|
\begin{definition}[]{Min-/Max-Heap}
|
|
A Min-Heap is a complete binary tree where the value of each node is less than or equal to the values of its children.
|
|
Conversely, a Max-Heap is a complete binary tree where the value of each node is greater than or equal to the values of its children.
|
|
In the characteristics below, $A$ is an array storing the value of a element
|
|
\end{definition}
|
|
|
|
\begin{properties}[]{Characteristics}
|
|
\begin{itemize}
|
|
\item \textbf{Heap Property:}
|
|
\begin{itemize}
|
|
\item Min-Heap: $A[parent] \leq A[child]$ for all nodes.
|
|
\item Max-Heap: $A[parent] \geq A[child]$ for all nodes.
|
|
\end{itemize}
|
|
\item \textbf{Operations:} Both Min-Heaps and Max-Heaps support:
|
|
\begin{itemize}
|
|
\item \textbf{Insert:} Add an element to the heap and adjust to maintain the heap property.
|
|
\item \textbf{Extract Min/Max:} Remove the root element (minimum or maximum), replace it with the last element (bottom right most element), and adjust the heap.
|
|
\end{itemize}
|
|
\item \textbf{Time Complexity:}
|
|
\begin{itemize}
|
|
\item Insert: \tct{\log n}.
|
|
\item Extract Min/Max: \tct{\log n}.
|
|
\item Build Heap: \tct{n}.
|
|
\end{itemize}
|
|
\end{itemize}
|
|
\end{properties}
|
|
|
|
\begin{example}[]{Min-Heap}
|
|
The following illustrates a Min-Heap with seven elements:
|
|
\begin{center}
|
|
\begin{forest}
|
|
for tree={
|
|
circle, draw, fill=blue!20, minimum size=10mm, inner sep=0pt, % Node style
|
|
s sep=15mm, % Sibling separation
|
|
l sep=15mm % Level separation
|
|
}
|
|
[2
|
|
[4
|
|
[8]
|
|
[10]
|
|
]
|
|
[6
|
|
[14]
|
|
[18]
|
|
]
|
|
]
|
|
\end{forest}
|
|
\end{center}
|
|
\end{example}
|