Algorimia Basica PDF
April 3, 2024 | Author: Anonymous | Category: N/A
Short Description
Download Algorimia Basica PDF...
Description
Algoritmia básica Grado en Ingeniería Informática Universidad de Zaragoza
Algoritmia básica - Javier Campos (Universidad de Zaragoza)
Introducción a la algoritmia
Algoritmia básica - Javier Campos (Universidad de Zaragoza)
Introducción a la algoritmia
AB
Algoritmia
Algoritmia = = tratamiento sistemático de técnicas fundamentales para el diseño y análisis de algoritmos eficientes
Algoritmia básica - Javier Campos (Universidad de Zaragoza)
2
Introducción a la algoritmia • Computadores cada vez más rápidos y a más bajo precio: – Se resuelven problemas de cálculo antes impensables. – Inconscientemente se tiende a restar importancia al concepto de eficiencia.
• Existen problemas que seguirán siendo intratables si se aplican ciertos algoritmos por mucho que se aceleren los computadores ⇒ importancia de nuevas soluciones eficientes Algoritmia básica - Javier Campos (Universidad de Zaragoza)
3
Introducción a la algoritmia • Ejemplo: “En Agosto de 1977, Scientific American proponía a sus lectores el reto consistente en descifrar un mensaje secreto, para así ganar cien dólares. Parecía algo seguro: se estimaba en aquel momento que el ordenador más rápido existente, empleando el algoritmo más eficiente de los conocidos, no podría ganar la apuesta salvo funcionando sin interrupción durante un tiempo equivalente a millones de veces la edad del Universo. Sin embargo, ocho meses de cálculo que comenzaron dieciséis años después bastaron para la tarea. ¿Qué había pasado?…” G. Brassard y P. Bratley Fundamentos de Algoritmia (Prólogo)
Algoritmia básica - Javier Campos (Universidad de Zaragoza)
4
Introducción a la algoritmia • Un curso de algoritmia NO ES – ni un curso de programación (ya deberíais saber programar) – ni un curso de estructuras de datos (ya deberíais conocer las fundamentales)
TAMPOCO ES – una colección de “recetas” o algoritmos listos para ser introducidos en el computador para resolver problemas específicos Algoritmia básica - Javier Campos (Universidad de Zaragoza)
Si tu problema es ordenar un fichero secuencial de enteros entonces ejecuta el algoritmo A026.
5
Introducción a la algoritmia • Un curso de algoritmia tiene como objetivo principal: – dar más herramientas fundamentales para facilitar el desarrollo de programas ¿qué herramientas?: técnicas o “esquemas” de diseño de algoritmos eficientes
Algoritmia básica - Javier Campos (Universidad de Zaragoza)
6
Introducción a la algoritmia • Un medio para alcanzar ese objetivo es: – presentar cada esquema de forma genérica, incidiendo en los principios que conducen a él, e – ilustrar el esquema mediante ejemplos concretos de algoritmos tomados de varios dominios de aplicación
Algoritmia básica - Javier Campos (Universidad de Zaragoza)
7
Introducción a la algoritmia • Un problema muy sencillo: Multiplicación de dos enteros positivos con lápiz y papel. – En España:
– En Inglaterra:
981 1234 3924 2943 1962 981 1210554
981 1234 981 1962 2943 3924 1210554
– Ambos métodos son muy similares, los llamaremos algoritmo “clásico” de multiplicación. Algoritmia básica - Javier Campos (Universidad de Zaragoza)
8
Introducción a la algoritmia – Algoritmo de multiplicación “a la rusa”:
981 490 245 122 61 30 15 7 3 1
1234 2468 4936 9872 19744 39488 78976 157952 315904 631808
1234 4936 19744 78976 157952 315904 631808 1210554
• Ventaja: no hay que almacenar los productos parciales. • Sólo hay que saber sumar y dividir por 2. Algoritmia básica - Javier Campos (Universidad de Zaragoza)
9
Introducción a la algoritmia – Todavía otro algoritmo: • De momento, exigimos que ambos números tengan igual nº de cifras y que éste sea potencia de 2. Por ejemplo: 0981 y 1234. • En primer lugar, partimos ambos números por la mitad y hacemos cuatro productos: multiplicar 1) 09 12 2) 09 34 3) 81 12 4) 81 34
desplazar 4 2 2 0
resultado 108···· 306·· 972·· 2754 1210554
doble del nº de cifras nº de cifras
Es decir, hemos reducido un producto de nos de 4 cifras en cuatro productos de nos de 2 cifras, varios desplazamientos y una suma. Algoritmia básica - Javier Campos (Universidad de Zaragoza)
10
Introducción a la algoritmia • Los productos de números de 2 cifras pueden hacerse con la misma técnica. Por ejemplo, 09 y 12: multiplicar 1) 0 1 2) 0 2 3) 9 1 4) 9 2
desplazar 2 1 1 0
resultado 0·· 0· 9· 18 108
– Es un ejemplo de algoritmo que utiliza la técnica de “divide y vencerás”. – Tal y como lo hemos presentado… NO mejora en eficiencia al algoritmo clásico. – Pero, puede mejorarse: Es posible reducir un producto de dos números de muchas cifras a 3 (en vez de 4) productos de números de la mitad de cifras, y éste SÍ que mejora al algoritmo clásico. – Y aún se conocen métodos más rápidos para multiplicar números muy grandes. Algoritmia básica - Javier Campos (Universidad de Zaragoza)
11
Introducción a la algoritmia • Ideas clave: – Incluso para un problema tan básico pueden construirse MUCHAS soluciones. – El método clásico lo usamos con lápiz y papel porque nos resulta muy familiar (lo que se aprende en la infancia…). – El método “a la rusa” se implementa en hardware en los computadores por la naturaleza elemental de los cálculos intermedios. – El método de divide y vencerás es más rápido si se quiere multiplicar números grandes. La algoritmia estudia las propiedades de los algoritmos y nos ayuda a elegir la solución más adecuada en cada situación. En muchos casos, una buena elección ahorra tiempo y dinero. En algunos casos, una buena elección marca la diferencia entre poder resolver un problema y no poder hacerlo. Algoritmia básica - Javier Campos (Universidad de Zaragoza)
12
Introducción a la algoritmia • ¿A quién puede interesar este curso? A todo aquél a quien: – le guste diseñar algoritmos para resolver nuevos problemas o algoritmos mejores a los triviales para resolver viejos problemas, y O(n2)
¿O(nlog n)?
– tenga curiosidad por conocer, por ejemplo, cómo se resuelven los siguientes problemas: Algoritmia básica - Javier Campos (Universidad de Zaragoza)
13
Introducción a la algoritmia –
¿Cómo multiplicar dos números enteros de forma más eficiente que con el algoritmo clásico?
–
¿Cómo se compactan ficheros mediante el algoritmo de Huffman?
–
¿Cómo se consiguen implementaciones muy eficientes de la multiplicación y potenciación de enteros muy grandes para el algoritmo RSA?
–
¿Por qué funcionan algoritmos vistos en Matemática Discreta como el de Dijkstra, Prim o Kruskal?
Algoritmia básica - Javier Campos (Universidad de Zaragoza)
14
Introducción a la algoritmia –
¿Existen árboles binarios de búsqueda óptimos suponiendo que se conocen las probabilidades de búsqueda de cada clave?
–
¿Alguna forma de resolver el problema del viajante de comercio?
–
¿Cómo se compara el ADN de un Homo sapiens y de un Homo neanderthalensis?
Algoritmia básica - Javier Campos (Universidad de Zaragoza)
15
Algoritmia básica: Contenidos de la asignatura • • • • • • •
Introducción a la algoritmia Algoritmos voraces Divide y vencerás Programación dinámica Búsqueda con retroceso Ramificación y poda Programación lineal y reducciones
Algoritmia básica - Javier Campos (Universidad de Zaragoza)
16
Algoritmia básica: Bibliografía básica [CLRS09]
T.H. Cormen, C.E. Leiserson, R.L. Rivest, C. Stein. Introduction to Algorithms (3rd edition), The MIT Press, 2009.
[DPV08]
S. Dasgupta, C. Papadimitriou, U. Vazirani. Algorithms, McGrawHill, 2008.
[BB97]
G. Brassard, P. Bratley. Fundamentos de Algoritmia, Prentice Hall, 1997.
Algoritmia básica - Javier Campos (Universidad de Zaragoza)
17
Algoritmia básica: Bibliografía complementaria [KT05]
J. Kleinberg, E. Tardos. Algorithm Design, Addison-Wesley, 2005.
[PG02]
I. Parberry and W. Gasarch. Problems on Algorithms (2nd edition), free book, 2002. Además: transparencias y otro material adicional disponibles en la web de la asignatura, hojas de ejercicios, enlaces de Internet (ejemplo: http://jeffe.cs.illinois.edu/teaching/algorithms/), etc.
Algoritmia básica - Javier Campos (Universidad de Zaragoza)
18
Chuleta • Coste de algoritmos recursivos: El coste T(n) de una función para datos de tamaño n se define en función del coste T(m) de las llamadas recursivas para otros tamaños m (menores que n) Teorema (Master Theorem): f ( n) T1 ( n) = k ⋅ − + ⋅ a T n c b n ( ) 1 g ( n) T2 (n) = k a ⋅ T2 (n / c) + b ⋅ n
Θ( n k ) si a < 1 si 0 ≤ n < c k +1 ⇒ ∈ T n ( ) Θ( n ) si a = 1 1 si c ≤ n Θ(a n / c ) si a > 1 Θ(n k ) si a < c k si 0 ≤ n < c ⇒ T2 (n) ∈ Θ(n k ⋅ log n) si a = c k si c ≤ n Θ(n log c a ) si a > c k
Algoritmia básica - Javier Campos (Universidad de Zaragoza)
19
Algoritmos voraces
Algoritmia básica - Javier Campos (Universidad de Zaragoza)
Algoritmos voraces • • • • • • • • • • •
Introducción y primer ejemplo El problema de la mochila Caminos mínimos en grafos Árboles de recubrimiento de coste mínimo Consideraciones sobre la corrección del esquema voraz Códigos de Huffman El problema de la selección de actividades El problema de la minimización del tiempo de espera Fundamentos teóricos del esquema voraz Un problema de planificación de tareas a plazo fijo Heurísticas voraces – Coloreado de grafos – El problema del viajante de comercio Algoritmia básica - Javier Campos (Universidad de Zaragoza)
3 9 17 39 55 58 66 71 75 85 91 91 94 2
El esquema voraz: Introducción y primer ejemplo • Es uno de los esquemas más simples y al mismo tiempo de los más utilizados. • Típicamente se emplea para resolver problemas de optimización: – existe una entrada de tamaño n que son los candidatos a formar parte de la solución; – existe un subconjunto de esos n candidatos que satisface ciertas restricciones: se llama solución factible; – hay que obtener la solución factible que maximice o minimice una cierta función objetivo: se llama solución óptima.
• Ejemplos: – encontrar la secuencia óptima para procesar un conjunto de tareas por un computador, – hallar un camino mínimo en un grafo, – problema de la mochila,… Algoritmia básica - Javier Campos (Universidad de Zaragoza)
3
El esquema voraz: Introducción y primer ejemplo • El esquema voraz procede por pasos: – inicialmente el conjunto de candidatos escogidos es vacío; – en cada paso, se intenta añadir al conjunto de los escogidos “el mejor” de los no escogidos (sin pensar en el futuro), utilizando una función de selección basada en algún criterio de optimización (puede ser o no ser la función objetivo); – tras cada paso, hay que ver si el conjunto seleccionado es completable (i.e., si añadiendo más candidatos se puede llegar a una solución); • si el conjunto no es completable, se rechaza el último candidato elegido y no se vuelve a considerar en el futuro; • si es completable, se incorpora al conjunto de escogidos y permanece siempre en él;
– tras cada incorporación se comprueba si el conjunto resultante es una solución; – el algoritmo termina cuando se obtiene una solución; – el algoritmo es correcto si la solución encontrada es siempre óptima; Algoritmia básica - Javier Campos (Universidad de Zaragoza)
4
El esquema voraz: Introducción y primer ejemplo • Esquema genérico: función voraz(C:conjunto) devuelve conjunto {C es el conjunto de todos los candidatos} principio S:=Ø; {S es el conjunto en el que se construye la solución} mq ¬solución(S) ∧ C≠Ø hacer x:=elemento de C que maximiza seleccionar(x); C:=C-{x}; si completable(S∪{x}) entonces S:=S∪{x} fsi fmq; si solución(S) entonces devuelve S sino devuelve no hay solución fsi fin
Algoritmia básica - Javier Campos (Universidad de Zaragoza)
5
El esquema voraz: Introducción y primer ejemplo • Problema del cambio en monedas. – Se trata de devolver una cantidad de euros con el menor número posible de monedas. – Se parte de: • un conjunto de tipos de monedas válidas, de las que se supone que hay cantidad suficiente para realizar el desglose, y de • un importe a devolver.
• Elementos fundamentales del esquema: – Conjunto de candidatos: cada una de las monedas de los diferentes tipos que se pueden usar para realizar el desglose del importe dado. – Solución factible: un conjunto de monedas devuelto tras el desglose y cuyo valor total es igual al importe a desglosar. – Completable: la suma de los valores de las monedas escogidas en un momento dado no supera el importe a desglosar. – Función de selección: elegir si es posible la moneda de mayor valor de entre las candidatas. – Función objetivo: número total de monedas utilizadas en la solución (debe minimizarse). Algoritmia básica - Javier Campos (Universidad de Zaragoza)
6
El esquema voraz: Introducción y primer ejemplo • Solución: tipo moneda=(M25,M10,M5,M1)
{por ejemplo}
función cambia(importe:nat; valor:vector[moneda] de nat) devuelve vector[moneda] de nat variables mon:moneda; cambio:vector[moneda] de nat principio para todo mon en moneda hacer cambio[mon]:=0 fpara; para mon:=M25 hasta M1 hacer mq valor[mon]≤importe hacer cambio[mon]:=cambio[mon]+1; importe:=importe-valor[mon] fmq fpara; devuelve cambio fin
Algoritmia básica - Javier Campos (Universidad de Zaragoza)
7
El esquema voraz: Introducción y primer ejemplo • Problemas sobre el problema del cambio en monedas: – Demostrar la corrección del algoritmo. – Demostrar, buscando contraejemplos, que el algoritmo no es óptimo si se añade un nuevo tipo de moneda de 12 euros o si se elimina alguno de los tipos existentes. Demostrar que, en esas condiciones, el algoritmo puede incluso no encontrar solución alguna aunque ésta exista.
• Otro problema: – ¿Es el método de ordenación por selección directa un algoritmo voraz? Si es así, ¿cuáles son las funciones utilizadas (“selección”, “completable”, “solución”)? Algoritmia básica - Javier Campos (Universidad de Zaragoza)
8
El problema de la mochila • • • •
Se tienen n objetos fraccionables y una mochila. El objeto i tiene peso pi, 1≤i ≤ n. La mochila tiene capacidad C. Si se mete una fracción xi, 0 ≤ xi ≤ 1, del objeto i en la mochila, entonces se consigue un beneficio bixi. • El objetivo es llenar la mochila de manera que se maximice el beneficio total. • Pero como la mochila tiene capacidad C, el peso total de todos los objetos metidos en ella no puede superar esa cantidad. Algoritmia básica - Javier Campos (Universidad de Zaragoza)
9
El problema de la mochila • Formalmente:
Σ 1≤i≤n
maximizar sujeto a
Σ
1≤i≤n
bixi
(1)
pixi ≤ C
(2)
con 0≤xi≤1, bi>0, pi>0, 1≤i≤n
(3)
• Una solución factible es cualquier n-tupla (x1,…,xn) que satisfaga (2) y (3). • Una solución óptima es cualquier solución factible para la que (1) sea máximo. • Si p1+⋅⋅⋅+pn≤C, entonces obviamente xi=1, 1≤i≤n, es una solución óptima. • Por tanto, supongamos que p1+⋅⋅⋅+pn>C. • Nótese además que todas las soluciones óptimas llenarán la mochila por completo (podemos poner ‘=‘ en (2)). Algoritmia básica - Javier Campos (Universidad de Zaragoza)
10
El problema de la mochila • Ejemplo: n=3 C=17 (b1,b2,b3)=(40,36,22) (p1,p2,p3)=(15,12,8) • Tres soluciones factibles (entre otras muchas): Σ bixi (x1,x2,x3) 1≤i≤3 (i) (1,1/6,0) 46 (ii) (0,3/4,1) 49 (iii) (0,1,5/8) 49’75 Algoritmia básica - Javier Campos (Universidad de Zaragoza)
11
El problema de la mochila • Solución voraz: – El conjunto de candidatos son los objetos, tomándose de ellos cierta fracción. – Un conjunto de candidatos es completable si la suma de sus pesos no supera la capacidad de la mochila, y es una solución si iguala dicha capacidad. Σ bixi. – La función objetivo a maximizar es 1≤i≤n – La función de selección es la más difícil de determinar. • Si procedemos vorazmente, en cada paso debemos considerar un objeto y tomar cierta fracción suya. • La cuestión de qué fracción se toma es más fácil de resolver: si hemos elegido el mejor candidato, tomamos todo lo que podamos de él. Algoritmia básica - Javier Campos (Universidad de Zaragoza)
12
El problema de la mochila – ¿Cuál es el mejor candidato (es decir, la mejor función de selección)? – Volvamos al ejemplo: • Primera estrategia: elegir el objeto con mayor beneficio total (el primero). Sin embargo, la mochila se llena muy rápidamente con poco beneficio total. • Segunda estrategia: elegir el objeto que llene menos la mochila, para acumular beneficios de un número mayor de objetos. Sin embargo, es posible que se elija un objeto con poco beneficio simplemente porque pesa poco. • La tercera estrategia, que es la óptima, es tomar siempre el objeto que proporcione mayor beneficio por unidad de peso.
– Los algoritmos resultantes de aplicar cualquiera de las dos primeras estrategias también son voraces, pero no calculan la solución óptima. Algoritmia básica - Javier Campos (Universidad de Zaragoza)
13
El problema de la mochila constante n=... {número de objetos} tipo vectReal=vector[1..n] de real {Pre:∀i∈1..n:peso[i]>0 ∧ ∀i∈1..n-1:benef[i]/peso[i]≥benef[i+1]/peso[i+1]} función mochila(benef,peso:vectReal; cap:real) devuelve vectReal variables resto:real; i:entero; sol:vectReal principio para todo i en 1..n hacer sol[i]:=0.0 {inicializar solución} fpara; resto:=cap; {capacidad restante} i:=1; mq (i≤n) and (peso[i]≤resto) hacer sol[i]:=1; resto:=resto-peso[i]; i:=i+1 fmq; si i≤n entonces sol[i]:=resto/peso[i] fsi; devuelve sol fin {Post: sol es solución óptima del problema de la mochila}
Algoritmia básica - Javier Campos (Universidad de Zaragoza)
14
El problema de la mochila • Coste temporal: Θ(n) Θ(nlog n) si se tiene en cuenta que hay que ordenar primero los vectores.
• Demostración de la corrección: Sea X=(x1,…,xn) la solución generada por el algoritmo voraz. Si todos los xi son iguales a 1, la solución es claramente óptima. Luego, sea j el menor índice tal que xj≠1. Por tanto xi=1 para 1≤i
View more...
Comments