Apartado 1 |
Analizar experimentalmente la complejidad temporal, para el caso promedio (vector con valores al azar), de dos variantes del algoritmo de ordenación por intercambio (ordenación burbuja) que se exponen a continuación:
Modulo Burbuja Entradas V: Vector[1..N] de TDato Salidas V: Vector[1..N] de TDato Variables I,J : Enteros; Cambio : Booleana Inicio I <- 1 Repetir Cambio <- Falso Para J <- N hasta I+1 incr 1 Si V[J-1] > V[J] entonces Intercambiar(V,J-1,J) Cambio <- Cierto Fin_Si Fin_Para I <- I + 1 Hasta_Que (I = N) O No Cambio Fin |
Modulo Burbuja_Peinada Entradas V: Vector[1..N] de TDato Salidas V: Vector[1..N] de TDato Variables I,D : Enteros; Inicio D <- Truncar(N/1.3) Repetir Para I <- 1 hasta N-D incr 1 Si V[I] > V[I+D] entonces Intercambiar(V,I,I+D) Fin_Si Fin_Para D <- Truncar(D/1.3) Hasta_Que D < 2 Burbuja(V) Fin |
El método de análisis consistirá en implementar los
algoritmos incluyendo instrucciones que cuenten el número de operaciones
ejecutadas, T(n), para diversos tamaños, n, del
vector. Tras obtener estos datos, se probarán distintas funciones de
cota, f(n), hasta encontrar una que cumpla
, lo que indica que el algoritmo pertenece a
.
Nota: Sólo es necesario contar aquellas operaciones en las que interviene un elemento del vector.
Parte opcional: Analizar el comportamiento del segundo algoritmo cuando se cambia el valor 1.3 por otro.
Mostrar información adicional sobre este apartado
Apartado 2 |
Se dispone de un vector que almacena n puntos, p1..pn, el cual se encuentra ordenado por las coordenadas x de los puntos (pi.x <= pi+1.x), y se desea encontrar cual es el par de puntos más cercano.
Se define la distancia entre los puntos i y j del vector
como
. El problema consiste en encontrar los índices
i y j que hacen mínima esa distincia. Por supuesto, los
índices deben ser distintos, y no necesariamente contiguos.
Una solución obvia, de complejidad O(n2), es medir, para cada punto, la distancia entre él y el resto de puntos del vector, quedándonos con la distancia menor. Encontrar e implementar una solución menos costosa utilizando una estrategia divide y vencerás.
Parte opcional: Analizar matemáticamente el orden de complejidad de la solución obtenida, aplicando suposiciones razonables sobre los datos de entrada (por ejemplo, que se encuentran distribuidos mas o menos uniformemente respecto a la coordenada x).
Cerrar información adicional sobre este apartado
Propuesta de resolución del problema:
Apartado 3 |
Dado un conjunto de n objetos, o1..on, con valores asociados a1..an (enteros positivos no nulos), el problema del reparto equitativo consiste en determinar si se puede dividir el conjunto en dos partes que valgan exactamente lo mismo, y en ese caso, decir a cual de las dos partes pertenece cada objeto.
De forma más rigurosa, el problema se puede definir como encontrar (o demostrar que no existe) un subconjunto, C, del conjunto original de objetos, A, que cumpla:
Parte opcional: Analizar experimentalmente (usando las mismas técnicas que en el primer apartado) la solución obtenida por backtracking.
Mostrar información adicional sobre éste apartado
Normas de entrega |