08.05.2013 Views

Unidad II Fundamentos del Análisis de Algoritmos

Unidad II Fundamentos del Análisis de Algoritmos

Unidad II Fundamentos del Análisis 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.

<strong>Algoritmos</strong> y Estructuras <strong>de</strong> Datos <strong>Unidad</strong> <strong>II</strong> <strong>Fundamentos</strong> <strong><strong>de</strong>l</strong> <strong>Análisis</strong> <strong>de</strong> <strong>Algoritmos</strong><br />

En vez <strong>de</strong> <strong>de</strong>terminar el tiempo exacto <strong>de</strong> ejecución <strong>de</strong> cada operación primitiva, sólo se contarán<br />

cuántas operaciones primitivas se ejecutan y esta cantidad se usará como estimado, en alto nivel, <strong><strong>de</strong>l</strong><br />

tiempo <strong>de</strong> ejecución <strong><strong>de</strong>l</strong> algoritmo.<br />

En un análisis <strong>de</strong> algoritmos es útil enfocarse en la tasa <strong>de</strong> crecimiento <strong><strong>de</strong>l</strong> tiempo <strong>de</strong> ejecución, en<br />

función <strong><strong>de</strong>l</strong> tamaño n <strong>de</strong> la entrada, adoptando un método <strong>de</strong> panorámica y no <strong>de</strong>tenerse en los<br />

pequeños <strong>de</strong>talles. Se formaliza este método <strong>de</strong> analizar estructuras <strong>de</strong> datos y algoritmos usando una<br />

notación matemática para funciones, que no tiene en cuenta a los factores constantes.<br />

Funciones <strong>de</strong> Crecimiento Típicas<br />

C Constante La mayoría <strong>de</strong> las instrucciones se ejecutan una o cuando mucho unas<br />

cuantas veces. Si todas las instrucciones <strong>de</strong> un programa tienen esta<br />

propiedad, <strong>de</strong>cimos que el tiempo <strong>de</strong> ejecución <strong><strong>de</strong>l</strong> programa es constante.<br />

Esta función <strong>de</strong> crecimiento, es <strong>de</strong>seable, pero difícil <strong>de</strong> conseguir<br />

log N Logarítmicas Cuando el tiempo <strong>de</strong> ejecución <strong>de</strong> un programa es logarítmico el programa es<br />

ligeramente más rápido que el crecimiento <strong>de</strong> N. Esta función <strong>de</strong> crecimiento<br />

se presenta en programas que solucionan un problema transformándolo en<br />

una serie <strong>de</strong> pequeños problemas, esto es, divi<strong>de</strong>n el tamaño <strong><strong>de</strong>l</strong> problema en<br />

una fracción constante en cada iteración. Para nuestro interés<br />

consi<strong>de</strong>raremos el tiempo <strong>de</strong> ejecución menor al <strong>de</strong> una constante gran<strong>de</strong>. La<br />

base <strong><strong>de</strong>l</strong> logaritmo cambia la constante, pero no por mucho, por ejemplo,<br />

cuando N=1000, log10N=3 y log2N=9.96; cuando N=1000000 log10N=6 y<br />

log2N=19.93. Se observa que cada que N se duplica, el log N se incrementa<br />

en una constante, pero no se duplica hasta que N es N 2 .<br />

N Lineal El tiempo <strong>de</strong> ejecución lineal, generalmente se encuentra cuando cada<br />

elemento <strong>de</strong> entrada requiere una pequeña parte <strong>de</strong> procesamiento. Cuando<br />

N es 10000 el tiempo <strong>de</strong> ejecución también. Cuando N se duplica el tiempo<br />

también se duplica. Esta situación es óptima para un algoritmo que <strong>de</strong>be<br />

procesar N entradas.<br />

NlogN NlogN El tiempo <strong>de</strong> ejecución NlogN se presenta cuando los algoritmos solucionan<br />

un problema dividiéndolo en pequeños problemas, los resuelve en forma<br />

in<strong>de</strong>pendiente y luego combina las soluciones. Cuando N es 1,000,000 NlogN<br />

es 20,000,000. Cuando N se duplica el tiempo aumenta un poco más <strong><strong>de</strong>l</strong><br />

doble. Esta función <strong>de</strong> crecimiento es típica <strong>de</strong> los algoritmos divi<strong>de</strong> y<br />

vencerás.<br />

N² cuadrática Cuando el tiempo <strong>de</strong> ejecución <strong>de</strong> un algoritmo es cuadrático, el algoritmo<br />

sólo es práctico para problemas relativamente pequeños. Esta función <strong>de</strong><br />

crecimiento surge en algoritmos que procesan todos los pares <strong>de</strong> datos, por<br />

ejemplo, en ciclos anidados. Cuando N=1000 el tiempo <strong>de</strong> ejecución es<br />

100,000. Cuando N se duplica el tiempo <strong>de</strong> ejecución se cuadriplica. Un<br />

ejemplo don<strong>de</strong> se observa esta función <strong>de</strong> crecimiento es el peor caso <strong>de</strong><br />

Quicksort.<br />

N 3 Cúbica Un algoritmo que procesa ternas <strong>de</strong> datos tiene tiempos cúbicos, por ejemplo<br />

la multiplicación <strong>de</strong> matrices implementada en ciclos triples. El uso <strong>de</strong> estos<br />

algoritmos es práctico sólo en problemas pequeños. Cuando N es 100 el<br />

tiempo <strong>de</strong> ejecución es 1,000,000. Al duplicar N el tiempo <strong>de</strong> ejecución se<br />

incrementa 8 veces (2 3 ).<br />

2 N Exponencial Pocos algoritmos con tiempo <strong>de</strong> ejecución exponencial son apropiados para<br />

su uso, aunque surgen naturalmente como soluciones forzadas. Por ejemplo,<br />

cuando N es 20, el tiempo <strong>de</strong> ejecución es 1’000’000. Cuando N se duplica el<br />

tiempo <strong>de</strong> ejecución se eleva al cuadrado.<br />

Ing. Alma Leticia Palacios Guerrero Página 6 <strong>de</strong> 13<br />

D:\lety\algoritmos y estructura <strong>de</strong> datos\<strong>Unidad</strong> <strong>II</strong> <strong>Fundamentos</strong> <strong><strong>de</strong>l</strong> <strong>Análisis</strong> <strong>de</strong> <strong>Algoritmos</strong>.doc<br />

Fecha <strong>de</strong> Actualización: 21/02/2007

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

Saved successfully!

Ooh no, something went wrong!