ejemAlgoritmo

Page 1

Ejemplos de algoritmos relevantes Ricardo Peña Marí Departamento de Sistemas Informáticos y Computación Universidad Complutense de Madrid

Master en formación de profesorado de Secundaria – Informática curso 2009-2010

R. Peña (SIC-UCM)

Ejemplos de algoritmos

Master Secundaria 09-10

1 / 13


Lecturas recomendadas

• “De Euclides a Java: Historia de los algoritmos y de los lenguajes de programación”. Ricardo Peña. Cap. 5. Ed. Nivola (Colección Ciencia Abierta), 2006. • “Computer Algorithms”. E. Horowitz, S. Sahni, S. Rajasekaram. Computer Science Press 1998. • “Introduction to Algorithms”. T. H. Cormen, C. E. Leiserson, R. L. Rivest, C. Stein, Partes I, II, IV, VI y VII. MIT Press 2001.

R. Peña (SIC-UCM)

Ejemplos de algoritmos

Master Secundaria 09-10

2 / 13


La programación lineal • Suponga que es usted el director de la cocina de un cuartel y que tiene que planificar la dieta de los soldados, sujeta a las siguientes restricciones. 1

2

3

Ha de conseguir al menos un cierto número C de calorías diarias suficiente para que los soldados soporten el entrenamiento. Ha de alcanzar un mínimo P de proteínas y V de vitaminas que cubran sus necesidades diarias. Ha de obtener el menor coste posible para el ejército.

• Puede confeccionar la dieta eligiendo entre n alimentos. Son conocidas las cantidades p1 , . . . , pn de proteínas, v1 , . . . , vn de vitaminas y c1 , . . . , cn de calorías contenidas en un gramo de cada alimento, así como sus precios e1 , . . . , en , en euros por gramo. Su problema se puede expresar así: minimizar e1 x1 + · · · + en xn sujeto a p1 x1 + · · · + pn xn ≥ P v1 x1 + · · · + vn xn ≥ V c1 x1 + · · · + cn xn ≥ C x1 ≥ 0, . . . , xn ≥ 0 R. Peña (SIC-UCM)

Ejemplos de algoritmos

Master Secundaria 09-10

3 / 13


La programación lineal (2) • Este problema se le planteó al matemático George Dantzig (1914-2005) cuando, en 1946, aceptó un empleo como consultor del departamento de planificación de las Fuerzas Aéreas de Estados Unidos. • Su aportación a resolver este problema, y muchos otros expresables en términos semejantes, fue el algoritmo llamado método del simplex (1947). • Resolver un conjunto de inecuaciones lineales sujetas a maximizar o minimizar una función objetivo, también lineal, se conoce como un problema de programación lineal. • En términos geométricos, un simplex es un poliedro convexo en un espacio n-dimensional. Si n = 2, hablamos de un polígono convexo en el plano. • El conjunto de inecuaciones determinan un simplex llamado región factible. • La ecuación e1 x1 + · · · + en xn = K , formada a partir de la función objetivo, determina un hiperplano para cada valor de K . El mayor valor de K (o el menor, si se trata de un problema de minimización) se alcanza en el vértice del poliedro más alejado en la dirección en que crece (o decrece) K . R. Peña (SIC-UCM)

Ejemplos de algoritmos

Master Secundaria 09-10

4 / 13


La programación lineal (y 3) • El método del simplex comienza con cualquier punto factible y luego se desplaza a lo largo de las aristas del poliedro buscando que crezca la función objetivo. Cuando esta no puede crecer más, se ha alcanzado el valor óptimo. • El coste asintótico del método del simplex es exponencial en el caso peor. • No obstante ese coste se manifiesta solo en casos patológicos. La mayor parte de los problemas se resuelven con costes polinomiales. • En 1979, el matemático soviético L. Khachiyan diseñó otro algoritmo cuyo caso peor era polinomial (O(n4 L), para n variables y números con L dígitos). Sin embargo, el método del simplex en la práctica era más eficiente. • Hubo que esperar hasta 1984 para encontrar un algoritmo polinomial O(n3,5 L) que en la práctica compitiera con el de Dantzig. Se llama método proyectivo y se debe a N. Karmarcar. A diferencia del de Dantzig, no recorre las aristas del poliedro sino sus puntos interiores. • Una variante de la programación lineal consiste en exigir que las incógnitas tengan valores enteros en lugar de reales. Se habla entonces de programación lineal entera. • La programación lineal entera es sin embargo un problema NP-completo. R. Peña (SIC-UCM)

Ejemplos de algoritmos

Master Secundaria 09-10

5 / 13


