11.08.2023 Views

Algoritmos - CAP1

Complejidad de algoritmos

Complejidad de algoritmos

SHOW MORE
SHOW LESS

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”.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!