05.03.2015 Views

Introducción al Análisis Asintótico de Algoritmos

Introducción al Análisis Asintótico de Algoritmos

Introducción al Análisis Asintótico de Algoritmos

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

• Algoritmo: Conjunto <strong>de</strong> reglas para resolver un<br />

problema. Su ejecución requiere unos recursos.<br />

<br />

Memoria<br />

E/S<br />

0 ó más<br />

entradas<br />

<br />

1 ó más<br />

s<strong>al</strong>idas<br />

• Un <strong>al</strong>goritmo es mejor cuantos menos recursos<br />

consuma.<br />

• Otros criterios: facilidad <strong>de</strong> programarlo, corto,<br />

fácil <strong>de</strong> enten<strong>de</strong>r, otros<br />

Tema 2. Análisis Asintótico <strong>de</strong> <strong>Algoritmos</strong>.<br />

<br />

• Criterio : Maximizar la eficiencia.<br />

• Eficiencia: Relación entre los recursos<br />

consumidos y los resultados obtenidos.<br />

• Recursos consumidos:<br />

– Tiempo <strong>de</strong> ejecución.<br />

– Memoria princip<strong>al</strong>.<br />

– Entradas/s<strong>al</strong>idas a disco.<br />

• Resultados obtenidos:<br />

– Resolver un problema <strong>de</strong> forma exacta.<br />

– Resolverlo <strong>de</strong> forma aproximada.<br />

– Resolver <strong>al</strong>gunos casos...<br />

Tema 2. Análisis Asintótico <strong>de</strong> <strong>Algoritmos</strong>.


• Recursos consumidos.<br />

Ejemplo. ¿Cuántos recursos <strong>de</strong> tiempo y<br />

memoria consume el siguiente <strong>al</strong>goritmo sencillo?<br />

i 0<br />

a[n+1] x<br />

while a[i] = x do<br />

i:= i + 1;<br />

<br />

• Esto va a <strong>de</strong>pen<strong>de</strong>r <strong>de</strong> los v<strong>al</strong>ores <strong>de</strong> n y x, <strong>de</strong> lo<br />

que tenga el arreglo a, <strong>de</strong> los tipos <strong>de</strong> datos, <strong>de</strong> la<br />

máquina, <strong>de</strong>l compilador...<br />

Tema 2. Análisis Asintótico <strong>de</strong> <strong>Algoritmos</strong>.<br />

<br />

• En gener<strong>al</strong> los recursos <strong>de</strong>pen<strong>de</strong>n <strong>de</strong>:<br />

– Factores externos.<br />

• El computador, el lenguaje <strong>de</strong> programación y el compilador<br />

utilizado.<br />

• La implementación que haga el programador <strong>de</strong>l <strong>al</strong>goritmo. En<br />

particular, <strong>de</strong> las estructuras <strong>de</strong> datos utilizadas.<br />

– Tamaño <strong>de</strong> los datos <strong>de</strong> entrada.<br />

– Contenido <strong>de</strong> los datos <strong>de</strong> entrada.<br />

• Mejor caso. El contenido favorece una rápida ejecución.<br />

• Peor caso. La ejecución más lenta posible.<br />

• Caso promedio. Es la Media <strong>de</strong> todos los posibles contenidos.<br />

• Los factores externos no aportan ninguna información<br />

sobre el <strong>al</strong>goritmo.<br />

Tema 2. Análisis Asintótico <strong>de</strong> <strong>Algoritmos</strong>.


Para an<strong>al</strong>izar un <strong>al</strong>goritmo, nos <strong>de</strong>ben preocupar el<br />

tiempo <strong>de</strong> ejecución y la cantidad <strong>de</strong> memoria<br />

(espacio).<br />

Para cada problema <strong>de</strong>terminaremos un N, que<br />

representa su tamaño, y se estudiará éste en<br />

función a ese N.<br />

