From 6882ea967d208a0dec054496ff675b28142234df Mon Sep 17 00:00:00 2001 From: Rodolfo Cuevas Date: Fri, 14 Dec 2018 18:57:15 -0300 Subject: [PATCH 01/12] avance inf y bruteforce pseu --- doc/Informe.tex | 4 ++-- doc/pseudo_bruteforce | 24 ++++++++++++++++++++++++ 2 files changed, 26 insertions(+), 2 deletions(-) create mode 100644 doc/pseudo_bruteforce diff --git a/doc/Informe.tex b/doc/Informe.tex index 15046d9..6bf90bd 100644 --- a/doc/Informe.tex +++ b/doc/Informe.tex @@ -108,9 +108,9 @@ La siguiente tabla contiene los resultados de las pruebas de los 2 algoritmos me \hline \rule[-1ex]{0pt}{3.5ex} & Brute Force & Divide and Conquer \\ \hline - \rule[-1ex]{0pt}{3.5ex} 1.000.000 & 0[s] & 0[s] \\ + \rule[-1ex]{0pt}{3.5ex} 1.000.000 & 15403.951[s] & 3[s] \\ \hline - \rule[-1ex]{0pt}{3.5ex} 5.000.000 & 0[s] & 0[s] \\ + \rule[-1ex]{0pt}{3.5ex} 5.000.000 & 372984[s] & 11.210[s] \\ \hline \end{tabular} \end{center} diff --git a/doc/pseudo_bruteforce b/doc/pseudo_bruteforce new file mode 100644 index 0000000..66ba871 --- /dev/null +++ b/doc/pseudo_bruteforce @@ -0,0 +1,24 @@ +entrada: point_t = dirección de memoria de points + n = numero de + *minimum_dist = dirección de memoria para la distancia minima + +salida: + +point_t * funcion brute_force(inicio point_t *points, inicio n, inicio *minimum_dist){ + + point_t *closest_pair = espacio de memoria igual a el doble de point_t + inicio i + inicio j + inicio dist + + ciclo(inicio i = 0 hasta i < n con paso i++){ + ciclo (inicio j = i + 1 hasta j < n; j++){ + si((dist = funcion distance(punto i, punto j)) < *minimum_dist){ + *minimum_dist = dist + par_mas_cercano[0] = punto i + par_mas_cercano[1] = punto j + + } + } + } +} \ No newline at end of file -- 2.30.2 From f5797ac0b80ad1ed11ed392738ec128dc4b9de3a Mon Sep 17 00:00:00 2001 From: Chris Cromer Date: Fri, 14 Dec 2018 19:08:48 -0300 Subject: [PATCH 02/12] include brute force --- doc/Informe.tex | 1 + doc/{pseudo_bruteforce => pseudo/brute_force.txt} | 0 2 files changed, 1 insertion(+) rename doc/{pseudo_bruteforce => pseudo/brute_force.txt} (100%) diff --git a/doc/Informe.tex b/doc/Informe.tex index 6bf90bd..20a1e36 100644 --- a/doc/Informe.tex +++ b/doc/Informe.tex @@ -70,6 +70,7 @@ Xavier Canales \pagenumbering{arabic} \section{Pseudo código} \subsection{Brute Force} +\lstinputlisting{pseudo/brute_force.txt} \newpage \subsection{Divide and Conquer} diff --git a/doc/pseudo_bruteforce b/doc/pseudo/brute_force.txt similarity index 100% rename from doc/pseudo_bruteforce rename to doc/pseudo/brute_force.txt -- 2.30.2 From d9ebc2088679b3d6089e4b7d3057ae6c340189c5 Mon Sep 17 00:00:00 2001 From: Chris Cromer Date: Fri, 14 Dec 2018 19:38:53 -0300 Subject: [PATCH 03/12] graph --- doc/Informe.tex | 4 ++++ doc/graph.png | Bin 0 -> 36934 bytes 2 files changed, 4 insertions(+) create mode 100644 doc/graph.png diff --git a/doc/Informe.tex b/doc/Informe.tex index 20a1e36..c852cbf 100644 --- a/doc/Informe.tex +++ b/doc/Informe.tex @@ -119,6 +119,10 @@ La siguiente tabla contiene los resultados de las pruebas de los 2 algoritmos me \newpage \subsection{Gráfico} +\begin{center} + \includegraphics[width=0.96\textwidth,height=0.96\textheight,keepaspectratio]{graph.png} +\end{center} + \newpage \section{Conclusiones} 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} $ diff --git a/doc/graph.png b/doc/graph.png new file mode 100644 index 0000000000000000000000000000000000000000..2875d81ac2f604acc262edee72eb6252733f7ffa GIT binary patch literal 36934 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 NT3kV_NJQWFe*uH89Vq|+ literal 0 HcmV?d00001 -- 2.30.2 From aaf16efdaa8856a8bdce22e95370da3443cc8092 Mon Sep 17 00:00:00 2001 From: Chris Cromer Date: Fri, 14 Dec 2018 20:04:30 -0300 Subject: [PATCH 04/12] fix style and make pseudo code --- doc/pseudo/divide_and_conquer.txt | 84 +++++++++++++++++++++++++++++++ src/divide_and_conquer.c | 8 +-- 2 files changed, 89 insertions(+), 3 deletions(-) create mode 100644 doc/pseudo/divide_and_conquer.txt diff --git a/doc/pseudo/divide_and_conquer.txt b/doc/pseudo/divide_and_conquer.txt new file mode 100644 index 0000000..39f8a4d --- /dev/null +++ b/doc/pseudo/divide_and_conquer.txt @@ -0,0 +1,84 @@ +entrada: array: arreglo de n puntos; n: tamaño del arreglo +salida: los dos puntos mas cercanos con su distancia + +funcion divide_and_conquer_run(puntos_x, nx, puntos_y, ny) + si nx <= 4 then + par_mas_cerca2 = brute_force(puntos_x, nx, d) + par_mas_cerca[0] = par_mas_cerca2[0] + par_mas_cerca[1] = par_mas_cerca2[1] + return d + fin si + + medio = puntos_x[nx / 2].x; + + izquerda = -1 + derecha = ny + para i = 0 mientras que i < ny hacer + si puntos_y[i].x < medio entonces + puntos_y2[++izquerda] = puntos_y[i] + sino + puntos_y2[--derecha] = puntos_y[i] + fin si + fin para + + para i = ny - 1 mientras que derecha < i hacer + par_mas_cerca2[0] = puntos_y2[derecha] + puntos_y2[derecha] = puntos_y2[i] + puntos_y2[i] = par_mas_cerca2[0] + fin para + + min_d = divide_and_conquer_run(puntos_x, nx / 2, puntos_y2, izquerda + 1) + d = divide_and_conquer_run(puntos_x + nx / 2, nx - nx / 2, puntos_y2 + izquerda + 1, ny - izquerda - 1) + + si d < min_d entonces + min_d = d + par_mas_cerca[0] = par_mas_cerca2[0] + par_mas_cerca[1] = par_mas_cerca2[1] + fin si + d = sqrt(min_d) + + izquerda = -1 + derecha = ny + para i = 0 mientras que i < ny hacer + x = puntos_y[i].x - medio + si x <= -d o x >= d entonces + continuar + fin si + si x < 0 entonces + puntos_y2[++izquerda] = puntos_y[i] + sino + puntos_y2[--derecha] = puntos_y[i] + fin si + fin para + + mientras que izquerda >= 0 hacer + x0 = puntos_y2[izquerda].y + d + + mientras que derecha < ny y puntos_y2[derecha].y > x0 hacer + derecha = dercha + 1 + fin mientras + si derecha >= ny entonces + romper + fin si + + x1 = puntos_y2[izquerda].y - d + para i = derecha mientras que i < ny y puntos_y2[i].y > x1 hacer + si distance(puntos_y2[izquerda], puntos_y2[i])) < min_d entonces + min_d = x + par_mas_cerca[0] = puntos_y2[izquerda] + par_mas_cerca[1] = puntos_y2[i] + fin si + fin para + izquerda = izquerda - 1 + fin mientras + return min_d +fin funcion + +funcion divide_and_conquer(puntos, n) { + puntos_x = puntos + puntos_y = puntos + sort(puntos_x, n) + sort(puntos_y, n) + distancia_minimo y par_mas_cerca = divide_and_conquer_run(puntos_x, n, puntos_y, n) + return par_mas_cerca y distancia_minimo +fin funcion diff --git a/src/divide_and_conquer.c b/src/divide_and_conquer.c index 9cb11e4..e37a928 100644 --- a/src/divide_and_conquer.c +++ b/src/divide_and_conquer.c @@ -98,7 +98,7 @@ double divide_and_conquer_run(point_t *points_x, unsigned int nx, point_t *point points_y2[++left] = points_y[i]; } else { - points_y2[--right]= points_y[i]; + points_y2[--right] = points_y[i]; } } @@ -119,7 +119,8 @@ double divide_and_conquer_run(point_t *points_x, unsigned int nx, point_t *point d = sqrt(min_d); free(closest_pair2); - left = -1; right = ny; + left = -1; + right = ny; for (i = 0; i < ny; i++) { x = points_y[i].x - mid; if (x <= -d || x >= d) { @@ -144,12 +145,13 @@ double divide_and_conquer_run(point_t *points_x, unsigned int nx, point_t *point } x1 = points_y2[left].y - d; - for (i = right; i < ny && points_y2[i].y > x1; i++) + for (i = right; i < ny && points_y2[i].y > x1; i++) { if ((x = distance(points_y2[left], points_y2[i])) < min_d) { min_d = x; closest_pair[0] = points_y2[left]; closest_pair[1] = points_y2[i]; } + } left--; } -- 2.30.2 From 1a59760c43be5b0975e3fea62674c0cfb686732b Mon Sep 17 00:00:00 2001 From: Chris Cromer Date: Fri, 14 Dec 2018 20:05:31 -0300 Subject: [PATCH 05/12] add divide and conquer code to latex --- doc/Informe.tex | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/Informe.tex b/doc/Informe.tex index c852cbf..8fe7cbe 100644 --- a/doc/Informe.tex +++ b/doc/Informe.tex @@ -74,6 +74,7 @@ Xavier Canales \newpage \subsection{Divide and Conquer} +\lstinputlisting{pseudo/divide_and_conquer.txt} \newpage \section{Resultados} -- 2.30.2 From 1a7f9cd1ab7bc78872ddc075dd144d5424b706d7 Mon Sep 17 00:00:00 2001 From: Chris Cromer Date: Fri, 14 Dec 2018 20:09:09 -0300 Subject: [PATCH 06/12] make brute force prettier --- doc/pseudo/brute_force.txt | 33 ++++++++++++--------------------- 1 file changed, 12 insertions(+), 21 deletions(-) diff --git a/doc/pseudo/brute_force.txt b/doc/pseudo/brute_force.txt index 66ba871..e03f6e8 100644 --- a/doc/pseudo/brute_force.txt +++ b/doc/pseudo/brute_force.txt @@ -1,24 +1,15 @@ -entrada: point_t = dirección de memoria de points - n = numero de - *minimum_dist = dirección de memoria para la distancia minima - -salida: - -point_t * funcion brute_force(inicio point_t *points, inicio n, inicio *minimum_dist){ - - point_t *closest_pair = espacio de memoria igual a el doble de point_t - inicio i - inicio j - inicio dist - - ciclo(inicio i = 0 hasta i < n con paso i++){ - ciclo (inicio j = i + 1 hasta j < n; j++){ - si((dist = funcion distance(punto i, punto j)) < *minimum_dist){ - *minimum_dist = dist - par_mas_cercano[0] = punto i - par_mas_cercano[1] = punto j +entrada: array: arreglo de n puntos; n: tamaño del arreglo +salida: los dos puntos mas cercanos con su distancia +funcion brute_force(points, n) { + para i = 0 mientras que i < n - 1 hacer + para j = i + 1 mientras que j < n hacer + si distance(points[i], points[j]) < distancia_minimo entonces + distancia_minimo = distancia + closest_pair[0] = points[i] + closest_pair[1] = points[j] } } - } -} \ No newline at end of file + } + return par_mas_cerca y distancia_minimo +fin funcion -- 2.30.2 From e0ada468fa7678a9ff5b432f1e4cdd0db183e515 Mon Sep 17 00:00:00 2001 From: Rodolfo Cuevas Date: Fri, 14 Dec 2018 20:20:59 -0300 Subject: [PATCH 07/12] analisis_temporal --- doc/Informe.tex | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/doc/Informe.tex b/doc/Informe.tex index 20a1e36..6ba6bae 100644 --- a/doc/Informe.tex +++ b/doc/Informe.tex @@ -81,22 +81,31 @@ Xavier Canales \subsection{Análisis temporal} \subsubsection{Brute Force} \underline{Caso Promedio:} $ \Theta(n log n)) $ \\ - \bigskip + Para el algoritmo de fuerza bruta el tiempo de respuesta es igual en todos los casos de n log n, 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 + \underline{Peor Caso:} $ O(n log n) $ \\ + el peor caso es similar al caso promedio \bigskip + \underline{Mejor Caso:} $ \Omega(n log n)$ \\ + el mejor caso es similar al caso promedio \bigskip + \subsubsection{Divide and Conquer} \underline{Caso Promedio:} $ \Theta(n log n)) $ \\ +Para el algoritmo de dividir y conquistar se repite lo del analisis 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 \underline{Peor Caso:} $ O(n log n) $ \\ +el peor caso es similar al caso promedio \bigskip \underline{Mejor Caso:} $ \Omega(n log n)$ \\ +el mejor caso es similar al caso promedio \bigskip \newpage @@ -111,7 +120,7 @@ La siguiente tabla contiene los resultados de las pruebas de los 2 algoritmos me \hline \rule[-1ex]{0pt}{3.5ex} 1.000.000 & 15403.951[s] & 3[s] \\ \hline - \rule[-1ex]{0pt}{3.5ex} 5.000.000 & 372984[s] & 11.210[s] \\ + \rule[-1ex]{0pt}{3.5ex} 5.000.000 & 372984[s] & 11.210[s] \\ \hline \end{tabular} \end{center} -- 2.30.2 From aeb59bcd0aeae5c24958982855b25e7625ebd7a4 Mon Sep 17 00:00:00 2001 From: Chris Cromer Date: Fri, 14 Dec 2018 20:28:04 -0300 Subject: [PATCH 08/12] fix typos --- doc/Informe.tex | 23 +++++++---------------- 1 file changed, 7 insertions(+), 16 deletions(-) diff --git a/doc/Informe.tex b/doc/Informe.tex index 5d3124a..00946f3 100644 --- a/doc/Informe.tex +++ b/doc/Informe.tex @@ -82,32 +82,23 @@ Xavier Canales \subsection{Análisis temporal} \subsubsection{Brute Force} \underline{Caso Promedio:} $ \Theta(n log n)) $ \\ - Para el algoritmo de fuerza bruta el tiempo de respuesta es igual en todos los casos de n log n, 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 - +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 \underline{Peor Caso:} $ O(n log n) $ \\ - el peor caso es similar al caso promedio - \bigskip - +El peor caso es similar al caso promedio.\bigskip \underline{Mejor Caso:} $ \Omega(n log n)$ \\ - el mejor caso es similar al caso promedio - \bigskip - +El mejor caso es similar al caso promedio.\bigskip \subsubsection{Divide and Conquer} \underline{Caso Promedio:} $ \Theta(n log n)) $ \\ -Para el algoritmo de dividir y conquistar se repite lo del analisis 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 +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 \underline{Peor Caso:} $ O(n log n) $ \\ -el peor caso es similar al caso promedio -\bigskip +El peor caso es similar al caso promedio.\bigskip \underline{Mejor Caso:} $ \Omega(n log n)$ \\ -el mejor caso es similar al caso promedio -\bigskip +El mejor caso es similar al caso promedio.\bigskip \newpage \subsection{Datos} @@ -121,7 +112,7 @@ La siguiente tabla contiene los resultados de las pruebas de los 2 algoritmos me \hline \rule[-1ex]{0pt}{3.5ex} 1.000.000 & 15403.951[s] & 3[s] \\ \hline - \rule[-1ex]{0pt}{3.5ex} 5.000.000 & 372984[s] & 11.210[s] \\ + \rule[-1ex]{0pt}{3.5ex} 5.000.000 & 372984[s] & 11.210[s] \\ \hline \end{tabular} \end{center} -- 2.30.2 From 079d431905f4776c9c522f4765fa2e63c79735a7 Mon Sep 17 00:00:00 2001 From: Chris Cromer Date: Fri, 14 Dec 2018 20:29:29 -0300 Subject: [PATCH 09/12] remove space --- doc/Informe.tex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/Informe.tex b/doc/Informe.tex index 00946f3..a3c0c67 100644 --- a/doc/Informe.tex +++ b/doc/Informe.tex @@ -82,7 +82,7 @@ Xavier Canales \subsection{Análisis temporal} \subsubsection{Brute Force} \underline{Caso Promedio:} $ \Theta(n log n)) $ \\ -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 +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 \underline{Peor Caso:} $ O(n log n) $ \\ El peor caso es similar al caso promedio.\bigskip -- 2.30.2 From e114151b8730328f406aa1f28d4acbd23ca53a68 Mon Sep 17 00:00:00 2001 From: Chris Cromer Date: Fri, 14 Dec 2018 20:32:04 -0300 Subject: [PATCH 10/12] fix minor details in psuedo code --- doc/pseudo/brute_force.txt | 22 ++--- doc/pseudo/divide_and_conquer.txt | 136 +++++++++++++++--------------- 2 files changed, 79 insertions(+), 79 deletions(-) diff --git a/doc/pseudo/brute_force.txt b/doc/pseudo/brute_force.txt index e03f6e8..4bd6281 100644 --- a/doc/pseudo/brute_force.txt +++ b/doc/pseudo/brute_force.txt @@ -1,15 +1,15 @@ entrada: array: arreglo de n puntos; n: tamaño del arreglo salida: los dos puntos mas cercanos con su distancia -funcion brute_force(points, n) { - para i = 0 mientras que i < n - 1 hacer - para j = i + 1 mientras que j < n hacer - si distance(points[i], points[j]) < distancia_minimo entonces - distancia_minimo = distancia - closest_pair[0] = points[i] - closest_pair[1] = points[j] - } - } - } - return par_mas_cerca y distancia_minimo +funcion brute_force(points, n) + para i = 0 mientras que i < n - 1 hacer + para j = i + 1 mientras que j < n hacer + si distance(points[i], points[j]) < distancia_minimo entonces + distancia_minimo = distancia + closest_pair[0] = points[i] + closest_pair[1] = points[j] + fin si + fin para + fin para + return par_mas_cerca y distancia_minimo fin funcion diff --git a/doc/pseudo/divide_and_conquer.txt b/doc/pseudo/divide_and_conquer.txt index 39f8a4d..a3faf76 100644 --- a/doc/pseudo/divide_and_conquer.txt +++ b/doc/pseudo/divide_and_conquer.txt @@ -2,83 +2,83 @@ entrada: array: arreglo de n puntos; n: tamaño del arreglo salida: los dos puntos mas cercanos con su distancia funcion divide_and_conquer_run(puntos_x, nx, puntos_y, ny) - si nx <= 4 then - par_mas_cerca2 = brute_force(puntos_x, nx, d) - par_mas_cerca[0] = par_mas_cerca2[0] - par_mas_cerca[1] = par_mas_cerca2[1] - return d - fin si + si nx <= 4 then + par_mas_cerca2 = brute_force(puntos_x, nx, d) + par_mas_cerca[0] = par_mas_cerca2[0] + par_mas_cerca[1] = par_mas_cerca2[1] + return d + fin si - medio = puntos_x[nx / 2].x; + medio = puntos_x[nx / 2].x; - izquerda = -1 - derecha = ny - para i = 0 mientras que i < ny hacer - si puntos_y[i].x < medio entonces - puntos_y2[++izquerda] = puntos_y[i] - sino - puntos_y2[--derecha] = puntos_y[i] - fin si - fin para + izquerda = -1 + derecha = ny + para i = 0 mientras que i < ny hacer + si puntos_y[i].x < medio entonces + puntos_y2[++izquerda] = puntos_y[i] + sino + puntos_y2[--derecha] = puntos_y[i] + fin si + fin para - para i = ny - 1 mientras que derecha < i hacer - par_mas_cerca2[0] = puntos_y2[derecha] - puntos_y2[derecha] = puntos_y2[i] - puntos_y2[i] = par_mas_cerca2[0] - fin para + para i = ny - 1 mientras que derecha < i hacer + par_mas_cerca2[0] = puntos_y2[derecha] + puntos_y2[derecha] = puntos_y2[i] + puntos_y2[i] = par_mas_cerca2[0] + fin para - min_d = divide_and_conquer_run(puntos_x, nx / 2, puntos_y2, izquerda + 1) - d = divide_and_conquer_run(puntos_x + nx / 2, nx - nx / 2, puntos_y2 + izquerda + 1, ny - izquerda - 1) + min_d = divide_and_conquer_run(puntos_x, nx / 2, puntos_y2, izquerda + 1) + d = divide_and_conquer_run(puntos_x + nx / 2, nx - nx / 2, puntos_y2 + izquerda + 1, ny - izquerda - 1) - si d < min_d entonces - min_d = d - par_mas_cerca[0] = par_mas_cerca2[0] - par_mas_cerca[1] = par_mas_cerca2[1] - fin si - d = sqrt(min_d) + si d < min_d entonces + min_d = d + par_mas_cerca[0] = par_mas_cerca2[0] + par_mas_cerca[1] = par_mas_cerca2[1] + fin si + d = sqrt(min_d) - izquerda = -1 - derecha = ny - para i = 0 mientras que i < ny hacer - x = puntos_y[i].x - medio - si x <= -d o x >= d entonces - continuar - fin si - si x < 0 entonces - puntos_y2[++izquerda] = puntos_y[i] - sino - puntos_y2[--derecha] = puntos_y[i] - fin si - fin para + izquerda = -1 + derecha = ny + para i = 0 mientras que i < ny hacer + x = puntos_y[i].x - medio + si x <= -d o x >= d entonces + continuar + fin si + si x < 0 entonces + puntos_y2[++izquerda] = puntos_y[i] + sino + puntos_y2[--derecha] = puntos_y[i] + fin si + fin para - mientras que izquerda >= 0 hacer - x0 = puntos_y2[izquerda].y + d + mientras que izquerda >= 0 hacer + x0 = puntos_y2[izquerda].y + d - mientras que derecha < ny y puntos_y2[derecha].y > x0 hacer - derecha = dercha + 1 - fin mientras - si derecha >= ny entonces - romper - fin si + mientras que derecha < ny y puntos_y2[derecha].y > x0 hacer + derecha = dercha + 1 + fin mientras + si derecha >= ny entonces + romper + fin si - x1 = puntos_y2[izquerda].y - d - para i = derecha mientras que i < ny y puntos_y2[i].y > x1 hacer - si distance(puntos_y2[izquerda], puntos_y2[i])) < min_d entonces - min_d = x - par_mas_cerca[0] = puntos_y2[izquerda] - par_mas_cerca[1] = puntos_y2[i] - fin si - fin para - izquerda = izquerda - 1 - fin mientras - return min_d + x1 = puntos_y2[izquerda].y - d + para i = derecha mientras que i < ny y puntos_y2[i].y > x1 hacer + si distance(puntos_y2[izquerda], puntos_y2[i])) < min_d entonces + min_d = x + par_mas_cerca[0] = puntos_y2[izquerda] + par_mas_cerca[1] = puntos_y2[i] + fin si + fin para + izquerda = izquerda - 1 + fin mientras + return min_d fin funcion -funcion divide_and_conquer(puntos, n) { - puntos_x = puntos - puntos_y = puntos - sort(puntos_x, n) - sort(puntos_y, n) - distancia_minimo y par_mas_cerca = divide_and_conquer_run(puntos_x, n, puntos_y, n) - return par_mas_cerca y distancia_minimo +funcion divide_and_conquer(puntos, n) + puntos_x = puntos + puntos_y = puntos + sort(puntos_x, n) + sort(puntos_y, n) + distancia_minimo y par_mas_cerca = divide_and_conquer_run(puntos_x, n, puntos_y, n) + return par_mas_cerca y distancia_minimo fin funcion -- 2.30.2 From 91034f5f4d1942f1ed6be47505fbabe1e226cb9c Mon Sep 17 00:00:00 2001 From: Rodolfo Cuevas Date: Fri, 14 Dec 2018 20:42:14 -0300 Subject: [PATCH 11/12] conclusion, corregible --- doc/Informe.tex | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/Informe.tex b/doc/Informe.tex index 5d3124a..84a69b1 100644 --- a/doc/Informe.tex +++ b/doc/Informe.tex @@ -135,6 +135,7 @@ La siguiente tabla contiene los resultados de las pruebas de los 2 algoritmos me \newpage \section{Conclusiones} +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. 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} $ \end{document} -- 2.30.2 From 915908d137e492a1a6aa10e834a9fcee40621d1d Mon Sep 17 00:00:00 2001 From: Chris Cromer Date: Fri, 14 Dec 2018 20:52:11 -0300 Subject: [PATCH 12/12] finishing touches --- doc/Informe.tex | 1 + doc/graph.png | Bin 36934 -> 31022 bytes 2 files changed, 1 insertion(+) diff --git a/doc/Informe.tex b/doc/Informe.tex index f5bec63..675c2b5 100644 --- a/doc/Informe.tex +++ b/doc/Informe.tex @@ -127,6 +127,7 @@ La siguiente tabla contiene los resultados de las pruebas de los 2 algoritmos me \newpage \section{Conclusiones} 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. +\par 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} $ \end{document} diff --git a/doc/graph.png b/doc/graph.png index 2875d81ac2f604acc262edee72eb6252733f7ffa..59cbcad23a10fc71780ac1fa28856db4491ae468 100644 GIT binary patch literal 31022 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 T%!+gk3jQf8T$Rt0!}$FV9~yh+ literal 36934 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 NT3kV_NJQWFe*uH89Vq|+ -- 2.30.2