SlideShare una empresa de Scribd logo
Análisis de Algoritmos Ma. Luisa Velasco Ramírez
Algoritmo Es un conjunto finito de instrucciones precisas para resolver un problema . Su ejecución requiere ciertos recursos.
1.1. Introducción. ALGORITMO 0 ó más entradas 1 ó más salidas Memoria Comuni-caciones 
Características de un algoritmo Debe ser  Preciso ; Esto es, debe especificar sin ambigüedad el orden en que se deben ejecutar las instrucciones.  Debe estar  Definido ; Esto es, cada vez que se ejecute bajo las mismas condiciones, la secuencia de ejecución deberá ser la misma proporcionándonos el mismo resultado.  Debe ser  Finito ; Esto es, siempre que sea adecuado se realizarán un número finito de instrucciones, en un tiempo finito y requiriendo una cantidad finita de esfuerzo.   
Razones para Estudiar los Algoritmos Evitar reinventar la rueda. Ayuda cuando se desarrollen  propios algoritmos.  Ayuda a entender herramientas que usan algoritmos particulares. Útil conocer técnicas empleadas para resolver problemas de determinados tipos. Utilizar el algoritmo más eficiente
Eficiencia de Algoritmos Desarrollar programas que sean prácticos, en términos de requerimientos de almacenamiento y tiempo de ejecución  ¿Cómo determinar cuál es  "el mejor"?
Estrategia  empírica   Estrategia  teórica   Consiste en determinar matemáticamente la cantidad de recursos (tiempo, espacio) que necesitará el algoritmo  en función del tamaño  del ejemplar considerado.
El tamaño de un ejemplar  x  corresponde formalmente al número de dígitos binarios necesarios para representarlo en la computadora.  Pero a nivel algorítmico se considerará el tamaño como el número de elementos lógicos contenidos en el ejemplar.
Concepto de Eficiencia Un algoritmo es  eficiente  cuando logra llegar a sus objetivos planteados utilizando la menor cantidad de recursos posibles, es decir, minimizando el uso memoria, de pasos y de esfuerzo humano.
Un algoritmo es  eficaz  cuando alcanza el objetivo primordial.
Dos  fundamentales: Espacio  y  tiempo . · La  eficiencia en espacio  es una medida de la cantidad de memoria requerida por un programa.
· La  eficiencia en tiempo  se mide en términos de la cantidad de tiempo de ejecución del programa.
Recurso Tiempo: · Aplicaciones informáticas que trabajan “ en tiempo real ” requieren que los cálculos se realicen en el menor tiempo posible. · Aplicaciones que manejan un  gran volumen de información  si no se tratan adecuadamente pueden necesitar tiempos impracticables.
Recurso Memoria: Las máquinas tienen una  memoria limitada
Análisis  A Priori  y Prueba  A Posteriori El  Análisis  A Priori (o teórico)  es siempre un estudio  teórico  previo a la implementación. Puede servir para evitar la implementación, si el  algoritmo  es poco eficiente.
Esto es interesante porque: La predicción del costo del algoritmo puede evitar una implementación posiblemente laboriosa. Es aplicable en la etapa de diseño de los algoritmos, constituyendo uno de los factores fundamentales a tener en cuenta.
Prueba A Posteriori En la  Prueba  A Posteriori (experimental o empírica)  se recogen estadísticas de tiempo y espacio consumidas por el algoritmo mientras se ejecuta.  La estrategia empírica consiste en programar los algoritmos y ejecutarlos en una computadora sobre algunos ejemplares de prueba, haciendo medidas para:
· una máquina concreta, · un lenguaje concreto, · un compilador concreto y · datos concretos
Concepto de Instancia Un problema computacional tiene una o más  instancias , que son valores particulares para los datos de entrada, sobre los cuales se puede ejecutar el algoritmo para resolver el problema.
En la teoría de algoritmos es muy frecuente usar el término instancia para indicar un caso específico de un problema. Así, por ejemplo, si el problema es la multiplicación de 2 enteros positivos una instancia es el  par de números a multiplicar.
Tamaño de los Datos Variable o expresión en función de la cual se intentara medir la complejidad del algoritmo
Se definen entonces las funciones de cantidad de recursos en base al  tamaño (o talla) de la entrada . Suele depender del número de datos del problema. Este tamaño puede ser: la cantidad de dígitos para un número, la cantidad de elementos para un arreglo, la cantidad de caracteres de una cadena, en problemas de ordenación es el número de elementos a ordenar,  en matrices puede ser el número de filas, columnas o elementos totales, en algoritmos recursivos es el número de recursiones o llamadas propias que hace la función.
Análisis Peor Caso, Mejor Caso y Caso Promedio Peor caso:  indica el mayor tiempo obtenido, teniendo en consideración todas las entradas posibles.
Mejor caso:  indica el menor tiempo obtenido, teniendo en consideración todas las entradas posibles. Media:  indica el tiempo medio obtenido, considerando todas las entradas posibles.
Ejemplo Sea  A  una lista de  n  elementos  A 1 ,  A 2,  A 3, ... , A n . Ordenar significa permutar estos elementos de tal forma que los mismos queden de acuerdo con un orden preestablecido. Ascendente   A 1<= A 2<= A 3 ..........<= An Descendente  A 1>= A 2 >=........>= An Caso peor :  Que el vector esté ordenado en sentido inverso. Caso mejor :  Que el vector esté ordenado. Caso medio :  Cuando el vector esté desordenado aleatoriamente.
Metas en el diseño de programas de cómputo: El diseño de un algoritmo que sea fácil de entender, codificar y depurar (Ingeniería de  Software ). El diseño de un algoritmo que haga uso eficiente de los recursos de la computadora (Análisis y Diseño de algoritmos).
El  análisis de algoritmos  permite medir la dificultad inherente de un problema y evaluar la eficiencia de un algoritmo.
Tiempo de Ejecución Una medida que suele ser útil conocer es el  tiempo de ejecución  de un algoritmo en función de  N , lo que denominaremos  T ( N ). Esta función se puede medir físicamente (ejecutando el programa, reloj en mano), o calcularse sobre el código contando instrucciones a ejecutar y multiplicando por el tiempo requerido por cada instrucción.
S 1;  FOR i := 1  TO N DO S 2  END ; requiere: T ( N ):=  t 1 +  t 2* N Siendo  t 1 el tiempo que lleve ejecutar la serie &quot; S 1&quot; de sentencias, y  t 2 el que lleve la serie &quot; S 2&quot;.
T min( N ) <=  T ( N ) <=  T max( N ) Los extremos son habitualmente conocidos como &quot; caso peor &quot; y &quot; caso mejor &quot;.
De este modo, el  tiempo de ejecución  puede ser definido como una función de la entrada.  Se definirá T(n)  como el tiempo de ejecución de un algoritmo para una entrada de tamaño  n .
Concepto de Complejidad La complejidad (o costo) de un algoritmo es una medida de la cantidad de recursos (tiempo, memoria) que el algoritmo necesita. La complejidad de un algoritmo se expresa en función del tamaño (o talla) del problema. Se expresa como f(n)
El comportamiento de la función determina la eficiencia. No es única para un algoritmo: depende de los datos. Para un mismo tamaño del problema, las distintas presentaciones iníciales de los datos dan lugar a distintas funciones de complejidad.  Es el caso de una ordenación si los datos están todos  inicialmente desordenados , parcialmente ordenados o  en orden inverso.
 
