% vim: set ts=2 sw=2 tw=80 et: \documentclass[12pt]{article} \usepackage[margin=3cm]{geometry} \usepackage{xcolor} \usepackage{lmodern} \usepackage{listings} \title{Graded Assignment 3 -- DSA} \author{Claudio Maggioni} \setlength{\parindent}{0cm} % listings configuration \lstset{ basicstyle=\small\ttfamily, frame=shadowbox, rulesepcolor=\color{black}, columns=fullflexible, commentstyle=\color{gray}, keywordstyle=\bfseries, keywords={,while,if,elif,else,FUNCTION,return,for,from,to,TRUE,FALSE}, mathescape=true, aboveskip=2em, captionpos=b, abovecaptionskip=1em, belowcaptionskip=1em } \begin{document} \maketitle \tableofcontents \lstlistoflistings \newpage \section{Exercise 1} {\small\ttfamily \begin{verbatim} 12 Insert 6: 12 / 6 Insert 1: 12 / 6 / 1 Insert 7: 12 /// 6 / \ 1 7 Insert 4: 12 /// 6 /// \ 1 7 \ 4 Insert 11: 12 ////// 6 /// \ 1 7 \ \ 4 11 Insert 15: 12 ////// \ 6 15 /// \ 1 7 \ \ 4 11 Insert 9: 12 //////// \ 6 15 /// \ 1 7 \ \\\ 4 11 / 9 Insert 5: 12 //////// \ 6 15 ///// \ 1 7 \ \\\ 4 11 \ / 5 9 Insert 13: 12 //////// \\\\ 6 15 ///// \ / 1 7 13 \ \\\ 4 11 \ / 5 9 Insert 8: 12 ////////// \\\\ 6 15 ///// \ / 1 7 13 \ \\\\\ 4 11 \ / 5 9 / 8 Insert 14: 12 ////////// \\\\\\\ 6 15 ///// \ //// 1 7 13 \ \\\\\ \ 4 11 14 \ / 5 9 / 8 Insert 3: 12 ////////// \\\\\\\ 6 15 /////// \ //// 1 7 13 \\\ \\\\\ \ 4 11 14 / \ / 3 5 9 / 8 Insert 10: 12 ///////////// \\\\\\\ 6 15 /////// \ //// 1 7 13 \\\ \\\\\\\\ \ 4 11 14 / \ //// 3 5 9 / \ 8 10 Insert 2: 12 ///////////// \\\\\\\ 6 15 ///////// \ //// 1 7 13 \\\\\ \\\\\\\\ \ 4 11 14 / \ //// 3 5 9 / / \ 2 8 10 Delete 6: 12 /////////// \\\\\\\ 7 15 ///////// \\\\\\\\ //// 1 11 13 \\\\\ //// \ 4 9 14 / \ / \ 3 5 8 10 / 2 Delete 2: 12 /////////// \\\\\\\ 7 15 /////// \\\\\\\\ //// 1 11 13 \\\ //// \ 4 9 14 / \ / \ 3 5 8 10 Delete 12: 15 //// 13 /////////// \ 7 14 /////// \\\\\\\\ 1 11 \\\ //// 4 9 / \ / \ 3 5 8 10 \end{verbatim} } \section{Exercise 2} \subsection{Point A} {\small\ttfamily \begin{verbatim} 12B Insert 6: 12B / 6R Insert 1: 6B / \ 1R 12R Insert 7: 6B / \\\\ 1B 12B / 7R Insert 4: 6B //// \\\\ 1B 12B \ / 4R 7R Insert 11: 6B //// \\\\ 1B 11B \ / \ 4R 7R 12R Insert 15: 11B //// \ 6R 12B //// \ \ 1B 7B 15R \ 4R Insert 9: 11B /////// \ 6R 12B //// \ \ 1B 7B 15R \ \ 4R 9R Insert 5: 6B //// \\\\\\\ 4B 11R / \ //// \ 1R 5R 7B 12B \ \ 9R 15R Insert 13: 11B /////// \\\\\ 6R 13B //// \ / \ 4B 7B 12R 15R / \ \ 1R 5R 9R Insert 8: 8B //// \\\\ 6R 11R //// \ / \\\\\ 4B 7R 9R 13B / \ / \ 1R 5R 12R 15R Insert 14: 8B //// \\\\ 6B 11B //// \ / \\\\\ 4B 7R 9B 13B / \ / \\\\\ 1R 5R 12B 15B / 14R Insert 3: 6B //// \\\\ 4B 8R //// \ / \\\\ 1B 5B 7B 11B \ / \\\\\ 3R 9B 13B / \\\\\ 12B 15B / 14R Insert 10: 6B //// \\\\ 4B 8R //// \ / \\\\\\\\ 1B 5B 7B 11B \ ///// \\\\\ 3R 9B 13B \ / \\\\\ 10R 12B 15B / 14R Insert 2: 6B //// \\\\ 4B 8R //// \ / \\\\\\\\ 2B 5B 7B 11B / \ ///// \\\\\ 1R 3R 9B 13B \ / \\\\\ 10R 12B 15B / 14R \end{verbatim}% }% % Assume every empty branch has as a child a black leaf node. \subsection{Point B} A red-black tree of n distinct elements has an height between $\log(n)$ and $2\log(n)$ thanks to the red-black tree invariant. The worst-case insertion complexity is $\log(n)$ since finding the right place to insert is as complex as a regular tree (i.e. logarithmic) and the ``fixup'' operation is logarithmic as well (the tree traversal is logarithmic while operations in each iteration are constant). In asymptotic terms, the uneven height of leaves in the tree does not make a difference since it is a constant factor (since the maximum height is $2\log(n)$ and the minimum one is $\log(n)$. \section{Exercise 3} \begin{lstlisting}[caption=Solution for exercise 3, label={lst:ex3}] FUNCTION JOIN-INTERVALS(X) if X.length == 0: return for i from 1 to X.length: if i % 2 == 1: X[i] $\gets$ (X[i], 1) else: X[i] $\gets$ (X[i], -1) $\textit{sort X in place by 1st tuple element in O(n log(n))}$ c $\gets$ 1 n $\gets$ 0 start $\gets$ X[i][1] for i from 2 to X.length: c $\gets$ c + X[i][2] if c == 0: X[2 * n + 1] $\gets$ start X[2 * n + 2] $\gets$ X[i][1] start $\gets$ X[i+1][1] n $\gets$ n + 1 X.length $\gets$ 2 * n \end{lstlisting} % The complexity of this algorithm is $O(n\log(n))$ since the sorting is in $\Theta(n\log(n))$ and the union operation afterwards is $\Theta(n)$. \end{document}