El concepto exacto que mi<strong>de</strong> a N, <strong>de</strong>pen<strong>de</strong> <strong>de</strong> la<br />

natur<strong>al</strong>eza <strong>de</strong>l problema.<br />

Para un vector, se suele utilizar N, como su longitud<br />

Tema 2. Análisis Asintótico <strong>de</strong> <strong>Algoritmos</strong>.<br />

<br />

Para una Matriz, se suele utilizar N, como el<br />

número <strong>de</strong> elementos que la conforman.<br />

Para un grafo, pue<strong>de</strong> ser el número <strong>de</strong> nodos.<br />

Para un archivo, se suele utilizar el número <strong>de</strong><br />

registros.<br />

Es imposible dar una regla gener<strong>al</strong>. El N, va a<br />

<strong>de</strong>pen<strong>de</strong>r <strong>de</strong>l problema<br />

Tema 2. Análisis Asintótico <strong>de</strong> <strong>Algoritmos</strong>.


La función que relaciona el tiempo <strong>de</strong> ejecución <strong>de</strong>l<br />

<strong>al</strong>goritmo con el número <strong>de</strong> datos la <strong>de</strong>nominaremos<br />

T(n), don<strong>de</strong> n, es el número <strong>de</strong> datos a procesar.<br />

Como se ha dicho, en las láminas previas, el análisis<br />

<strong>de</strong> <strong>al</strong>goritmos, busca una métrica objetiva para<br />

comparar <strong>al</strong>goritmos.<br />

Sean f y g <strong>al</strong>goritmos comparables entre sí y sean<br />

T f (n) y T g (n) sus complejida<strong>de</strong>s tempor<strong>al</strong>es<br />

respectivamente.<br />

Cómo pue<strong>de</strong>n compararse entre sí?<br />

Tema 2. Análisis Asintótico <strong>de</strong> <strong>Algoritmos</strong>.<br />

<br />

Cómo pue<strong>de</strong>n compararse entre sí?<br />

El criterio va a ser el comportamiento <strong>de</strong> T(n) cuando<br />

n es muy gran<strong>de</strong>. Es <strong>de</strong>cir,<br />

Lim n T(n)<br />

Las Notaciones Asintóticas, indican como crece T,<br />

para v<strong>al</strong>ores suficientemente gran<strong>de</strong>s, sin consi<strong>de</strong>rar<br />

constantes que <strong>de</strong>pen<strong>de</strong>n <strong>de</strong> factores externos.<br />

Lo que vamos a intentar, es i<strong>de</strong>ntificar “familias <strong>de</strong><br />

funciones” usando como criterio <strong>de</strong> agrupación su<br />

comportamiento asintótico.<br />

Tema 2. Análisis Asintótico <strong>de</strong> <strong>Algoritmos</strong>.


La Notación O(f(n)) <strong>de</strong>termina una cota superior <strong>de</strong>l<br />

tiempo <strong>de</strong> ejecución <strong>de</strong>l <strong>al</strong>goritmo, obviando<br />

constantes multiplicativas y haciéndolo, por tanto,<br />

in<strong>de</strong>pendiente <strong>de</strong> la implementación.<br />

El conjunto O(f(n)), <strong>de</strong> las funciones <strong>de</strong> or<strong>de</strong>n f(n), se<br />

<strong>de</strong>fine como:<br />

O(f(n))= { g: N R+ U {0} | c ∈ R+, no ∈ N ,<br />

t<strong>al</strong>es que para todo n no g(n) cf(n) }<br />

Tema 2. Análisis Asintótico <strong>de</strong> <strong>Algoritmos</strong>.<br />

<br />

O(f(n))= { g: N R+ U {0} | c ∈ R+, no ∈ N ,<br />

t<strong>al</strong>es que para todo n no g(n) cf(n) }<br />

Es <strong>de</strong>cir, O(f(n)) esta formado por aquellas funciones g(n)<br />