La complejidad de un algoritmo se expresará en términos de la cantidad de operaciones que realiza. Cada operación requiere cierta cantidad constante de tiempo para ser ejecutada, por esta razón si se cuenta el número de operaciones realizadas por el algoritmo se obtiene una estimación del tiempo que le tomará resolver el problema. Dado un algoritmo, se puede determinar que tipos de operaciones utiliza y cuantas veces las ejecuta para una entrada específica.
Para hacer una estimación de la cantidad de tiempo que tarda un algoritmo en ejecutarse, no es necesario contar el número total de operaciones que realiza.  Se puede elegir alguna, a la que se identificará como  operación básica  que observe un comportamiento parecido al del número total de operaciones realizadas y que, por lo tanto, será proporcional al tiempo total de ejecución.
En general,  debe  procurarse  que la operación básica , en la cual se basa el análisis, de alguna forma esté relacionada con el tipo de problema que se intenta resolver, ignorando  las asignaciones de valores iníciales  y las operaciones sobre variables para control de ciclos (índices).
Ejemplo 1. El siguiente algoritmo obtiene el producto de los dos valores más grandes contenidos en un arreglo  A  de  n  enteros.
En este algoritmo se realizan las siguientes operaciones: a) Comparación entre mayor1 ;  mayor2 y los elementos del arreglo. b) Asignaciones a mayor1 y mayor2 c) Asignación al índice  i  d) Asignación a la función e) Producto de los mayores f) Incremento al índice  g) Comparación entre el índice  i  y la longitud del arreglo  n
Las operaciones (c), (f) y (g) no se consideran por realizarse entre índices, las operaciones (d) y (e) se ejecutan una sola vez y no son proporcionales al número total de operaciones . Entonces, se tiene que las operaciones que se pueden considerar para hacer el análisis son:  las comparaciones entre mayor1; mayor2 y los elementos del arreglo y las asignaciones a los elementos mayores.
Resumiendo, el análisis de un algoritmo se puede hacer considerando sólo aquella operación que cumpla los siguientes criterios:
a) Debe estar relacionada con el tipo de problema que se resuelve. b) Debe ejecutarse un número de veces cuyo modelo de crecimiento sea similar al del número total de operaciones que efectúa el algoritmo. Si ninguna de las operaciones encontradas cumple con ambos criterios, es posible declinar el primero. Si aún así no es posible encontrar una operación representativa, se debe hacer un análisis global, contando todas las operaciones.
 
