Proyecto de ordenamiento para el curso de Análisis y Diseño de Algoritmos.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

Informe.tex 7.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. \title{Tarea 1: Ordenamiento}
  2. \author{}
  3. \date{\today}
  4. \documentclass[12pt]{article}
  5. \usepackage[utf8]{inputenc} %\ This allows spanish tildes
  6. \usepackage[spanish]{babel}
  7. \usepackage{array}
  8. \usepackage{adjustbox}
  9. \usepackage{titling}
  10. \usepackage[left=2cm,right=2cm,top=2cm,bottom=2cm,a4paper]{geometry}
  11. \usepackage{amsmath}
  12. \usepackage{listings}
  13. \lstset{
  14. basicstyle=\small\ttfamily,
  15. columns=flexible,
  16. breaklines=true,
  17. inputencoding=utf8,
  18. extendedchars=true,
  19. 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
  20. }
  21. \usepackage{hyperref}
  22. \hypersetup{colorlinks=true,allcolors=black,pdftitle={Tarea 1: Ordenamiento}}
  23. \usepackage{hypcap}
  24. \pretitle{%
  25. \begin{center}
  26. \LARGE
  27. \includegraphics[width=4cm]{ubblogo.png}\\[\bigskipamount]
  28. \Large
  29. \textbf{Análisis y Diseño de Algoritmos}\\[\smallskipamount]
  30. }
  31. \posttitle{\end{center}}
  32. \begin{document}
  33. \hypersetup{pageanchor=false}
  34. \clearpage\maketitle
  35. \thispagestyle{empty}
  36. \begin{flushright}
  37. \textbf{Integrantes:}\\
  38. Christopher Cromer\\
  39. Rodolfo Cuevas
  40. \end{flushright}
  41. \begin{flushright}
  42. \textbf{Profesor:}\\
  43. Pedro Rodríguez
  44. \end{flushright}
  45. \begin{flushright}
  46. \textbf{Ayudantes:}\\
  47. Carlos Faúndez\\
  48. Xavier Canales
  49. \end{flushright}
  50. \newpage
  51. \clearpage
  52. \thispagestyle{empty}
  53. \tableofcontents
  54. \newpage
  55. \hypersetup{pageanchor=true}
  56. \pagenumbering{arabic}
  57. \section{Pseudo código}
  58. \subsection{Merge Sort}
  59. \lstinputlisting{pseudo/mergesort.txt}
  60. \newpage
  61. \subsection{Quick Sort}
  62. \lstinputlisting{pseudo/quicksort.txt}
  63. \newpage
  64. \subsection{Bubble Sort}
  65. \lstinputlisting{pseudo/bubblesort.txt}
  66. \newpage
  67. \subsection{Bitonic Sort}
  68. \lstinputlisting{pseudo/bitonicsort.txt}
  69. \newpage
  70. \subsection{Counting Sort}
  71. \lstinputlisting{pseudo/countingsort.txt}
  72. \newpage
  73. \subsection{Selection Sort}
  74. \lstinputlisting{pseudo/selectionsort.txt}
  75. \newpage
  76. \section{Resultados}
  77. \subsection{Análisis temporal}
  78. \subsubsection{Merge Sort}
  79. \underline{Caso Promedio:} $ \Theta(n log n)) $ \\
  80. El caso promedio de merge sort es similar a peor caso. \bigskip
  81. \underline{Peor Caso:} $ O(n log n) $ \\
  82. En el peor de los casos, el merge sort hace aproximadamente un 39\% menos de comparaciones que el quick sort en su caso promedio. En términos de movimientos, la complejidad del peor de los casos de merge sort es $ O(n log n) $ la misma complejidad que el mejor de Quick sort, y el mejor de la clasificación de merge sort toma aproximadamente la mitad de las iteraciones que en el peor de los casos. \bigskip
  83. \underline{Mejor Caso:} $ \Omega(n log n)$ \\
  84. En el caso mejor de merge sort, el merge sort funciona mejor cuando los datos son secuencial. \bigskip
  85. \subsubsection{Quick Sort}
  86. \underline{Caso Promedio:} $ \Theta(n(log n)) $ \\
  87. 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. \bigskip
  88. \underline{Peor Caso:} $ O(n^2) $ \\
  89. El peor de los casos para el quick sort resultará cuando la elección del pivote sea el valor más pequeño del arreglo o el más grande de este mismo. \bigskip
  90. \underline{Mejor Caso:} $ \Omega(n log(n)) $ \\
  91. 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. \bigskip
  92. \subsubsection{Bubble Sort}
  93. \underline{Caso Promedio:} $ \Theta(n^2)) $ \\
  94. 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 \textit{bubble} transporta los valores dentro de su ordenamiento. \bigskip
  95. \underline{Peor Caso:} $ O(n^2) $ \\
  96. En el peor caso el arreglo a ordenar va a estar ordenado en forma descendente previamente. \bigskip
  97. \underline{Mejor Caso:} $ \Omega(n)$ \\
  98. El mejor caso para el bubble sort será cuando el arreglo de entrada venga previamente ordenado de menor a mayor. \bigskip
  99. \subsubsection{Bitonic Sort}
  100. \underline{Caso Promedio:} $\Theta(log^2(n))$ \\
  101. 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. \bigskip
  102. \underline{Peor Caso:} $ O(log^2(n)) $ \\
  103. Su peor caso es igual que su caso promedio. \bigskip
  104. \underline{Mejor Caso:} $ \Omega(log^2(n)) $ \\
  105. Su mejor caso es igual que su caso promedio. \bigskip
  106. \subsubsection{Counting Sort}
  107. \underline{Caso Promedio:} $ \Theta(\frac{n^2}{2}) $ \\
  108. 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 análisis. \bigskip
  109. \underline{Peor Caso:} $ O(\frac{n^2}{2}) $ \\
  110. Su peor caso es igual a su caso promedio. \bigskip
  111. \underline{Mejor Caso:} $ \Omega(\frac{n^2}{2}) $ \\
  112. Su mejor caso es igual a su caso promedio. \bigskip
  113. \subsubsection{Selection Sort}
  114. \underline{Caso Promedio:} $ \Theta(n^2) $ \\
  115. 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 del arreglo para ordenar. \bigskip
  116. \underline{Peor Caso:} $ O(n^2) $ \\
  117. Su peor caso es igual a su caso promedio. \bigskip
  118. \underline{Mejor Caso:} $ \Omega(n^2) $ \\
  119. Su mejor caso es igual a su caso promedio. \bigskip
  120. \newpage
  121. \subsection{Datos}
  122. 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 4 núcleos de 3.2GHz y 16GB de memoria RAM. En el caso de Selection Sort, Counting Sort y Bubble Sort con 10.000.000 de elementos, no era posible terminar de correr esos algoritmos en un tiempo adecuado. Por lo tanto tuvimos que poner una estimación de tiempo basado en los resultados obtenidos con un menor cantidad de elementos.
  123. \begin{center}
  124. \begin{tabular}{|c|c|c|c|c|c|c|}
  125. \hline
  126. \multicolumn{7}{|c|}{Algoritmos de ordenamiento} \\
  127. \hline
  128. \rule[-1ex]{0pt}{3.5ex} & Quick & Merge & Bitonic & Selection & Counting & Bubble \\
  129. \hline
  130. \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] \\
  131. \hline
  132. \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] \\
  133. \hline
  134. \rule[-1ex]{0pt}{3.5ex} 1.000.000 & 0.173[s] & 0.304[s] & 1.405[s] & 3,144.000[s] & 6,717.674[s] & 7,248.000[s] \\
  135. \hline
  136. \rule[-1ex]{0pt}{3.5ex} 5.000.000 & 2.000[s] & 1.577[s] & 7.421[s] & 60,951.000[s] & 139,273.286[s] & 153,273.539[s] \\
  137. \hline
  138. \rule[-1ex]{0pt}{3.5ex} 10.000.000 & 2.400[s] & 3.236[s] & 18.365[s] & 243,804.000[s] & 557,093.1440[s] & 613,094.156[s] \\
  139. \hline
  140. \end{tabular}
  141. \end{center}
  142. \newpage
  143. \subsection{Gráfico}
  144. \begin{center}
  145. \includegraphics[width=0.96\textwidth,height=0.96\textheight,keepaspectratio]{graph.png}
  146. \end{center}
  147. \newpage
  148. \section{Conclusiones}
  149. Basados en los resultados obtenido podemos poner los algoritmos en orden de mas rápido a menos rápido en la siguiente forma:
  150. \begin{itemize}
  151. \setlength\itemsep{0.1em}
  152. \item Quick Sort
  153. \item Merge Sort
  154. \item Bitonic Sort
  155. \item Selection Sort
  156. \item Counting Sort
  157. \item Bubble Sort
  158. \end{itemize}
  159. Al final, resulta que el algoritmo de ordenamiento mas rápido de este trabajo resultó ser el Quick Sort. Mientras que por el otro lado el mas lento de los algoritmos fue el Bubble Sort. Esto se debe a el cómo ciertos algoritmos manejan los datos para ordenarlos es mas eficiente a mayor cantidad de n. También, los tiempos de ejecución estaban dentro de lo esperado dado la complejidad de los algoritmos previamente conocidas.
  160. \end{document}