176 lines
5.2 KiB
TeX
176 lines
5.2 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áficos}
|
|
|
|
\newpage
|
|
\section{Conclusiones}
|
|
|
|
\end{document}
|
|
|