Algoritmos - CAP1
Complejidad de algoritmos
Complejidad de algoritmos
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
6 TÉCNICAS DE DISEÑO DE ALGORITMOS
• El tiempo de ejecución de la sentencia “CASE C OF v1:S1|v2:S2|...|vn:Sn
END;” es T = T(C) + max{T(S 1 ),T(S 2 ),...,T(S n )}. Obsérvese que T(C) incluye el
tiempo de comparación con v 1 , v 2 ,..., v n .
• El tiempo de ejecución de la sentencia “IF C THEN S1 ELSE S2 END;” es
T = T(C) + max{T(S 1 ),T(S 2 )}.
• El tiempo de ejecución de un bucle de sentencias “WHILE C DO S END;” es
T = T(C) + (nº iteraciones)*(T(S) + T(C)). Obsérvese que tanto T(C) como T(S)
pueden variar en cada iteración, y por tanto habrá que tenerlo en cuenta para su
cálculo.
• Para calcular el tiempo de ejecución del resto de sentencias iterativas (FOR,
REPEAT, LOOP) basta expresarlas como un bucle WHILE. A modo de ejemplo,
el tiempo de ejecución del bucle:
FOR i:=1 TO n DO
S
END;
puede ser calculado a partir del bucle equivalente:
i:=1;
WHILE i<=n DO
S; INC(i)
END;
• El tiempo de ejecución de una llamada a un procedimiento o función
F(P 1 , P 2 ,..., P n ) es 1 (por la llamada), más el tiempo de evaluación de los
parámetros P 1 , P 2 ,..., P n , más el tiempo que tarde en ejecutarse F, esto es,
T = 1 + T(P 1 ) + T(P 2 ) + ... + T(P n ) + T(F). No contabilizamos la copia de los
argumentos a la pila de ejecución, salvo que se trate de estructuras complejas
(registros o vectores) que se pasan por valor. En este caso contabilizaremos
tantas OE como valores simples contenga la estructura. El paso de parámetros
por referencia, por tratarse simplemente de punteros, no contabiliza tampoco.
• El tiempo de ejecución de las llamadas a procedimientos recursivos va a dar
lugar a ecuaciones en recurrencia, que veremos posteriormente.
• También es necesario tener en cuenta, cuando el compilador las incorpore, las
optimizaciones del código y la forma de evaluación de las expresiones, que
pueden ocasionar “cortocircuitos” o realizarse de forma “perezosa” (lazy). En el
presente trabajo supondremos que no se realizan optimizaciones, que existe el
cortocircuito y que no existe evaluación perezosa.
1.3 COTAS DE COMPLEJIDAD. MEDIDAS ASINTÓTICAS
Una vez vista la forma de calcular el tiempo de ejecución T de un algoritmo,
nuestro propósito es intentar clasificar dichas funciones de forma que podamos
compararlas. Para ello, vamos a definir clases de equivalencia, correspondientes a
las funciones que “crecen de la misma forma”.