que crecen a un ritmo menor o igu<strong>al</strong> <strong>al</strong> <strong>de</strong> f(n). De las<br />

funciones “g” que forman este conjunto, se dice que están<br />

dominadas asintóticamente por f, en el sentido que para n<br />

suficientemente gran<strong>de</strong>, f(n) es una cota superior <strong>de</strong> g(n)<br />

Cada conjunto O(f(n)) <strong>de</strong>fine un or<strong>de</strong>n <strong>de</strong> complejidad y se<br />

suele elegir la función más sencilla <strong>de</strong>l conjunto para<br />

representarlo.<br />

Tema 2. Análisis Asintótico <strong>de</strong> <strong>Algoritmos</strong>.


R +<br />

O(f)<br />

c·f(n)<br />

N<br />

• O(f) es un conjunto <strong>de</strong> funciones, no una función.<br />

• Se estudia para v<strong>al</strong>ores <strong>de</strong> n sufic. gran<strong>de</strong>s<br />

Tema 2. Análisis Asintótico <strong>de</strong> <strong>Algoritmos</strong>.<br />

• Uso <strong>de</strong> los ór<strong>de</strong>nes <strong>de</strong> complejidad: dado un<br />

tiempo t(n), encontrar la función f más simple t<strong>al</strong><br />

que T∈ O(f), y que más se aproxime<br />

asintóticamente.<br />

Ejemplo. T(n) = 2n 2 + 6n + 2 t(n) ∈ O(n2)<br />

Tema 2. Análisis Asintótico <strong>de</strong> <strong>Algoritmos</strong>.


Ejemplo:<br />

Consi<strong>de</strong>re la función g(n) = 8n + 128, y suponga que se<br />

quiere mostrar que g(n) O(n 2 ). Según la <strong>de</strong>finición, se<br />

<strong>de</strong>be encontrar una constante<br />

re<strong>al</strong> positiva c y un número natur<strong>al</strong> n 0 t<strong>al</strong>es que para todo<br />

número natur<strong>al</strong> n n0 se verifique que g(n) cf(n)<br />

∈ ∈ <br />

!"#$%& ' ( <br />

Suponga que se selecciona c = 1. Se tiene entonces que:<br />

Tema 2. Análisis Asintótico <strong>de</strong> <strong>Algoritmos</strong>.<br />

g(n) c * f(n) 8n + 128 1 * n 2<br />

0 n2 - 8n - 128<br />

0 (n – 16) * ( n + 8 )<br />

Como V n ∈ N : n+8 > 0, se concluye que<br />

n-16 0. Por lo tanto, n0 = 16. Así que,<br />

para c = 1 y n0 = 16, g(n) c * f(n) .<br />

Luego, g(n) ∈ O(n 2 ).<br />

Tema 2. Análisis Asintótico <strong>de</strong> <strong>Algoritmos</strong>.


Proposición: Sean f, g, h : N ∈ R funciones arbitrarias <strong>de</strong> los<br />

números<br />

natur<strong>al</strong>es en los números re<strong>al</strong>es no negativos. La notación O-<br />

gran<strong>de</strong> verifica las siguientes propieda<strong>de</strong>s:<br />

Usaremos O(f) para <strong>de</strong>notar O(f(n))<br />

•Reflexividad: f ∈ O(f)<br />

•Transitividad: f ∈ O(g) ^ g ∈ O(h) f ∈ O(h)<br />

Tema 2. Análisis Asintótico <strong>de</strong> <strong>Algoritmos</strong>.<br />

<br />

Propieda<strong>de</strong>s: Sean f, g : N ∈ R dos funciones<br />

arbitrarias <strong>de</strong> los números natur<strong>al</strong>es en los números<br />

re<strong>al</strong>es no negativos. La notación O-gran<strong>de</strong> verifica las<br />

siguientes propieda<strong>de</strong>s:<br />

• λ∗O(f) = O(f)<br />

