Top Banner
18

U1 Analisis Algoritmos Complejidad

Jul 20, 2015

Download

Documents

rezzaca
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: U1 Analisis Algoritmos Complejidad
Page 2: U1 Analisis Algoritmos Complejidad

1.1.- Concepto de complejidad de un algoritmo.

Cuando se resuelve un problema

Algoritmo

Fácil de entender, codi

ficar y depurar.

Uso efectivo de los recursos del

computador + menor tiempo de

ejecución

Page 3: U1 Analisis Algoritmos Complejidad

Tiempo de ejecución de un programa.

Tiempo de ejecución

Datos de entrada

Calidad del código generado para crear el código objeto.

Naturaleza y rapidez de las instrucciones

maquinaComplejidad de tiempo del algoritmo

Page 4: U1 Analisis Algoritmos Complejidad

Tiempo de ejecución de un programa. T(n). Tiempo de ejecución de un programa con una

entrada de tamaño n.

T(n) como tiempo de ejecución del “peor caso”. Máximo valor del tiempo de ejecución para entradas de tamaño n.

No es posible expresar T(n) en unidades de tiempo. ¿Por qué?.

Page 5: U1 Analisis Algoritmos Complejidad

Asíntotas Comportamiento asintótico de un algoritmo es cuando

el tamaño de las entradas N tiende a infinito.

A un conjunto de funciones que comparten un mismo comportamiento asintótico le denominaremos un orden de complejidad

Page 6: U1 Analisis Algoritmos Complejidad

Ordenes de complejidadRepresentación Nombre

O(1) orden constante

O(log n) orden logarítmico

O(n) orden lineal

O(n log n)

O(n2) orden cuadrático

O(na) orden polinomial (a > 2)

O(an) orden exponencial (a > 2)

O(n!) orden factorial

Page 7: U1 Analisis Algoritmos Complejidad
Page 8: U1 Analisis Algoritmos Complejidad

1.2 Aritmética de la notación O. La notación O conocida también como notación

asintótica, se utiliza para hacer referencia a la velocidad de crecimiento de los valores de una función.

Ejemplo: T(n) = O(n2). Se lee “o de n al cuadrado”.

Significa que existen constantes enteras c y n0 tales que para n mayor o igual que n0, se tiene que T(n) ≤ cn2.

Page 9: U1 Analisis Algoritmos Complejidad

1.2 Aritmética de la notación O. Regla de la suma: T1(n) + T2(n) = O(max(f(n),g(n))).

Calcula el tiempo de ejecución de una secuencia de pasos de programa, donde cada paso de programa puede contener ciclos y ramificaciones.

Ejemplo: Se tienen O(n2), O(n3), O(nlogn) => O(max(n2,n3) ) es O(n3); y O(max(n3, nlogn)) es O(n3). Por lo tanto la suma de los tres es igual a O(n3).

Page 10: U1 Analisis Algoritmos Complejidad

1.2 Aritmética de la notación O. Regla del producto: T1(n)T2(n) = O(f(n)f(g)).

Según esta regla O(cf(n)) es lo mismo que O(f(n)).

Ejemplo: O(n2/2) = O(n2).

Page 11: U1 Analisis Algoritmos Complejidad

Reglas prácticas para el cálculo de la complejidad de un algoritmo. Los algoritmos bien estructurados combinan las

sentencias de alguna de las formas siguientes

sentencias sencillas

secuencia (;)

decisión (if)

bucles

llamadas a procedimientos, que en nuestro caso pudiera ser llamadas a métodos de alguna clase.

Page 12: U1 Analisis Algoritmos Complejidad

Reglas prácticas para el cálculo de la complejidad de un algoritmo. Sentencias sencillas => O(1).

Estructura IF/ELSE => O(1).

Bucles o ciclos. Cuando existe un número limitado de veces que se repite un grupo de sentencias, su complejidad es O(1). Pero si N forma parte del límite de iteraciones, entonces es O(n).

Cuando tenemos dos bucles anidados es O(n2).

Bucles multiplicativos donde la variable de control no es lineal es O(log n).

O(nlogn) es un bucle interno multiplicativo anidado a otro que es normal.

Las llamadas a procedimientos o métodos generan una orden de complejidad según el análisis de sentencias de cada uno de ellos.

Page 13: U1 Analisis Algoritmos Complejidad
Page 14: U1 Analisis Algoritmos Complejidad

Ejemplos

Page 15: U1 Analisis Algoritmos Complejidad

Ejemplos

Page 16: U1 Analisis Algoritmos Complejidad

Ejemplos

Page 17: U1 Analisis Algoritmos Complejidad

Ejemplosint cont = 0;

for (int i = 2; i <= 1000; i++){for (int j = 1; j <= i; j++){

if (i % j == 0){cont = cont + 1;

}}if (cont < 3){

Console.Write(i+", ");}cont = 0;

}Console.ReadKey();

Page 18: U1 Analisis Algoritmos Complejidad

EjemplosFor(int j = 0; j < n; j++){

For(int i = n; i > 0; i /2){

Console.WriteLine(i);

}

}