Con los conceptos enunciados hasta aquí es posible calcular la función complejidad temporal  ft ( n ) para un algoritmo simple.
Considérese el siguiente Algoritmo, para hacer el análisis de su comportamiento tomemos como operación básica las comparaciones con elementos del arreglo y como caso muestra:  A  = [2 ;  7 ;  4 ;  1 ;  3] y  n  = 5 : Si Valor = 2, se hace una comparación,  ft (5) = 1 Si Valor = 4, se hacen tres comparaciones,  ft (5) = 3 Si Valor = 8, se hacen cinco comparaciones, y  ft (5) = 5
Órdenes de Complejidad Se dice que  O ( f ( n )) define un  &quot;orden de complejidad&quot; . Se elegirá como representante de este orden a la función  f ( n ) más sencilla del mismo.
Así se tiene: O (1) orden constante O ( log n ) orden logarítmico O ( n ) orden lineal O ( n 2 ) orden cuadrático O(n3) orden cubica O ( na ) orden polinomial ( a  > 2) O ( an ) orden exponencial ( a  > 2) O ( n !) orden factorial
La mejor técnica para diferenciar la eficiencia de los algoritmos es el estudio de los  órdenes de complejidad . El orden de complejidad se expresa generalmente en términos de la cantidad de datos procesados por el programa, denominada  n , que puede ser el tamaño dado o estimado.
Notación Asintótica El interés principal del análisis de algoritmos radica en saber cómo crece el tiempo de ejecución, cuando el tamaño de la entrada crece.  Esto es la  eficiencia asintótica  del algoritmo.  Indican como crece  t , para valores suficientemente grandes (asintóticamente) sin considerar constantes
Reglas Sentencias if Suele ser  constante  O(1) Bucles for (i=0; i <  n ; i++) O(n) s;  O(1) for (i=o; i <  n  i++)  O(n) for (j=0; j <  n ; j++) O(n) s; O(1)
h = 1 while (h <  n) { s; h = 2 * h; } El logaritmo en base  a  de un número  n , es otro número  b , tal que cumple esta ecuación: a b  = n.  for (i=o; i <  n  i++)  O(n) for (j=0; j <  n ; j++) O(n) s; O(1)
h =  n; While (h >1) { for (i =o; i<  n ; i++)  caso 1 O(n) { s; }  caso 2 O(1) h = h/2;    caso 3 O(log n) }(while)
Resultado: El algoritmo tiene orden de complejidad: O (n log n)
Calcule el orden de complejidad de los siguientes algoritmos: i)for( i =0; i<n; i++){ for( j=0; j<n; j++){ suma = 0; for( k = 0; k<n; k++) suma += a[i][k] * b[k][j]; } }
i= 1; while(i <= n) { x *= 6; i++; }
if (x < y) { resta = y – x; } else { resta = x – y; }
Fuente Bibliográfica: Pérez Cortés, E. & Kinney Romero, René(2005).Análisis de Algoritmos. Disponible en: http://docencia.izt.uam.mx/pece/pagina_academica/AA/Docum/AAPrimera.PDF Análisis de Algorítmos. M.C.C. Ericka Rechy Ramírez Ejercicios de Complejidad.

