\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}