Professional Documents
Culture Documents
Respecto al uso eficiente de los recursos, éste suele medirse en función de dos
parámetros: el espacio, es decir, memoria que utiliza, y el tiempo, lo que tarda en
ejecutarse. Ambos representan los costes que supone encontrar la solución al problema
planteado mediante un algoritmo. Dichos parámetros van a servir además para comparar
algoritmos entre sí, permitiendo determinar el más adecuado de entre varios que
solucionan un mismo problema. En esta sección nos referiremos exclusivamente a la
eficiencia temporal.
El análisis a priori proporciona una medida teórica, que consiste en obtener una
función que acote (por arriba o por abajo) el tiempo de ejecución del algoritmo para
unos valores de entrada dados. Esta medida ofrece estimaciones del comportamiento de
los algoritmos de forma independiente del ordenador en donde serán implementados y
sin necesidad de ejecutarlos. La unidad de tiempo a la que debe hacer referencia esta
medida de eficiencia temporal no puede ser expresada en segundos o en otra unidad de
tiempo concreta, pues no existe un ordenador estándar al que puedan hacer referencia
todas las medidas. Esta medida de eficiencia temporal se define como una función del
tamaño o talla de la entrada.
Por ejemplo, la dimensión del vector a ordenar o el tamaño de las matrices a multiplicar.
En el caso de algoritmos que resuelvan determinado problema sobre grafos el tamaño de
la entrada podría ser el número de vértices o el número de aristas.
Definición 2.1.2. Se dice que un algoritmo tarda un tiempo del orden de T(n) si existen
una constante real c > 0 y una implementación I del algoritmo que tarda menos que
cT(n), para todo n tamaño de la entrada.
El caso mejor corresponde a la traza (secuencia de sentencias) del algoritmo que realiza
menos instrucciones. Análogamente, el caso peor corresponde a la traza del algoritmo
que realiza más instrucciones, lo cual nos asegura que al menos el algoritmo se
desempeñará de esa forma . Respecto al caso medio, corresponde a la traza del
algoritmo que realiza un número de instrucciones igual a la esperanza matemática de la
variable aleatoria definida por todas las posibles trazas del algoritmo para un tamaño de
la entrada dado, con las probabilidades de que éstas ocurran para esa entrada. Esta es la
medida más difícil de calcular pues debemos saber cómo están distribuidos los datos.
Por otra parte, sino conocemos la distribución de las entradas, entonces la mejor opción
es analizar el caso peor.
END
El caso mejor se produce cuando el grafo no es bipartido y los vértices 1, 2 y 3 están conectados
entre sí, pues entonces el algoritmo realiza sólo la operación del paso (1), las dos operaciones
del paso (2), las dos operaciones del paso (4) y las tres operaciones del paso (6), es decir que
T(n)=8.
El caso peor se produce o bien cuando el grafo es bipartido o bien cuando el grafo no es
bipartido pero la contradicción aparece al asignar la clase al último vértice. Calculemos T(n)
para el caso cuando el grafo es bipartido.
n i −1 n
T (n) = 3 + ∑ 2 + ∑ 2 + n = 3 + n + 2 ⋅ (n − 2) + 2∑ (i − 2)
i =3 j =2 i =3
T (n) = 3n − 1 + 2(n − 2) ⋅ (n − 1) / 2 = n 2 + 1
n log n n2 2n n!
2 1 4 4 2
8 3 64 256 40320
Como puede observarse los algoritmos cuya complejidad es descrita por una función
polinomial pueden ser ejecutados para entradas grandes en una cantidad de tiempo
razonable, mientras que los algoritmos exponenciales son de poca utilidad excepto para
entradas pequeñas