Compresión de ficheros • Todo fichero —contenga un texto, un programa en código máquina, una imagen, o una pieza musical— está constituido por unidades elementales llamadas octetos. • Las técnicas de compresión buscan disminuir el espacio ocupado a costa de emplear cierta cantidad de proceso para comprimirlo y descomprimirlo. • En 1952, el estudiante de doctorado David A. Huffman, del MIT, recibió de su profesor como trabajo de fin de curso encontrar una codificación óptima para el juego de caracteres utilizado por los computadores. • Las codificaciones habituales emplean una cantidad fija de bits para cada carácter. Por ejemplo, la codificación ASCII emplea 7 bits y la UNICODE 16 bits. Sin embargo, hay caracteres que aparecen con más frecuencia que otros. • Si se adopta una codificación de longitud variable en la que los caracteres más frecuentes reciban códigos con un menor número de bits, y los menos frecuentes códigos con un mayor número de bits, es posible que la longitud total del fichero disminuya. • La codificación de Huffman está en la base de varios estándares de compresión como PKZIP (unix), JPEG (imágenes) y MP3 (sonido). R. Peña (SIC-UCM)

Ejemplos de algoritmos

Master Secundaria 09-10

6 / 13


Compresión de ficheros (2) • Para evitar ambigüedades en la descodificación, es imprescindible que ningún código sea prefijo de otro. Por ejemplo, si ’a’ recibe el código ’110101’, ningún otro carácter ha de recibir los códigos ’11010’, ’1101’, ’110’, ’11’ y ’1’. • Huffman encontró un algoritmo que, dado un fichero para el que se conocen las frecuencias de aparición de cada carácter, proporciona una codificación de longitud variable que satisface la propiedad de prefijo y que hace mínima la longitud del fichero codificado. • La tabla muestra las frecuencias relativas para un fichero con seis caracteres distintos y el código de Huffman asignado. Si la codificación de longitud fija asignaba un octeto a cada carácter, el ahorro obtenido es del 72 %. Esto es, cada 100 octetos del fichero original pasan a ser 28 en el comprimido. Carácter ’x’ ’y’ ’z’ ’p’ ’q’ ’r’ R. Peña (SIC-UCM)

Frec. Relativa 41 % 17 % 14 % 12 % 10 % 6%

Ejemplos de algoritmos

Huffman ’1’ ’010’ ’001’ ’000’ ’0111’ ’0110’ Master Secundaria 09-10

7 / 13


Compresión de ficheros (y 3) El algoritmo toma una tabla de frecuencias para n caracteres y produce un árbol binario, llamado árbol de Huffman, en el que cada hoja corresponde a un carácter y el camino que conduce a ella desde la raíz determina su código: bifurcar a la izquierda aporta un ‘0’ y bifurcar a la derecha aporta un ‘1’. Cuanto más alejada esté la hoja de la raíz, tanto más largo será el código de Huffman asignado. 100 41, x

59 26 12, p

33 14, z

17, y

16 6, r

10, q

El algoritmo construye el árbol “de abajo hacia arriba” y supone que las frecuencias se hallan en una cola de prioridad. El coste del mismo está en O(n log n). R. Peña (SIC-UCM)

Ejemplos de algoritmos

Master Secundaria 09-10

8 / 13


El principio “divide y vencerás” • A veces es útil inspirarse en otros algoritmos para diseñar uno nuevo. Esta estrategia ha conducido a identificar un conjunto de técnicas o métodos algorítmicos que el programador puede ensayar cuando se enfrenta a un problema nuevo. • Uno de tales métodos responde al principio militar de divide y vencerás. El esquema general del método puede resumirse como sigue: 1

2

3

4

Si el problema tiene un tamaño suficientemente pequeño, resolverlo directamente. Si no lo tiene, descomponerlo en un conjunto de subproblemas p1 , . . . , pn , n ≥ 1, todos ellos del mismo tipo que el problema original, pero cuyo tamaño sea una fracción del tamaño inicial. Resolver los n subproblemas, invocando recursivamente al propio algoritmo que se está diseñando. Combinar las soluciones s1 , . . . , sn de los subproblemas para obtener la solución del problema original.

Los algoritmos de ordenacion quicksort y mergesort responden a este esquema. R. Peña (SIC-UCM)

Ejemplos de algoritmos

Master Secundaria 09-10

9 / 13


Multiplicación de grandes enteros Otro es el de los soviéticos A. A. Karatsuba y Y. Ofman en 1962 para multiplicar dos números enteros. El que aprendemos en la escuela necesita multiplicar cada cifra del primer número por cada cifra del segundo. Si ambos tienen n cifras, su coste está en O(n2 ). El principio “divide y vencerás” produce este otro algoritmo: 1

