Added Graded Assignment 2 exercise 2 in Latex
This commit is contained in:
parent
809a1166a7
commit
13030cc6bc
3 changed files with 408 additions and 0 deletions
263
.gitignore
vendored
263
.gitignore
vendored
|
@ -1,3 +1,266 @@
|
|||
## Core latex/pdflatex auxiliary files:
|
||||
*.aux
|
||||
*.lof
|
||||
*.log
|
||||
*.lot
|
||||
*.fls
|
||||
*.out
|
||||
*.toc
|
||||
*.fmt
|
||||
*.fot
|
||||
*.cb
|
||||
*.cb2
|
||||
.*.lb
|
||||
|
||||
## Intermediate documents:
|
||||
*.dvi
|
||||
*.xdv
|
||||
*-converted-to.*
|
||||
# these rules might exclude image files for figures etc.
|
||||
# *.ps
|
||||
# *.eps
|
||||
# *.pdf
|
||||
|
||||
## Generated if empty string is given at "Please type another file name for output:"
|
||||
.pdf
|
||||
|
||||
## Bibliography auxiliary files (bibtex/biblatex/biber):
|
||||
*.bbl
|
||||
*.bcf
|
||||
*.blg
|
||||
*-blx.aux
|
||||
*-blx.bib
|
||||
*.run.xml
|
||||
|
||||
## Build tool auxiliary files:
|
||||
*.fdb_latexmk
|
||||
*.synctex
|
||||
*.synctex(busy)
|
||||
*.synctex.gz
|
||||
*.synctex.gz(busy)
|
||||
*.pdfsync
|
||||
|
||||
## Build tool directories for auxiliary files
|
||||
# latexrun
|
||||
latex.out/
|
||||
|
||||
## Auxiliary and intermediate files from other packages:
|
||||
# algorithms
|
||||
*.alg
|
||||
*.loa
|
||||
|
||||
# achemso
|
||||
acs-*.bib
|
||||
|
||||
# amsthm
|
||||
*.thm
|
||||
|
||||
# beamer
|
||||
*.nav
|
||||
*.pre
|
||||
*.snm
|
||||
*.vrb
|
||||
|
||||
# changes
|
||||
*.soc
|
||||
|
||||
# comment
|
||||
*.cut
|
||||
|
||||
# cprotect
|
||||
*.cpt
|
||||
|
||||
# elsarticle (documentclass of Elsevier journals)
|
||||
*.spl
|
||||
|
||||
# endnotes
|
||||
*.ent
|
||||
|
||||
# fixme
|
||||
*.lox
|
||||
|
||||
# feynmf/feynmp
|
||||
*.mf
|
||||
*.mp
|
||||
*.t[1-9]
|
||||
*.t[1-9][0-9]
|
||||
*.tfm
|
||||
|
||||
#(r)(e)ledmac/(r)(e)ledpar
|
||||
*.end
|
||||
*.?end
|
||||
*.[1-9]
|
||||
*.[1-9][0-9]
|
||||
*.[1-9][0-9][0-9]
|
||||
*.[1-9]R
|
||||
*.[1-9][0-9]R
|
||||
*.[1-9][0-9][0-9]R
|
||||
*.eledsec[1-9]
|
||||
*.eledsec[1-9]R
|
||||
*.eledsec[1-9][0-9]
|
||||
*.eledsec[1-9][0-9]R
|
||||
*.eledsec[1-9][0-9][0-9]
|
||||
*.eledsec[1-9][0-9][0-9]R
|
||||
|
||||
# glossaries
|
||||
*.acn
|
||||
*.acr
|
||||
*.glg
|
||||
*.glo
|
||||
*.gls
|
||||
*.glsdefs
|
||||
|
||||
# gnuplottex
|
||||
*-gnuplottex-*
|
||||
|
||||
# gregoriotex
|
||||
*.gaux
|
||||
*.gtex
|
||||
|
||||
# htlatex
|
||||
*.4ct
|
||||
*.4tc
|
||||
*.idv
|
||||
*.lg
|
||||
*.trc
|
||||
*.xref
|
||||
|
||||
# hyperref
|
||||
*.brf
|
||||
|
||||
# knitr
|
||||
*-concordance.tex
|
||||
# TODO Comment the next line if you want to keep your tikz graphics files
|
||||
*.tikz
|
||||
*-tikzDictionary
|
||||
|
||||
# listings
|
||||
*.lol
|
||||
|
||||
# luatexja-ruby
|
||||
*.ltjruby
|
||||
|
||||
# makeidx
|
||||
*.idx
|
||||
*.ilg
|
||||
*.ind
|
||||
*.ist
|
||||
|
||||
# minitoc
|
||||
*.maf
|
||||
*.mlf
|
||||
*.mlt
|
||||
*.mtc[0-9]*
|
||||
*.slf[0-9]*
|
||||
*.slt[0-9]*
|
||||
*.stc[0-9]*
|
||||
|
||||
# minted
|
||||
_minted*
|
||||
*.pyg
|
||||
|
||||
# morewrites
|
||||
*.mw
|
||||
|
||||
# nomencl
|
||||
*.nlg
|
||||
*.nlo
|
||||
*.nls
|
||||
|
||||
# pax
|
||||
*.pax
|
||||
|
||||
# pdfpcnotes
|
||||
*.pdfpc
|
||||
|
||||
# sagetex
|
||||
*.sagetex.sage
|
||||
*.sagetex.py
|
||||
*.sagetex.scmd
|
||||
|
||||
# scrwfile
|
||||
*.wrt
|
||||
|
||||
# sympy
|
||||
*.sout
|
||||
*.sympy
|
||||
sympy-plots-for-*.tex/
|
||||
|
||||
# pdfcomment
|
||||
*.upa
|
||||
*.upb
|
||||
|
||||
# pythontex
|
||||
*.pytxcode
|
||||
pythontex-files-*/
|
||||
|
||||
# tcolorbox
|
||||
*.listing
|
||||
|
||||
# thmtools
|
||||
*.loe
|
||||
|
||||
# TikZ & PGF
|
||||
*.dpth
|
||||
*.md5
|
||||
*.auxlock
|
||||
|
||||
# todonotes
|
||||
*.tdo
|
||||
|
||||
# vhistory
|
||||
*.hst
|
||||
*.ver
|
||||
|
||||
# easy-todo
|
||||
*.lod
|
||||
|
||||
# xcolor
|
||||
*.xcp
|
||||
|
||||
# xmpincl
|
||||
*.xmpi
|
||||
|
||||
# xindy
|
||||
*.xdy
|
||||
|
||||
# xypic precompiled matrices
|
||||
*.xyc
|
||||
|
||||
# endfloat
|
||||
*.ttt
|
||||
*.fff
|
||||
|
||||
# Latexian
|
||||
TSWLatexianTemp*
|
||||
|
||||
## Editors:
|
||||
# WinEdt
|
||||
*.bak
|
||||
*.sav
|
||||
|
||||
# Texpad
|
||||
.texpadtmp
|
||||
|
||||
# LyX
|
||||
*.lyx~
|
||||
|
||||
# Kile
|
||||
*.backup
|
||||
|
||||
# KBibTeX
|
||||
*~[0-9]*
|
||||
|
||||
# auto folder when using emacs and auctex
|
||||
./auto/*
|
||||
*.el
|
||||
|
||||
# expex forward references with \gathertags
|
||||
*-tags.tex
|
||||
|
||||
# standalone packages
|
||||
*.sta
|
||||
|
||||
# Created by https://www.gitignore.io/api/python
|
||||
# Edit at https://www.gitignore.io/?templates=python
|
||||
|
||||
|
|
BIN
GA2/ga2.pdf
Normal file
BIN
GA2/ga2.pdf
Normal file
Binary file not shown.
145
GA2/ga2.tex
Normal file
145
GA2/ga2.tex
Normal file
|
@ -0,0 +1,145 @@
|
|||
% 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 2 -- DSA}
|
||||
\author{Claudio Maggioni}
|
||||
|
||||
% 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 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))$.
|
||||
|
||||
\begin{lstlisting}[caption=Sum of two in pseudocode, label={lst:sum2}]
|
||||
FUNCTION SUM-OF-TWO(A, s):
|
||||
A $\gets$ mergesort(A)
|
||||
i $\gets$ 1
|
||||
j $\gets$ A.length
|
||||
|
||||
while i < j:
|
||||
sum $\gets$ $A_i$ + $A_j$
|
||||
if sum = s:
|
||||
return TRUE
|
||||
elif sum > s:
|
||||
j $\gets$ j - 1
|
||||
else:
|
||||
i $\gets$ i + 1
|
||||
|
||||
return FALSE
|
||||
\end{lstlisting}
|
||||
|
||||
\subsection{Exercise b}
|
||||
The pseudocode for \textit{Sum of three} can be found in listing \ref{lst:sum3}.
|
||||
\textsc{search-two} has a time cost of $O(n)$ in the worst case (if no elements
|
||||
are found), and the loop of \textsc{search} has an added cost of $O(n)$. The
|
||||
total cost in the worst case then, including mergesort, is $n^2 + n log(n)
|
||||
= \theta(n^2)$.
|
||||
|
||||
\begin{lstlisting}[caption=Sum of three in pseudocode, label={lst:sum3}]
|
||||
FUNCTION SEARCH-TWO(A, sum2, i_skip):
|
||||
i $\gets$ 1
|
||||
j $\gets$ A.length
|
||||
|
||||
while i < j:
|
||||
if i = i_skip:
|
||||
i $\gets$ i + 1
|
||||
elif j = i_skip:
|
||||
j $\gets$ j - 1
|
||||
else:
|
||||
sum $\gets$ $A_i$ + $A_j$
|
||||
if sum = sum2:
|
||||
return TRUE
|
||||
elif sum > sum2:
|
||||
j $\gets$ j - 1
|
||||
else:
|
||||
i $\gets$ i + 1
|
||||
|
||||
return FALSE
|
||||
|
||||
FUNCTION SUM-OF-THREE(A, s):
|
||||
A $\gets$ mergesort(A)
|
||||
l $\gets$ A.length
|
||||
|
||||
for i from 1 to l:
|
||||
if SEARCH-TWO(A, s - $A_i$, i):
|
||||
return TRUE
|
||||
|
||||
return FALSE
|
||||
\end{lstlisting}
|
||||
|
||||
\subsection{Exercise c}
|
||||
The \textit{Python} code used to implement \textit{Sum of three} can be found in
|
||||
the listing \ref{lst:sum3py}.
|
||||
|
||||
\begin{lstlisting}[caption=Sum of three in Python, label={lst:sum3py},%
|
||||
language=python]
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import sys
|
||||
|
||||
def search_two(A, sum2, i_skip):
|
||||
i = 0
|
||||
j = len(A) - 1
|
||||
|
||||
while i < j:
|
||||
if i == i_skip:
|
||||
i = i + 1
|
||||
elif j == i_skip:
|
||||
j = j - 1
|
||||
else:
|
||||
cs = A[i] + A[j]
|
||||
if cs == sum2:
|
||||
return True
|
||||
elif cs > sum2:
|
||||
j = j - 1
|
||||
else:
|
||||
i = i + 1
|
||||
|
||||
return False
|
||||
|
||||
def sum_of_three(A, sum3):
|
||||
A.sort() # assume using mergesort for worst case of O(n*log(n))
|
||||
l = len(A)
|
||||
|
||||
for i in range(l):
|
||||
if search_two(A, sum3 - A[i], i):
|
||||
return True
|
||||
|
||||
return False
|
||||
|
||||
if __name__ == "__main__":
|
||||
args = [int(x) for x in sys.argv[1:]]
|
||||
print(sum_of_three(args[1:], args[0]))
|
||||
\end{lstlisting}
|
||||
\end{document}
|
Reference in a new issue