Proyecto para encontrar 2 puntos más cercano 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 4.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. \author{}
  2. \date{\today}
  3. \documentclass[12pt]{article}
  4. \usepackage[utf8]{inputenc} %\ This allows spanish tildes
  5. \usepackage[spanish]{babel}
  6. \usepackage{array}
  7. \usepackage{adjustbox}
  8. \usepackage{titling}
  9. \usepackage[left=2cm,right=2cm,top=2cm,bottom=2cm,a4paper]{geometry}
  10. \usepackage{amsmath}
  11. \title{Tarea 2: Encontrar el par de puntos más cercano}
  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{Brute Force}
  59. \lstinputlisting{pseudo/brute_force.txt}
  60. \newpage
  61. \subsection{Divide and Conquer}
  62. \lstinputlisting{pseudo/divide_and_conquer.txt}
  63. \newpage
  64. \section{Resultados}
  65. \subsection{Análisis temporal}
  66. \subsubsection{Brute Force}
  67. \underline{Caso Promedio:} $ \Theta(n log n)) $ \\
  68. Para el algoritmo de fuerza bruta el tiempo de respuesta es igual en todos los casos de $ n^2 $, esto se debe a que este donde este los puntos mas cercanos este recorrerá todo de igual forma. Esto es netamente debido a el cómo se programó las funciones con ciclos for anidados que son altamente costosos en tiempo.\bigskip
  69. \underline{Peor Caso:} $ O(n log n) $ \\
  70. El peor caso es similar al caso promedio.\bigskip
  71. \underline{Mejor Caso:} $ \Omega(n log n)$ \\
  72. El mejor caso es similar al caso promedio.\bigskip
  73. \subsubsection{Divide and Conquer}
  74. \underline{Caso Promedio:} $ \Theta(n log n)) $ \\
  75. Para el algoritmo de dividir y conquistar se repite lo del análisis anterior que es la misma complejidad en todos los casos, de nuevo producto de que tiene que recorrer todo el mapa de puntos para llegar a saber cuales son los mas cercanos. Aquí es $ n log(n) $, ya que este algoritmo divide el mapa para y compara las mitades separadamente lo cual es mucho mas eficiente que el caso anterior.\bigskip
  76. \underline{Peor Caso:} $ O(n log n) $ \\
  77. El peor caso es similar al caso promedio.\bigskip
  78. \underline{Mejor Caso:} $ \Omega(n log n)$ \\
  79. El mejor caso es similar al caso promedio.\bigskip
  80. \newpage
  81. \subsection{Datos}
  82. La siguiente tabla contiene los resultados de las pruebas de los 2 algoritmos medidos en segundos. Para las pruebas usábamos un computador que tiene 4 núcleos de 3.2GHz y 16GB de memoria RAM.
  83. \begin{center}
  84. \begin{tabular}{|c|c|c|}
  85. \hline
  86. \multicolumn{3}{|c|}{Algoritmos para encontrar los 2 puntos más cercano} \\
  87. \hline
  88. \rule[-1ex]{0pt}{3.5ex} & Brute Force & Divide and Conquer \\
  89. \hline
  90. \rule[-1ex]{0pt}{3.5ex} 1.000.000 & 15403.951[s] & 3[s] \\
  91. \hline
  92. \rule[-1ex]{0pt}{3.5ex} 5.000.000 & 372984[s] & 11.210[s] \\
  93. \hline
  94. \end{tabular}
  95. \end{center}
  96. \newpage
  97. \subsection{Gráfico}
  98. \begin{center}
  99. \includegraphics[width=0.96\textwidth,height=0.96\textheight,keepaspectratio]{graph.png}
  100. \end{center}
  101. \newpage
  102. \section{Conclusiones}
  103. Para el desarrollo de este trabajo se nos pidió comparar dos algoritmos que ambos buscaban la menor distancia entre dos puntos. El primero fue el de fuerza bruta el cual consistía en un algoritmo ingenuo el cual buscaba comparando con 2 ciclos for, realizaba lo pedido de una de las peores formas costando muy caro en cuanto a tiempo a medida que aumentaban los puntos. Por otro lado, el segundo utilizaba un método recursivo en el cual se dividia a la mitad y cada una era comparada por separado, siendo este el mejor. A cantidades bajas de puntos la diferencia entre tiempos no era tan grande, pero a medida que incrementaba la curva de brute force despegaba hacía arriba. Finalmente, podemos terminar este trabajo de investigación con que para un mismo algoritmo pese a haber varias formas de programar una solución hay algunas que son completamente intratables todo depende de la cantidad de los datos de entrada.
  104. \par
  105. Para encontrar el par de puntos más cercano la ecuación es\\$ d = \sqrt{(x_1 - x_2)^2 + (y_1 - y_2)^2} $
  106. \end{document}