La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Complejidad algorítmica

Presentaciones similares


Presentación del tema: "Complejidad algorítmica"— Transcripción de la presentación:

1 Complejidad algorítmica
Capítulo 8: Complejidad algorítmica

2 En este capítulo se tratarán los siguientes temas:
8.1 Introducción 8.2 Conceptos iniciales 8.3 Notación O grande (cota superior asintótica) 8.4 Cota inferior (Ω) y cota ajustada asintótica (Θ)

3 8.1 Introducción La complejidad algorítmica permite establecer una comparación entre algoritmos equivalentes para determinar, en forma teórica, cuál tendrá mejor rendimiento en condiciones extremas y adversas.  Para esto, se trata de calcular cuantas instrucciones ejecutará el algoritmo en función del tamaño de los datos de entrada. Llamamos “instrucción” a la acción de asignar valor a una variable y a la realización de las operaciones aritméticas y lógicas.  Como resultaría imposible medir el tiempo que demora una computadora en ejecutar una instrucción de código, simplemente diremos que cada instrucción demora 1 unidad de tiempo en ejecutarse. Luego, el algoritmo más eficiente será aquel que requiera menor cantidad de unidades de tiempo para concretar su tarea.

4 8.2 Conceptos iniciales 8.2.1 Análisis del algoritmo de la búsqueda secuencial int busquedaBinaria(int arr[],int len, int v) { int i = 0; while( i<len && arr[i]!=v ) i = i+1; } return i<len?i:-1;

5 8.2 Conceptos iniciales 8.2.1 Análisis del algoritmo de la búsqueda secuencial El algoritmo comienza asignando el valor 0 a la variable i (1 unidad de tiempo). Luego, para evaluar la cabecera del ciclo iterativo debe realizar las siguientes instrucciones, cada una de las cuales requiere 1 unidad de tiempo: i<len Operación lógica arr[i] Indexación del array, operación aritmética que equivale a: arr+i (aritmética de direcciones, módulo 1 de este libro) arr[i]!=v i<len && arr[i]!=v “and”, operación lógica Encontrará el análisis completo sobre este tema en la página 581 del libro.

6 8.3 Notación O grande (cota superior asintótica)
En general todos los algoritmos suelen ser óptimos cuando las condiciones son favorables, pero cuando las condiciones son adversas los problemas de performance se ponen en evidencia. Como decíamos más arriba, una unidad de tiempo por sí misma es imperceptible. Por esto, si un algoritmo requiere 1, 2, 3, o 100 unidades de tiempo más que otro no notaremos ninguna diferencia. Lo importante en este tipo de análisis es poder encontrar una función que acote el crecimiento que, en el peor de los casos, tendrá la complejidad del algoritmo. Al conjunto de funciones que acotan dicho crecimiento lo llamamos O(g(x)) donde x representa la cantidad de elementos que se van a procesar y g(x) es cualquier cota superior de la función de complejidad del algoritmo. Más formalmente, lo plantearemos de la siguiente manera: sea f(x) la función que expresa la complejidad de un algoritmo, entonces la expresión f(x) pertenece a O(g(x)), significa que f(x) crece, a lo sumo, tan rápido como cualquiera de las funciones g del conjunto O. Volviendo al caso de la búsqueda secuencial de un elemento dentro de un array cuya función de complejidad es 6n+7, podemos simplificarlo y simplemente decir que el algoritmo es de orden lineal o que tiene una complejidad lineal. Ahora vamos a analizar el algoritmo de la búsqueda binaria para hallar su orden de complejidad y luego contrastarlo con el de la búsqueda secuencial.

7 8.4 Cota inferior (Ω) y cota ajustada asintótica (Θ)
Así como O(g(x)) representa el conjunto de las funciones que acotan superiormente a la función de complejidad de un determinado algoritmo, Ω(g(x)) representa al conjunto de las funciones que la acotan inferiormente. Además, Θ(g(x)) representa al conjunto de las funciones que crecen a la misma velocidad.  La siguiente tabla nos permitirá ordenar estos conceptos. O(g(x) ) Cota superior asintótica Cualquiera sea la función g(x), crecerá más de prisa o, a lo sumo, igual que f(x). Ω(g(x) ) Cota inferior asintótica Cualquiera sea la función g(x), crecerá más lento o, a lo sumo, tan rápido como f(x). Θ(g(x) ) Cota ajustada asintótica Cualquiera sea la función g(x), crecerá a la misma velocidad que f(x).


Descargar ppt "Complejidad algorítmica"

Presentaciones similares


Anuncios Google