Más contenido relacionado

PPTX
Eficiencia de algoritmos - Vanessa Ramirez
PPT
AnáLisis De Algoritmos1
PPTX
Complejidad de los algoritmos
PPTX
Complejidad de algoritmos
PPTX
Análisis de algoritmo
PPTX
Cap 02.1 analisis de las estructuras de control(1)
PDF
Complejidad de Algoritmos
PPT
Analisis de Algoritmos
Eficiencia de algoritmos - Vanessa Ramirez
AnáLisis De Algoritmos1
Complejidad de los algoritmos
Complejidad de algoritmos
Análisis de algoritmo
Cap 02.1 analisis de las estructuras de control(1)
Complejidad de Algoritmos
Analisis de Algoritmos

La actualidad más candente (19)

PPTX
Estructura de dato unidad 7
PPTX
U1 Analisis Algoritmos Complejidad
DOC
Analisis de algoritmos
PPT
ANALISIS DE ALGORITMOS
PDF
Analisis de algoritmo
PDF
Complejidad de los algoritmos1
PPTX
Unidad siete estructura de datos
PPT
Algoritmos computacionales y programación: 1
PDF
Unidad i-guia1
PPTX
PDF
Unidad2 compu luis jimenez
PPTX
Unidad 7
PPTX
Unidad 7 analisis de algoritmo
PPTX
Complejidad de algoritmos
DOCX
Unidad 2
PPTX
Analisis de algoritmos complejidad en tiempo y espacio
PPT
Algoritmos
Estructura de dato unidad 7
U1 Analisis Algoritmos Complejidad
Analisis de algoritmos
ANALISIS DE ALGORITMOS
Analisis de algoritmo
Complejidad de los algoritmos1
Unidad siete estructura de datos
Algoritmos computacionales y programación: 1
Unidad i-guia1
Unidad2 compu luis jimenez
Unidad 7
Unidad 7 analisis de algoritmo
Complejidad de algoritmos
Unidad 2
Analisis de algoritmos complejidad en tiempo y espacio
Algoritmos
Publicidad

Destacado (20)

PPT
Lizet Anahi Pineda Maldonado 2
PPTX
Vinos Y Tequilas
PPS
Que Ves.....
PPT
Ee4 Bautismo
PPT
1ª Convención CECMAVI 2008
PPTX
Blogs En Internet
DOC
La Correspondencia
PDF
Sette perle di storia e bellezza
PDF
Actividad 2 El Visualizador De Los Decimales Pdf
PPS
Merida Inolvidable
PPT
Como favorece la web 2(1)
PPT
Hardware Y Redes Rocio Y Laura 3ºB
PDF
La Comida De Negocios 2009
PPT
Hoja de vida
DOC
Ayuda Escolar Anual
PPT
Hardware Y Redes Ruben
DOCX
El actua dios en el oriente
PPTX
Sistemas De Informacion
PPSX
Diapositivaswww
PPTX
Sistemas De Informacion
Lizet Anahi Pineda Maldonado 2
Vinos Y Tequilas
Que Ves.....
Ee4 Bautismo
1ª Convención CECMAVI 2008
Blogs En Internet
La Correspondencia
Sette perle di storia e bellezza
Actividad 2 El Visualizador De Los Decimales Pdf
Merida Inolvidable
Como favorece la web 2(1)
Hardware Y Redes Rocio Y Laura 3ºB
La Comida De Negocios 2009
Hoja de vida
Ayuda Escolar Anual
Hardware Y Redes Ruben
El actua dios en el oriente
Sistemas De Informacion
Diapositivaswww
Sistemas De Informacion
Publicidad

