sort/doc/Informe.tex

180 lines
5.3 KiB
TeX

\title{Tarea 1: Ordenamiento}
\author{}
\date{\today}
\documentclass[12pt]{article}
\usepackage[utf8]{inputenc} %\ This allows spanish tildes
\usepackage[spanish]{babel}
\usepackage{array}
\usepackage{adjustbox}
\usepackage{titling}
\usepackage[left=2cm,right=2cm,top=2cm,bottom=2cm,a4paper]{geometry}
\usepackage{amsmath}
\usepackage{listings}
\lstset{
basicstyle=\small\ttfamily,
columns=flexible,
breaklines=true,
inputencoding=utf8,
extendedchars=true,
literate={á}{{\'a}}1 {é}{{\'e}}1 {í}{{\'i}}1 {ó}{{\'o}}1 {ú}{{\'u}}1 {ñ}{{\~n}}1 {Á}{{\'A}}1 {É}{{\'E}}1 {Í}{{\'I}}1 {Ó}{{\'O}}1 {Ú}{{\'U}}1 {Ñ}{{\~N}}1
}
\usepackage{hyperref}
\hypersetup{pdftex,colorlinks=true,allcolors=black,bookmarks}
\usepackage{hypcap}
\pretitle{%
\begin{center}
\LARGE
\includegraphics[width=4cm]{ubblogo.png}\\[\bigskipamount]
\Large
\textbf{Análisis y Diseño de Algoritmos}\\[\smallskipamount]
}
\posttitle{\end{center}}
\begin{document}
\clearpage\maketitle
\thispagestyle{empty}
\begin{flushright}
\textbf{Integrantes:}\\
Christopher Cromer\\
Rodolfo Cuevas
\end{flushright}
\begin{flushright}
\textbf{Profesor:}\\
Pedro Rodríguez
\end{flushright}
\begin{flushright}
\textbf{Ayudantes:}\\
Carlos Faúndez\\
Xavier Canales
\end{flushright}
\newpage
\clearpage
\thispagestyle{empty}
\tableofcontents
\newpage
\pagenumbering{arabic}
\section{Pseudo código}
\subsection{Merge Sort}
\newpage
\subsection{Quick Sort}
\lstinputlisting{pseudo/quicksort.txt}
\newpage
\subsection{Bubble Sort}
\lstinputlisting{pseudo/bubblesort.txt}
\newpage
\subsection{Bitonic Sort}
\lstinputlisting{pseudo/bitonicsort.txt}
\newpage
\subsection{Ordenamiento por conteo}
\newpage
\subsection{Ordenamiento por selección}
\lstinputlisting{pseudo/selectionsort.txt}
\newpage
\section{Resultados}
\subsection{Análisis temporal}
\subsubsection{Merge Sort}
Caso Promedio: $ \Theta (n log n)) $ \\
en.wikipedia.org/wiki/Merge\_sort\#Analysis
Peor Caso: $ O(n log n) $ \\
Mejor Caso: $ \Omega (n log n)$ \\
\subsubsection{Quick Sort}
Caso Promedio: $ \Theta (n(log n)) $ \\
El tiempo de ejecución que tendrá el algoritmo dependerá de como se realice la partición de el arreglo entrada, es decir, depende de la selección del pivote
Peor Caso: $ O(n^2) $ \\
El peor de los casos para el quicksort resultará cuando la elección del pivote sea el valor más pequeño del arreglo o el más grande de este mismo.
Mejor Caso: $ \Omega $(n log(n)) \\
Para obtener el mejor caso posible será cuando el pivote se encuentre exactamente al medio del arreglo, porque lo dividirá en dos obteniendo n/2 elementos en ambas divisiones del arreglo
\subsubsection{Bubble Sort}
Caso Promedio: $ \Theta (n^2)) $ \\
El caso promedio compara la complejidad temporal con el peor caso, donde n es el numero de valores a ordenar, esto es producto de la forma en la cual Bubble transporta los valores dentro de su ordenamiento
Peor Caso: $ O(n^2) $ \\
Mejor Caso: $ \Omega (n)$ \\
El mejor caso para el Bubble sort será cuando el arreglo de entrada venga previamente ordenado de menor a mayor.
\subsubsection{Bitonic Sort}
Caso Promedio: $\Theta(log^2(n))$ \\
El ordenamiento bitonico responde igual a todos los casos porque siempre antes de empezar a ordenarlos realiza las mismas comparaciones para dejarlos en la secuencia bitonica
Peor Caso: $O(log^2(n))$ \\
Mejor Caso: $\Omega(log^2(n))$ \\
\subsubsection{Ordenamiento por conteo}
Caso Promedio: $ \Theta (n + k)) $ \\
La complejidad total es igual para todos los casos, porque el algoritmo usa sólo ciclos simples, sin recursividad o sub-funciones, va directamente al analisis
Peor Caso: $ O(n + k) $ \\
Mejor Caso: $ \Omega (n + k)$ \\
\subsubsection{Ordenamiento por selección}
Caso Promedio: $\Theta(n^2)$ \\
El ordenamiento por selección no es un algoritmo de ordenamiento adaptable, realiza el mismo numero de comparaciones de elementos en el mejor caso, el caso promedio y el peor de los casos, esto se debe a que no utiliza el orden existente de las entradas de el arreglo para ordenar.
Peor Caso: $O(n^2)$ \\
Mejor Caso: $\Omega(n^2)$
\newpage
\subsection{Datos}
La siguiente tabla contiene los resultados de las pruebas de los 6 algoritmos medidos en segundos. Para las pruebas usábamos un computador que tiene un procesador AMD A12 con 4 núcleos de 2.7Ghz y 16GB de memoria RAM.
\begin{center}
\begin{tabular}{|c|c|c|c|c|c|c|}
\hline
\multicolumn{7}{|c|}{Algoritmos de ordenamiento} \\
\hline
\rule[-1ex]{0pt}{3.5ex} & Quick & Merge & Bitonic & Selection & Counting & Bubble \\
\hline
\rule[-1ex]{0pt}{3.5ex} 10.000 & 0.100[s] & 0.280[s] & 0.090[s] & 0.143[s] & 0.258[s] & 0.326[s] \\
\hline
\rule[-1ex]{0pt}{3.5ex} 100.000 & 0.170[s] & 0.300[s] & 0.124[s] & 11.645[s] & 30.269[s] & 32.347[s] \\
\hline
\rule[-1ex]{0pt}{3.5ex} 1.000.000 & 0.173[s] & 0.304[s] & 1.405[s] & 1,262.000[s] & 3,026.900[s] & 3,234.700[s] \\
\hline
\rule[-1ex]{0pt}{3.5ex} 5.000.000 & 2.000[s] & 1.577[s] & 7.421[s] & 31,550.000[s] & 75,672.500[s] & 80,867.500[s] \\
\hline
\rule[-1ex]{0pt}{3.5ex} 10.000.000 & 2.400[s] & 3.236[s] & 18.365[s] & 126,200.000[s] & 302,690.000[s] & 323,470.000[s] \\
\hline
\end{tabular}
\end{center}
\newpage
\subsection{Gráfico}
\begin{center}
\includegraphics[width=0.96\textwidth,height=0.96\textheight,keepaspectratio]{graph.png}
\end{center}
\newpage
\section{Conclusiones}
\end{document}