Si x e y son los dos números iniciales y n es par, descomponemos cada uno en dos números, tomando las n2 cifras más significativas y las n2 restantes. Llamemos x1 , x2 , y1 e y2 a los cuatro números resultantes. Se cumple: n

n

n

x y = (x1 10 2 + x2 )(y1 10 2 + y2 ) = x1 y1 10n + (x1 y2 + x2 y1 )10 2 + x2 y2 2

El término intermedio x1 y2 + x2 y1 puede obtenerse mediante la resta (x1 + x2 )(y1 + y2 ) − x1 y1 − x2 y2 .

3

En resumen, si ignoramos las sumas y restas necesarias, de coste mucho menor que el de un producto, el número de subproblemas generados de tamaño 12 es de tres: x1 y1 , x2 y2 y (x1 + x2 )(y1 + y2 ).

Se obtiene un coste asintótico en O(nlog2 3 ) = O(n1,59 ), mucho mejor que O(n2 ). R. Peña (SIC-UCM)

Ejemplos de algoritmos

Master Secundaria 09-10

10 / 13


La transformada rápida de Fourier (FFT) • El algoritmo “divide y vencerás” que más impacto ha tenido en nuestra vida cotidiana, aunque la mayoría de los humanos lo ignoren, es la llamada transformada rápida de Fourier, de J. W. Cooley y J. W. Tukey en 1965. • El matemático francés Jean-Baptiste Joseph Fourier (1768-1830) demostró que toda función continua podía expresarse como la suma de infinitas funciones sinusoidales, cada una de una frecuencia diferente. • Dicho análisis nos permite saber cuál es la frecuencia fundamental de una función periódica y en qué medida se hallan presentes otras frecuencias. Es de crucial importancia si las funciones representan señales de sonido. Si se desea disminuir el ruido de la señal (normalmente asociado a la presencia de frecuencias muy altas), se pueden eliminar del análisis de Fourier los sumandos de mayor frecuencia y luego realizar la suma de los restantes. • Para no trabajar con funciones continuas e infinitos sumandos, la señal se suele expresar mediante un conjunto discreto de muestras en el tiempo. El análisis de Fourier se convierte entonces en lo que se llama la transformada discreta de Fourier. R. Peña (SIC-UCM)

Ejemplos de algoritmos

Master Secundaria 09-10

11 / 13


La transformada rápida de Fourier (FFT) (2) • La transformada discreta de Fourier (DFT) requiere O(n2 ) multiplicaciones. • En términos mátemáticos, dados n valores complejos x0 , . . . , xn−1 se calculan los n siguientes valores complejos: fj =

n−1 X

xk e −

2πijk n

j ∈ {0, . . . , n − 1},

i 2 = −1

k=0 2πijk

• Las constantes e − n , llamadas raíces n-ésimas de la unidad, se tienen precalculadas en una matriz n × n. • El algoritmo FFT consigue hacerlo en O(n log n) multiplicaciones: • Si n = 1, la transformada de x0 es el propio x0 . • Si n > 1 y par, se descompone el problema en dos transformadas de n2 coeficientes, llevando los coeficientes pares a un lado y los impares a otro. Se resuelven recursivamente los dos subproblemas. • Se combinan los resultados de cada subproblema —dos conjuntos de n2 valores cada uno— de forma que cada valor del resultado final es la suma de un resultado del primer problema y del producto de una raíz n-ésima de la unidad por un resultado del segundo problema. R. Peña (SIC-UCM)

Ejemplos de algoritmos

Master Secundaria 09-10

12 / 13


La transformada rápida de Fourier (FFT) (y 3) • El algoritmo causó una verdadera revolución, permitiendo resolver problemas hasta entonces inabordables. • La primera prueba a que se sometió fué el análisis de un temblor de tierra que tuvo lugar en Alaska en 1964. El algoritmo cuadrático necesitó 26 minutos mientras que el de Cooley y Tukey realizó la misma tarea en 6 segundos. • Las aplicaciones de la FFT son, además del procesamiento de señales, la multiplicación eficiente de polinomios y la resolución de ecuaciones diferenciales en derivadas parciales. • Se puede extender fácilmente a varias dimensiones lo que permite, por ejemplo, su aplicación al tratamiento computerizado de imágenes. • Actualmente la FFT se halla implementada en circuitos especializados que procesan en tiempo real señales de audio o de vídeo en aplicaciones tales como la compresión de datos, el reconocimiento de voz, el filtrado de las señales, la ecualización del sonido, la transmisión digital y muchas otras. • Podemos afirmar sin temor a equivocarnos que las comunicaciones no habrían alcanzado el grado de desarrollo actual sin la ayuda de este algoritmo. R. Peña (SIC-UCM)

Ejemplos de algoritmos

Master Secundaria 09-10

13 / 13


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.