Similar a AnáLisis De Algoritmos1 (20)

PPTX
Complejidad de algoritmos
PPTX
Cap2.1
PPTX
ANALISIS DE LOS ALGORITMOS
PPTX
Complejidad de un algoritmo
PPTX
Presentacion para analisis de algoritmo
PPTX
Complejidad Computacional
PPTX
Complejidad Computacional
PPTX
Unidad 7
PPTX
Complejidad de un algoritmo
PPTX
Complejidad de los algoritmos
PDF
Complejidad de un algoritmo
PPTX
Unidad 7
PPT
Introducción a la Informática - Los Algoritmos
DOCX
Unidad 1
DOCX
Unidad 1
PPTX
Foro de integracion
DOCX
PPTX
Algoritmos
Complejidad de algoritmos
Cap2.1
ANALISIS DE LOS ALGORITMOS
Complejidad de un algoritmo
Presentacion para analisis de algoritmo
Complejidad Computacional
Complejidad Computacional
Unidad 7
Complejidad de un algoritmo
Complejidad de los algoritmos
Complejidad de un algoritmo
Unidad 7
Introducción a la Informática - Los Algoritmos
Unidad 1
Unidad 1
Foro de integracion
Algoritmos

Más de María Luisa Velasco (20)

DOCX
Respaldando bd
PDF
Guia eejerciciospracticos
PPTX
Ejercicios normalización
PPT
Normalizacion
PDF
Guia eejerciciospracticos
PDF
Guia eejerciciospracticos
PDF
Guia eejerciciospracticos
PPT
Modulos sgbd
PDF
Guia eejerciciospracticos
DOC
Induccion fundbd2012
DOC
Induccion fundbd2012
PDF
Guia eejerciciospracticos
PPTX
Paradigmas de programación
DOCX
Proyecto final de algoritmica
DOCX
Ejercicios arreglos4
DOCX
Ejercicios arreglos2
PPT
Seguridad bd
DOCX
Ejercicios3parte
Respaldando bd
Guia eejerciciospracticos
Ejercicios normalización
Normalizacion
Guia eejerciciospracticos
Guia eejerciciospracticos
Guia eejerciciospracticos
Modulos sgbd
Guia eejerciciospracticos
Induccion fundbd2012
Induccion fundbd2012
Guia eejerciciospracticos
Paradigmas de programación
Proyecto final de algoritmica
Ejercicios arreglos4
Ejercicios arreglos2
Seguridad bd
Ejercicios3parte

