1 / 44

Algoritmo

Algoritmo. Algoritmo. Al-Khowarizmi nunca pensó que su nombre , seria el origen de pala b ras mas importantes que el mismo: Álgebra. Logaritmo. Algoritmo.

Download Presentation

Algoritmo

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Algoritmo

  2. Algoritmo • Al-Khowarizmi nunca pensó quesu nombre, seria el origen de palabras mas importantes que el mismo: • Álgebra. • Logaritmo. • Algoritmo.

  3. Abu Ja’Far Mohammed lbn Musa al-Khowarizmi(780 - 850), astronomo y matemático arabe. Era miembro de la “Casa de la sabiduria”, el cual era una academia de cientificos en Bagdad. El nombre al-Khowarizmisignifica de la ciudad de Khowarizmi, que actualmente es llamada Khiva. Al-Khowarizmiescribió libros de matemáticas, astronomía y geografía. El álgebra fue introducida en Europa a través de sus trabajos. La palabraálgebra proviene del arabe al-jabr, el cual es parte del título de su libro Kitab al-jabr w’al muquabala. Este libro fue traducido al latin y fue usado por mucho tiempo. En su libro, sobre el uso de los numerales,Khowarizmi describe procedimiento para realizar las operaciones aritméticas. Los autores europeos usaron una adaptación latina de su nombre, hasta que finalmente llegaron a la palabra algoritmo.

  4. Gracias a ese matemático árabe del siglo IX,hoy tenemosconocimiento de conceptos tan básicos. • Algoritmos y Estructuras de Datosforman el núcleo de la Ciencia de la Computación, siendo los componentes básicos de cualquier software. • Por lo tanto,aprender algoritmoses importante para que quien desee desarrollar software de calidad.

  5. ¿ Qué es el diseño de algoritmos  • Un algoritmo es una entidad matemática, independiente de un lenguaje de programación especifico, máquina o compilador. • Diseñar algoritmos, en algún sentido, es todo acerca de la teoría matemática detrás del diseño de buenos programas. • ¿ Porque se estudia diseño de algoritmos 

  6. Los algoritmosson parte del día de las personas. • Instrucciones:para el uso de medicamentos medicinales. • Indicaciones :de cómo montar un equipo de maquinaria. • Establecer :un recorrido desde la casa a la universidad. • Algoritmo es lasucesión de pasos ejecutables para obtener una soluciónpara un determinado tipo de problema. • Dijkstra: Un algoritmo corresponde a una descripción de un patrón de comportamiento, expresado en términos de un conjunto finito de acciones. • Ejecutando la operación a + b, notamos un patrón de comportamiento.

  7. Definición: • Algoritmo es un conjunto finito de instrucciones precisas para ejecutar un proceso computacional. • Un algoritmo es una herramienta para resolver un problema computacional bien especificado. • Definiciones de algoritmo • El diccionario Houaiss de la lengua portuguesa, 2001: • Conjunto de reglas y procedimientos lógicos bien definidos que llevan a la solución de un problema en etapas. • Diccionario Webster de la lengua inglesa:

  8. Teoria de complejidad computacional Bibliografía: Introductions to algorithms. Chapters 1, 2, 3 and 4. Thomas H. Cormen, Charles E. Leiserson and Ronald L. Rivest

  9. Analizando algoritmos • El análisis de un algoritmo es para predecir los recursos que este requiere. • Recursos como: • Tiempo (complexity time). • Memoria (complexity space). • Comunicación (complexity communication).

  10. Lo mas frecuente es la complejidad de tiempo (complexity time). • Generalmente, para un problema se analizandiversos algoritmos candidatos, esto permite identificar al mas eficiente. • El análisis puede indicarmas de un candidato viable, pero en el proceso diversos algoritmos generalmente son descartados.

  11. ¿Que modelo debo usar? • Analizar un algoritmo simplepuede ser un descubrimiento. Pues • Como el comportamiento de un algoritmo puede serdiferente para cada entrada posible, entonces es necesario resumirel comportamiento en fórmulasfácilmente entendibles. • Aunque, generalmente, se selecciona un solomodelo de máquina(para analizar un algoritmo); es posible enfrentarse a muchas opciones (decidir cómo expresar nuestro análisis).

  12. Algunos algoritmos presentan: • Complejidad de tiempo: • O(n3C), donde C denota la capacidad máxima de cada arco en la red. • O(n5). • Complejidad de espacio: • O(n2).

  13. Análisis de algoritmos

  14. Introducción • Antes de analizar un algoritmo, primero se debe tener claro: • Modelo computacional. • Dominación asintótica. • Análisis de algoritmos. • Costo de un algoritmo. • Función de complejidad de un algoritmo. • Tamaño de la entrada de los datos. • Clases de comportamiento asintótico. • Jerarquía de las funciones. • Casos de complejidad. • Comparación de programas. • Técnicas para el análisis de algoritmos.

  15. ¿Que modelo debo usar? 1) Modelo computacional • Aquel que incluye los recursos que serán usados, además de los costos que implica su uso. • RAM • PRAM

  16. Cinta de entrada X1 X2 . . . Xn Acumulador Programa Contador . . . Memoria Cinta de salida y1 y2 . . . yn • Modelo RAM: • Las instrucciones sonejecutadas una después de la otra, con operaciones no concurrentes.

  17. Unidad de Control P1 P2 Pp ... ... ... . . . Memoria Privada Memoria Privada Memoria Privada Interconexión en Red ... Memoria Global • Modelo PRAM: • Investigar modelos para computadores paralelos.

  18. Memorias Procesadores 0 1 . . Interconnection . network p - 1 . . I/O paralela . Memoria distribuida:

  19. 2) Dominación asintótica El análisis de un algoritmo cuenta conalgunasoperaciones elementales. La medida de costo o medida de complejidad indica elcrecimiento asintótico de laoperaciónconsiderada.

  20. Definición: Una función f(n)dominaasintóticamente a otra función g(n), si existen las constantes c, m  0 tal que, para n  m, se tiene |g(n)|  c.|f(n)| • Sean g(n) = (n+1)2 y f(n) = n2 . Entonces: • g(n) y f(n) se dominan asintoticamente, pues: • |(n+1)2 |  4|n2|, para n  1. • |n2|  |(n+1)2 | , para n  0.

  21. Notación O f(n) = O(g(n)) expresa:Que g(n) domina asintóticamente a f(n). La notación O significa que g(n) es el límite superior para el crecimiento de f(n). Lo tengo asintoticamente dominado O(g(n)) = {f(n) : n constantes positivas c y n0, tal que n  n0, tenemos 0  f(n)  cg(n) } • Cualquier función lineal an + b esta en O(n2). ¿cómo? • Mostar que 3n3 = O(n4) para un c y un n0 apropiado.

  22. Cuando la notación O se usa para expresar el tiempo de ejecución de un algoritmo en el peor caso, entonces estaremos definiendo el limite superior del tiempo de ejecución de tal algoritmo para todas las entradas. • Ejemplo: • Algoritmo de ordenación por inserción es en el peor caso O(n2). • Técnicamente es un abuso decir que el tiempo de ejecución del algoritmo de ordenación por inserción es O(n2), sin especificar de que caso se trata. • El tiempo de ejecución de este algoritmo depende de cómo estén dados los datos de entrada. • Si los datos de entrada ya estuviesen ordenados, entonces el algoritmo tiene un tiempo de ejecución de O(n) en el mejor caso

  23. Notación  Especifica un límite inferior para el crecimiento de g(n). Al fin domino la situación (g(n)) = { f(n) :  constantes positivas c y n0, tal que n  n0, tenemos 0  cg(n)  f(n) } • Para mostrar que f(n) = 3n3 + 2n2 es (n3), basta hacer c = 1. Entonces n3  3n3 + 2n2 , para n  0. • f(n) es (n2), haciendo c = 1/10 y n = 0, 2, 4, . . .

  24. Cuando la notación  se usa para expresar el tiempo de ejecución de un algoritmo en el mejor caso, entonces estaremos definiendo el limite inferior del tiempo de ejecución de tal algoritmo para todas las entradas. • Ejemplos: • El tiempo de ejecución del algoritmo de ordenación por inserción es, en el mejor caso es (n). • Para mostrar que f(n) = 3n3 + 2n2 es (n3), basta hacer c = 1. Entonces n3  3n3 + 2n2, para n  0. • Sea • Entonces f(n) es (n2), haciendo c = 1/10 y n = 0, 2, 4, . . .

  25. Limites del algoritmo de ordenación por inserción • De acuerdo con las notaciones anteriores, notamos que el tiempo de ejecución del algoritmo esta entre (n) y O(n2).

  26. Notación  Somos iguales (g(n)) = {f(n) :n constantes positivas c1, c2, y n0, tal que n  n0, donde 0 c1g(n)  f(n) c2g(n) } • Sea f(n) = n2/3 – 2n. Dq: f(n) = (n2) • Debemos obtener c1, c2 y n0 tal que: c1n2  (1/3)n2 – 2n  c2n2,  n  n0 . • Dividiendo tenemos: c1  1/3 – 2/n  c2,  n  n0 . • Lado derecho de la desigualdad es válido  n  1, cuando se escoge c2  1/3. • Escogiendo c1  1/21, el lado izquierdo de la desigualdad es válido  n  7. • Luego, considerando • c1 = 1/21; c2 = 1/3; m = 7 • Tenemos que: n2/3 – 2n = (n2).

  27. Ejemplo: Muestre que En efecto Por definición Dividiendo por : Por tanto : se verifica para:

  28. 3) Análisis de algoritmos • Determinar las características de la performance del algoritmo. • Tiempo. • Memoria. • Ancho de banda de la comunicación. • ¿Porque analizar algoritmos? • De todos los algoritmos que se tenga, elegir aquel que sea el mas eficientepara el mismo problema. • ¿Es posible obtener el mejor tiempo de ejecución para un problema razonablemente finito ?.

  29. 3.1 Costo de un algoritmo • Determinar el menor costo para resolver problemas de una clase dada. • Cuando el Costo de un Algoritmo es igual al Menor Costo Posible, entonces el algoritmo es óptimo. • Pueden existir varios algoritmos para resolver el mismo problema. • Si la misma medida de costo se aplica a diferentes algoritmos, entonces se puede compararlos y escoger el mas adecuado.

  30. Ejemplo: • Ordenación selección. • Ordenación inserción. • Ordenación Quicksort. • Ordenación HeapSort.

  31. 3.2 Función de complejidad de un algoritmo • Para medir el costo de ejecución de un algoritmo: • Se debe definir la función decosto ofunción de complejidad f. • f(n) denota la medida del tiempo necesario para ejecutar un algoritmo para un problema de tamaño n. • Función de complejidad de tiempo f(n): • Mide el tiempo que es necesario para ejecutar un algoritmo en un problema de tamaño n. • La complejidad de tiempo no representa directamente tiempo. • Esta complejidad representa la cantidad de veces que una operación se ejecuta.

  32. Función de Complejidad de Espacio f(n): • Mide lacantidad de memoria necesaria para ejecutar un algoritmo en un problema de tamaño n.

  33. 3.3 Tamaño de la entrada de los datos • La medida del costo de ejecución de un algoritmo depende del tamaño de la entradade los datos. • Escomún considerar el tiempo de ejecución deun algoritmo, como una función. • Para algunos algoritmos, el costo de ejecución es una función de la entrada particular de los datos. • En la función Max, el costo es uniforme sobre todos los problemas de tamaño n. • En un algoritmo de ordenación esto no ocurre: Silos datos de entradaya estuviesen casi ordenados, entonces el algoritmo trabaja menos.

  34. 3.4 Clases de comportamiento asintótico • Complejidad constante: f(n) = O(1) • El uso del algoritmo es independiente del tamaño de n. • Las instrucciones del algoritmo son ejecutadas una cantidad fija de veces. • Complejidad logarítmica: f(n) = O(log n) • Se presenta, comúnmente, en algoritmos que resuelven un problema transformándolo en problemas menores. • El tiempo de ejecución puede ser considerado como menor que una constante grande. • Para n = 1000, log2 1000  10. • Ejemplo: Busca binaria.

  35. Complejidad lineal: f(n) = O(n) • Un pequeño trabajo se realiza sobre cada elemento de entrada. • Esto es bueno para un algoritmo que tiene que procesar y/o producir n elementos de entrada y/o salida. • Ejemplo: Busca secuencial, teste de la planaridad de un grafo. • Complejidad lineal logaritmica: f(n) = O(nlog n) • Ocurre en algoritmos que solucionan un problema dividiéndolo en subproblemas. Luego resuelve cada subproblema y finalmente agrupa las soluciones. • Es común en algoritmos basados en el paradigma dividir para conquistar. • Ejemplo: Ordenación MergeSort.

  36. Complejidad cuadrática: f(n) = O(n2) • Ocurre en algoritmos que presentan anillos (loops) uno dentro del otro. • Es útil en algoritmos que usan datos relativamente pequeño. • Ejemplo: Ordenación por selección e inserción. • Complejidad exponencial: f(n) = O(2n) • No son útiles del punto de vista practico. • Se presentan cuando en la solución de los problemas se usa la fuerza bruta. • Ejemplo: Cartero viajante.

  37. 220 = 1048576 • Complejidad factorial: f(n) = O(n!) • Su comportamiento es mucho peor que el caso exponencial. • Se presentan cuando se usa la fuerza bruta en la solución del problema. • 20! = 2432902008176640000

  38. 3.5 Jerarquía de funciones • Del punto de vista asintótico esta dado por: donde  y c son constantes arbitrarias con Resultados:

More Related