diff --git a/GA2/ga2.pdf b/GA2/ga2.pdf index e0c5c92..607a9c8 100644 Binary files a/GA2/ga2.pdf and b/GA2/ga2.pdf differ diff --git a/GA2/ga2.tex b/GA2/ga2.tex index 688a2cb..3f37840 100644 --- a/GA2/ga2.tex +++ b/GA2/ga2.tex @@ -32,14 +32,131 @@ \lstlistoflistings \newpage +\section{Exercise 1} + +\subsection{Mergesort} + +\begin{verbatim} +[5, 6, 12, 8, 4, 10, 3, 12, 11, 1] +[5, 6, 12, 8, 4] [10, 3, 12, 11, 1] +[5, 6, 12, 8, 4] +[5, 6], [12, 8, 4] +[5, 6] +[5], [6] +[5] +[6] +[5, 6] +[12, 8, 4] +[12] [8, 4] +[12] +[8, 4] +[8], [4] +[8] +[4] +[4, 8] +[4, 8, 12] +[4, 5, 6, 8, 12] +[10, 3, 12, 11, 1] +[10, 3], [12, 11, 1] +[10], [3] +[10] +[3] +[3, 10] +[12, 11, 1] +[12], [11, 1] +[12] +[11, 1] +[11], [1] +[11] +[1] +[1, 11] +[1, 11, 12] +[1, 3, 10, 11, 12] +[1, 3, 4, 5, 6, 8, 10, 11, 12, 12] +\end{verbatim} + +\subsection{Selection sort} +\begin{verbatim} +[4, 6, 12, 8, 5, 10, 3, 12, 11, 1] +[3, 6, 12, 8, 5, 10, 4, 12, 11, 1] +[1, 6, 12, 8, 5, 10, 4, 12, 11, 3] +[1, 5, 12, 8, 6, 10, 4, 12, 11, 3] +[1, 4, 12, 8, 6, 10, 5, 12, 11, 3] +[1, 3, 12, 8, 6, 10, 5, 12, 11, 4] +[1, 3, 8, 12, 6, 10, 5, 12, 11, 4] +[1, 3, 6, 12, 8, 10, 5, 12, 11, 4] +[1, 3, 5, 12, 8, 10, 6, 12, 11, 4] +[1, 3, 4, 12, 8, 10, 6, 12, 11, 5] +[1, 3, 4, 8, 12, 10, 6, 12, 11, 5] +[1, 3, 4, 6, 12, 10, 8, 12, 11, 5] +[1, 3, 4, 5, 12, 10, 8, 12, 11, 6] +[1, 3, 4, 5, 10, 12, 8, 12, 11, 6] +[1, 3, 4, 5, 8, 12, 10, 12, 11, 6] +[1, 3, 4, 5, 6, 12, 10, 12, 11, 8] +[1, 3, 4, 5, 6, 10, 12, 12, 11, 8] +[1, 3, 4, 5, 6, 8, 12, 12, 11, 10] +[1, 3, 4, 5, 6, 8, 11, 12, 12, 10] +[1, 3, 4, 5, 6, 8, 10, 12, 12, 11] +[1, 3, 4, 5, 6, 8, 10, 11, 12, 12] +[1, 3, 4, 5, 6, 8, 10, 11, 12, 12] +\end{verbatim} + +\subsection{Quicksort} +\begin{verbatim} +[5, 6, 12, 8, 4, 10, 3, 12, 11, 1] +[5, 6, 3, 1, 4] 8 [12, 12, 11, 10] +[] 1 [6, 3, 4, 5] +[] 3 [5, 4, 6] +[5, 4] 6 [] +[4] 5 [] +[4] 5 [] +[4, 5] 6 [] +[] 3 [4, 5, 6] +[] 1 [3, 4, 5, 6] +[10] 11 [12, 12] +[12] 12 [] +[12] 12 [] +[10] 11 [12, 12] +[1, 3, 4, 5, 6] 8 [10, 11, 12, 12] +[1, 3, 4, 5, 6, 8, 10, 11, 12, 12] +\end{verbatim} + +\subsection{Insertion sort} +\begin{verbatim} +[5, 6, 12, 8, 4, 10, 3, 12, 11, 1] +[5, 6, 8, 12, 4, 10, 3, 12, 11, 1] +[5, 6, 8, 4, 12, 10, 3, 12, 11, 1] +[5, 6, 4, 8, 12, 10, 3, 12, 11, 1] +[5, 4, 6, 8, 12, 10, 3, 12, 11, 1] +[4, 5, 6, 8, 12, 10, 3, 12, 11, 1] +[4, 5, 6, 8, 10, 12, 3, 12, 11, 1] +[4, 5, 6, 8, 10, 3, 12, 12, 11, 1] +[4, 5, 6, 8, 3, 10, 12, 12, 11, 1] +[4, 5, 6, 3, 8, 10, 12, 12, 11, 1] +[4, 5, 3, 6, 8, 10, 12, 12, 11, 1] +[4, 3, 5, 6, 8, 10, 12, 12, 11, 1] +[3, 4, 5, 6, 8, 10, 12, 12, 11, 1] +[3, 4, 5, 6, 8, 10, 12, 11, 12, 1] +[3, 4, 5, 6, 8, 10, 11, 12, 12, 1] +[3, 4, 5, 6, 8, 10, 11, 12, 1, 12] +[3, 4, 5, 6, 8, 10, 11, 1, 12, 12] +[3, 4, 5, 6, 8, 10, 1, 11, 12, 12] +[3, 4, 5, 6, 8, 1, 10, 11, 12, 12] +[3, 4, 5, 6, 1, 8, 10, 11, 12, 12] +[3, 4, 5, 1, 6, 8, 10, 11, 12, 12] +[3, 4, 1, 5, 6, 8, 10, 11, 12, 12] +[3, 1, 4, 5, 6, 8, 10, 11, 12, 12] +[1, 3, 4, 5, 6, 8, 10, 11, 12, 12] +\end{verbatim} + \section{Exercise 2} \subsection{Exercise a} The pseudocode for \textit{Sum of two} can be found in listing \ref{lst:sum2}. The total cost of this algorithm in the worst case is the sum of the worst case of mergesort ($O(n log(n))$) and the cost of the worst case in the partition -done afterwards (which is equivalent to not finding the sum, i.e. $2 n = -O(n)$). Therefore, the total cost is $\theta(n log(n))$. +done afterwards (which is equivalent to not finding a sum close to the median, +i.e. $2 n = O(n)$). Therefore, the total cost is $\theta(n log(n))$. \begin{lstlisting}[caption=Sum of two in pseudocode, label={lst:sum2}] FUNCTION SUM-OF-TWO(A, s): diff --git a/insertion_sort.py b/insertion_sort.py index 28afbac..1377ab8 100755 --- a/insertion_sort.py +++ b/insertion_sort.py @@ -8,11 +8,10 @@ def insertionsort(A): # insert the next element in the right place in the first elements # continue until the array is done for j in range(1,len(A)): - print(A) - print(A) i = j - 1 # while swapping is necessary or at the end of array while i >= 0 and A[i+1] < A[i]: + print(A) # Swap A[i] and A[j] A[i+1], A[i] = A[i], A[i+1] i = i - 1 diff --git a/mergesort.py b/mergesort.py deleted file mode 100755 index a1b6a32..0000000 --- a/mergesort.py +++ /dev/null @@ -1,34 +0,0 @@ -#!/usr/bin/env python3 -# vim: set ts=4 sw=4 et tw=80: - -import sys -import math - -def find(A,x): - for a in A: - if a == x: - return True - return False - -def merge(A,B): - X = [] - for a in A: - if not find(X, a): - X.append(a) - for b in B: - if not find(X, b): - X.append(b) - return X - -def mergesort(A): - l = len(A) - if l < 2: - return A - else: - lh = len(A) // 2 - h1 = mergesort(A[:lh]) - h2 = mergesort(A[lh:]) - return merge(h1,h2) - -args = [int(x) for x in sys.argv[1:]] -print(mergesort(args)) diff --git a/selection.py b/selection.py new file mode 100755 index 0000000..c911700 --- /dev/null +++ b/selection.py @@ -0,0 +1,18 @@ +#!/usr/bin/env python3 + +import sys + +def selectionsort(A): + if len(A) < 2: + return A + for i in range(len(A)): + for j in range(i + 1, len(A)): + if A[i] > A[j]: + A[i], A[j] = A[j], A[i] + print(A) + return A + +if __name__ == "__main__": + args = [int(x) for x in sys.argv[1:]] + print(selectionsort(args)) +