U1 Analisis Algoritmos Complejidad

16,385
-1

Published on

0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
16,385
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
387
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

U1 Analisis Algoritmos Complejidad

  1. 1. U1.- Análisis de Algoritmos.<br />
  2. 2. 1.1.- Concepto de complejidad de un algoritmo.<br />Fácil de entender, codificar y depurar.<br />Algoritmo<br />Uso efectivo de los recursos del computador + menor tiempo de ejecución<br />Cuando se resuelve un problema<br />
  3. 3. Tiempo de ejecución de un programa.<br />Datos de entrada<br />Calidad del código generado para crear el código objeto.<br />Tiempo de ejecución<br />Naturaleza y rapidez de las instrucciones maquina<br />Complejidad de tiempo del algoritmo<br />
  4. 4. Tiempo de ejecución de un programa.<br />T(n). Tiempo de ejecución de un programa con una entrada de tamaño n.<br />T(n) como tiempo de ejecución del “peor caso”. Máximo valor del tiempo de ejecución para entradas de tamaño n.<br />No es posible expresar T(n) en unidades de tiempo. ¿Por qué?.<br />
  5. 5. Asíntotas<br />Comportamiento asintótico de un algoritmo es cuando el tamaño de las entradas N tiende a infinito.<br />A un conjunto de funciones que comparten un mismo comportamiento asintótico le denominaremos un orden de complejidad<br />
  6. 6. Ordenes de complejidad<br />
  7. 7.
  8. 8. 1.2 Aritmética de la notación O.<br />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.<br />Ejemplo: T(n) = O(n2). Se lee “o de n al cuadrado”.<br />Significa que existen constantes enteras c y n0 tales que para n mayor o igual que n0, se tiene que T(n) ≤ cn2.<br />
  9. 9. 1.2 Aritmética de la notación O.<br />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.<br />Ejemplo: Se tienen O(n2), O(n3), O(nlogn) =&gt; 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). <br />
  10. 10. 1.2 Aritmética de la notación O.<br />Regla del producto: T1(n)T2(n) = O(f(n)f(g)).<br />Según esta regla O(cf(n)) es lo mismo que O(f(n)).<br />Ejemplo: O(n2/2) = O(n2).<br />
  11. 11. Reglas prácticas para el cálculo de la complejidad de un algoritmo.<br />Los algoritmos bien estructurados combinan las sentencias de alguna de las formas siguientes<br />sentencias sencillas<br />secuencia (;)<br />decisión (if)<br />bucles<br />llamadas a procedimientos, que en nuestro caso pudiera ser llamadas a métodos de alguna clase.<br />
  12. 12. Reglas prácticas para el cálculo de la complejidad de un algoritmo.<br />Sentencias sencillas =&gt; O(1).<br />Estructura IF/ELSE =&gt; O(1).<br />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).<br />Cuando tenemos dos bucles anidados es O(n2).<br />Bucles multiplicativos donde la variable de control no es lineal es O(log n).<br />O(nlogn) es un bucle interno multiplicativo anidado a otro que es normal.<br />Las llamadas a procedimientos o métodos generan una orden de complejidad según el análisis de sentencias de cada uno de ellos.<br />
  13. 13.
  14. 14. Ejemplos<br />O(n3)<br />
  15. 15. Ejemplos<br />O(n3)<br />
  16. 16. Ejemplos<br />
  17. 17. Ejemplos<br /> intcont = 0;         for (int i = 2; i &lt;= 1000; i++){            for (int j = 1; j &lt;= i; j++){               if (i % j == 0){                  cont = cont + 1;               }            }            if (cont &lt; 3){               Console.Write(i+&quot;, &quot;);            }            cont = 0;         }         Console.ReadKey();<br />
  18. 18. Ejemplos<br />For(int j = 0; j &lt; n; j++){<br />For(int i = n; i &gt; 0; i /2){<br />Console.WriteLine(i);<br />}<br />}<br />
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×