2 minute read

3.2 Búsqueda binaria

96 TÉCNICAS DE DISEÑO DE ALGORITMOS

Tras el resultado obtenido en este problema podemos plantearnos qué ocurriría si partiésemos el vector en cuatro partes. ¿Volveríamos a obtener una mejora? ¿Y en cinco partes? ¿Existe un número óptimo de partes en las que dividir el vector? Aunque no entraremos en detalle para responder estas cuestiones, sí queremos dar una idea intuitiva de lo que ocurre en estos casos. En primer lugar, hemos visto que el tiempo de ejecución del método clásico es de la forma T2(n) = anlog2n + b, y el de MezclaTres puede expresarse como: T3(n) = cnlog3n + d = (c/log3)nlog2n + d, donde a, b, c y d son constantes. En general, el tiempo de ejecución del método basado en dividir el vector en k partes va a ser Tk(n) = sknlogkn + t = s(k/logk)nlog2n + d, siendo s y t constantes y en donde vamos a poder conseguir que el valor de s sea muy similar al de c por la estructura del algoritmo. La razón por la que se introduce la k como constante multiplicativa es debido a la función que ha de calcular el mínimo de los elementos del vector auxiliar b. Para el caso de Mezcla clásico es el mínimo de dos elementos; para MezclaTres han de considerarse tres elementos, y para “MezclaK” es necesario encontrar el mínimo de k elementos no necesariamente ordenados, procedimiento de orden de complejidad lineal –O(k)–. Esto nos lleva a que todos los métodos van a ser del mismo orden de complejidad. Sin embargo, las funciones Tk(n) son cada vez mayores conforme k crece, puesto que

Advertisement

lim k

k→∞ log2 k

En resumidas cuentas, aunque inicialmente T2(n) fuera mayor que T3(n) esto no va a ocurrir siempre, pues para valores grandes de k tenemos que Tk(n) < Tk+1(n). El punto donde se alcanza el mínimo de tal sucesión de funciones va a depender de la implementación que se realice del procedimiento general, pero si se sigue un esquema similar al que nosotros hemos implementado aquí, la constante s resulta ser del orden de ocho, alcanzándose el mínimo para k = 3. Entonces, ¿por qué no se enseña este método a los alumnos en vez del Mezcla clásico? La respuesta viene una vez más dada por la evaluación de la ganancia que se obtiene (en cuanto a tiempo de ejecución) frente a las desventajas de este nuevo método respecto a la dificultad y mantenimiento del código obtenido. La naturalidad y claridad del primero lo hacen preferible.

Solución al Problema 2.14. (☺) Calculando el número de operaciones elementales que realiza el algoritmo obtenemos la ecuación en recurrencia: T(n) = 22 + 3T(2n/3).

This article is from: