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