18

U1 Analisis Algoritmos Complejidad

  • Upload
    rezzaca

  • View
    15.966

  • Download
    1

Embed Size (px)

Citation preview

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

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

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é?.

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

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

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.

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

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

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.

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.

Ejemplos

Ejemplos

Ejemplos

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();

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

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

Console.WriteLine(i);

}

}