AnáLisis De Algoritmos1

  • 1. Análisis de Algoritmos Ma. Luisa Velasco Ramírez
  • 2. Algoritmo Es un conjunto finito de instrucciones precisas para resolver un problema . Su ejecución requiere ciertos recursos.
  • 3. 1.1. Introducción. ALGORITMO 0 ó más entradas 1 ó más salidas Memoria Comuni-caciones 
  • 4. Características de un algoritmo Debe ser Preciso ; Esto es, debe especificar sin ambigüedad el orden en que se deben ejecutar las instrucciones. Debe estar Definido ; Esto es, cada vez que se ejecute bajo las mismas condiciones, la secuencia de ejecución deberá ser la misma proporcionándonos el mismo resultado. Debe ser Finito ; Esto es, siempre que sea adecuado se realizarán un número finito de instrucciones, en un tiempo finito y requiriendo una cantidad finita de esfuerzo.  
  • 5. Razones para Estudiar los Algoritmos Evitar reinventar la rueda. Ayuda cuando se desarrollen propios algoritmos. Ayuda a entender herramientas que usan algoritmos particulares. Útil conocer técnicas empleadas para resolver problemas de determinados tipos. Utilizar el algoritmo más eficiente
  • 6. Eficiencia de Algoritmos Desarrollar programas que sean prácticos, en términos de requerimientos de almacenamiento y tiempo de ejecución ¿Cómo determinar cuál es &quot;el mejor&quot;?
  • 7. Estrategia empírica Estrategia teórica Consiste en determinar matemáticamente la cantidad de recursos (tiempo, espacio) que necesitará el algoritmo en función del tamaño del ejemplar considerado.
  • 8. El tamaño de un ejemplar x corresponde formalmente al número de dígitos binarios necesarios para representarlo en la computadora. Pero a nivel algorítmico se considerará el tamaño como el número de elementos lógicos contenidos en el ejemplar.
  • 9. Concepto de Eficiencia Un algoritmo es eficiente cuando logra llegar a sus objetivos planteados utilizando la menor cantidad de recursos posibles, es decir, minimizando el uso memoria, de pasos y de esfuerzo humano.
  • 10. Un algoritmo es eficaz cuando alcanza el objetivo primordial.
  • 11. Dos fundamentales: Espacio y tiempo . · La eficiencia en espacio es una medida de la cantidad de memoria requerida por un programa.
  • 12. · La eficiencia en tiempo se mide en términos de la cantidad de tiempo de ejecución del programa.
  • 13. Recurso Tiempo: · Aplicaciones informáticas que trabajan “ en tiempo real ” requieren que los cálculos se realicen en el menor tiempo posible. · Aplicaciones que manejan un gran volumen de información si no se tratan adecuadamente pueden necesitar tiempos impracticables.
  • 14. Recurso Memoria: Las máquinas tienen una memoria limitada
  • 15. Análisis A Priori y Prueba A Posteriori El Análisis A Priori (o teórico) es siempre un estudio teórico previo a la implementación. Puede servir para evitar la implementación, si el algoritmo es poco eficiente.
  • 16. Esto es interesante porque: La predicción del costo del algoritmo puede evitar una implementación posiblemente laboriosa. Es aplicable en la etapa de diseño de los algoritmos, constituyendo uno de los factores fundamentales a tener en cuenta.
  • 17. Prueba A Posteriori En la Prueba A Posteriori (experimental o empírica) se recogen estadísticas de tiempo y espacio consumidas por el algoritmo mientras se ejecuta. La estrategia empírica consiste en programar los algoritmos y ejecutarlos en una computadora sobre algunos ejemplares de prueba, haciendo medidas para:
  • 18. · una máquina concreta, · un lenguaje concreto, · un compilador concreto y · datos concretos
  • 19. Concepto de Instancia Un problema computacional tiene una o más instancias , que son valores particulares para los datos de entrada, sobre los cuales se puede ejecutar el algoritmo para resolver el problema.
  • 20. En la teoría de algoritmos es muy frecuente usar el término instancia para indicar un caso específico de un problema. Así, por ejemplo, si el problema es la multiplicación de 2 enteros positivos una instancia es el par de números a multiplicar.
  • 21. Tamaño de los Datos Variable o expresión en función de la cual se intentara medir la complejidad del algoritmo
  • 22. Se definen entonces las funciones de cantidad de recursos en base al tamaño (o talla) de la entrada . Suele depender del número de datos del problema. Este tamaño puede ser: la cantidad de dígitos para un número, la cantidad de elementos para un arreglo, la cantidad de caracteres de una cadena, en problemas de ordenación es el número de elementos a ordenar, en matrices puede ser el número de filas, columnas o elementos totales, en algoritmos recursivos es el número de recursiones o llamadas propias que hace la función.
  • 23. Análisis Peor Caso, Mejor Caso y Caso Promedio Peor caso: indica el mayor tiempo obtenido, teniendo en consideración todas las entradas posibles.
  • 24. Mejor caso: indica el menor tiempo obtenido, teniendo en consideración todas las entradas posibles. Media: indica el tiempo medio obtenido, considerando todas las entradas posibles.
  • 25. Ejemplo Sea A una lista de n elementos A 1 , A 2, A 3, ... , A n . Ordenar significa permutar estos elementos de tal forma que los mismos queden de acuerdo con un orden preestablecido. Ascendente A 1<= A 2<= A 3 ..........<= An Descendente A 1>= A 2 >=........>= An Caso peor : Que el vector esté ordenado en sentido inverso. Caso mejor : Que el vector esté ordenado. Caso medio : Cuando el vector esté desordenado aleatoriamente.
  • 26. Metas en el diseño de programas de cómputo: El diseño de un algoritmo que sea fácil de entender, codificar y depurar (Ingeniería de Software ). El diseño de un algoritmo que haga uso eficiente de los recursos de la computadora (Análisis y Diseño de algoritmos).
  • 27. El análisis de algoritmos permite medir la dificultad inherente de un problema y evaluar la eficiencia de un algoritmo.
  • 28. Tiempo de Ejecución Una medida que suele ser útil conocer es el tiempo de ejecución de un algoritmo en función de N , lo que denominaremos T ( N ). Esta función se puede medir físicamente (ejecutando el programa, reloj en mano), o calcularse sobre el código contando instrucciones a ejecutar y multiplicando por el tiempo requerido por cada instrucción.
  • 29. S 1; FOR i := 1 TO N DO S 2 END ; requiere: T ( N ):= t 1 + t 2* N Siendo t 1 el tiempo que lleve ejecutar la serie &quot; S 1&quot; de sentencias, y t 2 el que lleve la serie &quot; S 2&quot;.
  • 30. T min( N ) <= T ( N ) <= T max( N ) Los extremos son habitualmente conocidos como &quot; caso peor &quot; y &quot; caso mejor &quot;.
  • 31. De este modo, el tiempo de ejecución puede ser definido como una función de la entrada. Se definirá T(n) como el tiempo de ejecución de un algoritmo para una entrada de tamaño n .
  • 32. Concepto de Complejidad La complejidad (o costo) de un algoritmo es una medida de la cantidad de recursos (tiempo, memoria) que el algoritmo necesita. La complejidad de un algoritmo se expresa en función del tamaño (o talla) del problema. Se expresa como f(n)
  • 33. El comportamiento de la función determina la eficiencia. No es única para un algoritmo: depende de los datos. Para un mismo tamaño del problema, las distintas presentaciones iníciales de los datos dan lugar a distintas funciones de complejidad. Es el caso de una ordenación si los datos están todos inicialmente desordenados , parcialmente ordenados o en orden inverso.
  • 34.  
  • 35. La complejidad de un algoritmo se expresará en términos de la cantidad de operaciones que realiza. Cada operación requiere cierta cantidad constante de tiempo para ser ejecutada, por esta razón si se cuenta el número de operaciones realizadas por el algoritmo se obtiene una estimación del tiempo que le tomará resolver el problema. Dado un algoritmo, se puede determinar que tipos de operaciones utiliza y cuantas veces las ejecuta para una entrada específica.
  • 36. Para hacer una estimación de la cantidad de tiempo que tarda un algoritmo en ejecutarse, no es necesario contar el número total de operaciones que realiza. Se puede elegir alguna, a la que se identificará como operación básica que observe un comportamiento parecido al del número total de operaciones realizadas y que, por lo tanto, será proporcional al tiempo total de ejecución.
  • 37. En general, debe procurarse que la operación básica , en la cual se basa el análisis, de alguna forma esté relacionada con el tipo de problema que se intenta resolver, ignorando las asignaciones de valores iníciales y las operaciones sobre variables para control de ciclos (índices).
  • 38. Ejemplo 1. El siguiente algoritmo obtiene el producto de los dos valores más grandes contenidos en un arreglo A de n enteros.
  • 39. En este algoritmo se realizan las siguientes operaciones: a) Comparación entre mayor1 ; mayor2 y los elementos del arreglo. b) Asignaciones a mayor1 y mayor2 c) Asignación al índice i d) Asignación a la función e) Producto de los mayores f) Incremento al índice g) Comparación entre el índice i y la longitud del arreglo n
  • 40. Las operaciones (c), (f) y (g) no se consideran por realizarse entre índices, las operaciones (d) y (e) se ejecutan una sola vez y no son proporcionales al número total de operaciones . Entonces, se tiene que las operaciones que se pueden considerar para hacer el análisis son: las comparaciones entre mayor1; mayor2 y los elementos del arreglo y las asignaciones a los elementos mayores.
  • 41. Resumiendo, el análisis de un algoritmo se puede hacer considerando sólo aquella operación que cumpla los siguientes criterios:
  • 42. a) Debe estar relacionada con el tipo de problema que se resuelve. b) Debe ejecutarse un número de veces cuyo modelo de crecimiento sea similar al del número total de operaciones que efectúa el algoritmo. Si ninguna de las operaciones encontradas cumple con ambos criterios, es posible declinar el primero. Si aún así no es posible encontrar una operación representativa, se debe hacer un análisis global, contando todas las operaciones.
  • 43.  
  • 44. Con los conceptos enunciados hasta aquí es posible calcular la función complejidad temporal ft ( n ) para un algoritmo simple.
  • 45. Considérese el siguiente Algoritmo, para hacer el análisis de su comportamiento tomemos como operación básica las comparaciones con elementos del arreglo y como caso muestra: A = [2 ; 7 ; 4 ; 1 ; 3] y n = 5 : Si Valor = 2, se hace una comparación, ft (5) = 1 Si Valor = 4, se hacen tres comparaciones, ft (5) = 3 Si Valor = 8, se hacen cinco comparaciones, y ft (5) = 5
  • 46. Órdenes de Complejidad Se dice que O ( f ( n )) define un &quot;orden de complejidad&quot; . Se elegirá como representante de este orden a la función f ( n ) más sencilla del mismo.
  • 47. Así se tiene: O (1) orden constante O ( log n ) orden logarítmico O ( n ) orden lineal O ( n 2 ) orden cuadrático O(n3) orden cubica O ( na ) orden polinomial ( a > 2) O ( an ) orden exponencial ( a > 2) O ( n !) orden factorial
  • 48. La mejor técnica para diferenciar la eficiencia de los algoritmos es el estudio de los órdenes de complejidad . El orden de complejidad se expresa generalmente en términos de la cantidad de datos procesados por el programa, denominada n , que puede ser el tamaño dado o estimado.
  • 49. Notación Asintótica El interés principal del análisis de algoritmos radica en saber cómo crece el tiempo de ejecución, cuando el tamaño de la entrada crece. Esto es la eficiencia asintótica del algoritmo. Indican como crece t , para valores suficientemente grandes (asintóticamente) sin considerar constantes
  • 50. Reglas Sentencias if Suele ser constante O(1) Bucles for (i=0; i < n ; i++) O(n) s; O(1) for (i=o; i < n i++) O(n) for (j=0; j < n ; j++) O(n) s; O(1)
  • 51. h = 1 while (h < n) { s; h = 2 * h; } El logaritmo en base a de un número n , es otro número b , tal que cumple esta ecuación: a b = n. for (i=o; i < n i++) O(n) for (j=0; j < n ; j++) O(n) s; O(1)
  • 52. h = n; While (h >1) { for (i =o; i< n ; i++) caso 1 O(n) { s; } caso 2 O(1) h = h/2; caso 3 O(log n) }(while)
  • 53. Resultado: El algoritmo tiene orden de complejidad: O (n log n)
  • 54. Calcule el orden de complejidad de los siguientes algoritmos: i)for( i =0; i<n; i++){ for( j=0; j<n; j++){ suma = 0; for( k = 0; k<n; k++) suma += a[i][k] * b[k][j]; } }
  • 55. i= 1; while(i <= n) { x *= 6; i++; }
  • 56. if (x < y) { resta = y – x; } else { resta = x – y; }
  • 57. Fuente Bibliográfica: Pérez Cortés, E. & Kinney Romero, René(2005).Análisis de Algoritmos. Disponible en: http://docencia.izt.uam.mx/pece/pagina_academica/AA/Docum/AAPrimera.PDF Análisis de Algorítmos. M.C.C. Ericka Rechy Ramírez Ejercicios de Complejidad.