Analizar experimentalmente la complejidad temporal, para el caso promedio (vectores con valores al azar), de las 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 : Booleano 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, en las que interviene algún elemento del vector.
El algoritmo se ejecutará para diversos tamaños del vector,
obteniendo una tabla de valores de T en función de n (es
recomendable ejecutar el programa varias veces, 100 como mínimo, para cada
tamaño dado y calcular el valor medio de T(n) y su desviación
estándar).
Tras obtener estos datos, se probarán distintas funciones de cota,
f(n), hasta encontrar una que cumpla
, lo que será un indicio que el algoritmo pertenece a
.
La documentación que se debe aportar consistirá en:
Se dispone de un vector que almacena n puntos, p1..pn, ordenado por sus coordenadas horizontales, (pi.x <= pi+1.x), y se desea encontrar cual es el par de puntos que estén separados por una distancia mínima.
Se define la distancia entre dos puntos i y j del vector como
.
El problema consiste en encontrar los índices i y j que hacen
mínima esa distancia. Por supuesto, los índices deben ser distintos, y no
necesariamente contiguos. En el caso en que varios pares de puntos estuvieran separados
por la misma distancia mínima, cualquiera de ellos serviría como
solución.
Una solución obvia, de complejidad O(n2), es medir, para cada
punto, la distancia entre él y el resto de puntos del vector,
manteniendo la información del resultado menor. Encontrar e implementar una
solución menos costosa utilizando una estrategia divide y vencerás.
La documentación que se debe aportar consistirá en:
Desarrollar un programa que obtenga, para una determinada competición deportiva, la quiniela con mayor probabilidad de obtener un pleno y cuyo coste sea menor que uno dado.
Una quiniela consiste en realizar un pronóstico sobre el resultado de cada uno de n partidos. En cada partido se enfrentan dos equipos, uno de ellos juega en casa, y el resultado puede ser victoria, empate o derrota (siempre desde la perspectiva del equipo que juega en casa).
Disponemos de tres vectores, v1..vn, e1..en y d1..dn, donde los valores vi, ei, di, indican, respectivamente, la probabilidad de que el partido i acabe en victoria, empate o derrota. Por supuesto, se cumple que para todo i que vi+ei+di = 1.
Para simplificar el problema supondremos que hacer un pronóstico sobre un partido consiste en proporcionar un valor en el rango de 1 a 7, con el significado mostrado en la tabla siguiente:
Simples | Victoria | ||
Empate | |||
Derrota | |||
Dobles | Victoria o empate | ||
Victoria o derrota | |||
Empate o derrota | |||
Triples | Victoria, empate o derrota |
Se supondrá que el precio de una quiniela donde todos los pronósticos sean simples es de 1 euro. Se puede apreciar que cada pronóstico doble debe duplicar el precio de la quiniela, ya que escribir un pronóstico doble para el partido i equivale a presentar dos quinielas con el resto de pronósticos iguales y un pronóstico simple con cada uno de los dos casos pronosticados en el partido i. Igualmente, cada pronóstico triple debe triplicar el coste.
Por lo tanto, el coste de una quiniela con a pronósticos dobles y b pronósticos triples será de 2a·3b euros. Supondremos que el precio máximo que nos podemos permitir pagar por la quiniela son C euros.
La probabilidad de que tengamos un pleno en la quiniela (todos los pronósticos sean correctos) será igual al producto de las probabilidades de acertar cada pronóstico. El objetivo será encontrar la quiniela con mayor probabilidad de tener un pleno pero cuyo precio no supere el valor C.
Se deberá presentar la siguiente documentación:
Como parte opcional, se propone el adaptar el problema anterior a las características de la quiniela futbolística española.