•Si > 0 entonces O(λ * f) = O(f)<br />

•O(f) + O(g) = O(max(f, g)) (Regla <strong>de</strong> la suma)<br />

•O(f) * O(g) = O(f * g) (Regla <strong>de</strong>l producto)<br />

•∀a,b > 1, O(log a n) = O(log b n)<br />

Tema 2. Análisis Asintótico <strong>de</strong> <strong>Algoritmos</strong>.


• O(1): complejidad constante<br />

• O(log n): complejidad logarítmica<br />

• O(n): complejidad line<strong>al</strong>.<br />

• O(n log n): aparece en <strong>al</strong>gunos <strong>al</strong>goritmos<br />

recursivos como la or<strong>de</strong>nación quicksort.<br />

• O(n 2 ): complejidad cuadrática. En <strong>al</strong>gunas<br />

recursiones y en bucles doblemente anidados.<br />

• O(n 3 ): complejidad cúbica.<br />

• O(n k ) (k>2): complejidad polinómica.<br />

• O(2 n ): complejidad exponenci<strong>al</strong><br />

• O(n!): complejidad factori<strong>al</strong>.<br />

Tema 2. Análisis Asintótico <strong>de</strong> <strong>Algoritmos</strong>.<br />

<br />

<br />

• Declaraciones: Las <strong>de</strong>claraciones <strong>de</strong> constantes, tipos,<br />

variables, procedimientos y funciones no se toman en<br />

cuenta en el análisis asintótico <strong>de</strong> un <strong>al</strong>goritmo.<br />

• Operaciones element<strong>al</strong>es: El tiempo <strong>de</strong> ejecución <strong>de</strong> una<br />

operación element<strong>al</strong> pue<strong>de</strong> tomarse como O(1).<br />

• Secuencias <strong>de</strong> instrucciones: El tiempo <strong>de</strong> ejecución <strong>de</strong><br />

una secuencia <strong>de</strong> instrucciones se <strong>de</strong>termina utilizando la<br />

regla <strong>de</strong> la suma<br />

Tema 2. Análisis Asintótico <strong>de</strong> <strong>Algoritmos</strong>.


• Condicion<strong>al</strong>es: El tiempo <strong>de</strong> ejecución <strong>de</strong> una proposición<br />

condicion<strong>al</strong>:<br />

if cond then<br />

S1<br />

else<br />

S2<br />

endif<br />

Es el tiempo necesario para ev<strong>al</strong>uar la condición (que<br />

gener<strong>al</strong>mente es O(1)) más el máximo entre el tiempo <strong>de</strong><br />

ejecución <strong>de</strong> la secuencia <strong>de</strong> proposiciones cuando la<br />

condición es verda<strong>de</strong>ra y el tiempo <strong>de</strong> ejecución <strong>de</strong> la<br />

secuencia <strong>de</strong> proposiciones cuando la condición es f<strong>al</strong>sa.<br />

Tema 2. Análisis Asintótico <strong>de</strong> <strong>Algoritmos</strong>.<br />

<br />

<br />

Ciclos: El tiempo <strong>de</strong> ejecución <strong>de</strong> un ciclo:<br />

while cond do<br />

{<br />

S<br />

}<br />

for k in [min .. max] do<br />

{<br />

S<br />

}<br />

Es la suma, sobre todas las iteraciones <strong>de</strong>l ciclo, <strong>de</strong>l<br />

tiempo <strong>de</strong> ejecución <strong>de</strong> las instrucciones que están en el<br />

interior <strong>de</strong>l ciclo y <strong>de</strong>l tiempo utilizado para ev<strong>al</strong>uar la<br />

condición <strong>de</strong> terminación (que gener<strong>al</strong>mente pue<strong>de</strong><br />

tomarse como O(1))<br />

Tema 2. Análisis Asintótico <strong>de</strong> <strong>Algoritmos</strong>.

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

Saved successfully!

Ooh no, something went wrong!