Ejemplo: El problema de la mochila. Algoritmos golosos. Algoritmos y Estructuras de Datos III. Segundo cuatrimestre 2013

T´ecnicas de dise˜no de algoritmos Algoritmos y Estructuras de Datos III Segundo cuatrimestre 2013 T´ecnicas de dise˜no de algoritmos Algoritmos gol

0 downloads 102 Views 196KB Size

Story Transcript

T´ecnicas de dise˜no de algoritmos

Algoritmos y Estructuras de Datos III Segundo cuatrimestre 2013 T´ecnicas de dise˜no de algoritmos

Algoritmos golosos Idea: Construir una soluci´ on seleccionando en cada paso la mejor alternativa, sin considerar (o haci´endolo d´ebilmente) las implicancias de esta selecci´ on. I

F´aciles de inventar.

I

F´aciles de implementar.

I

Generalmente eficientes. Pero no siempre “funcionan”: algunos problemas no pueden ser resueltos por este enfoque.

I

I

I

Habitualmente, proporcionan heur´ısticas sencillas para problemas de optimizaci´on. En general permiten construir soluciones razonables, pero sub-´ optimas.

I

Conjunto de candidatos.

I

Funci´on de selecci´ on.

I

Algoritmos golosos

I

Backtracking (b´ usqueda con retroceso)

I

Divide and conquer (dividir y conquistar)

I

Recursividad

I

Programaci´on din´amica

I

Algoritmos probabil´ısticos

Ejemplo: El problema de la mochila

Datos de entrada: I

Capacidad C ∈ R+ de la mochila (peso m´aximo).

I

Cantidad n ∈ N de objetos.

I

Peso pi ∈ R+ del objeto i, para i = 1, . . . , n.

I

Beneficio bi ∈ R+ del objeto i, para i = 1, . . . , n.

Problema: Determinar qu´e objetos debemos incluir en la mochila sin excedernos del peso m´aximo C , de modo tal de maximizar el beneficio total entre los objetos seleccionados. En la versi´on m´as simple de este problema vamos a suponer que podemos poner parte de un objeto en la mochila.

Ejemplo: El problema de la mochila

Ejemplo: El problema de la mochila Datos de entrada:

Algoritmo(s) goloso(s): Mientras no se haya excedido el peso de la mochila, agregar a la mochila el objeto i que ... I

... tenga mayor beneficio bi .

I

... tenga menor peso pi .

I

... maximice bi /pi .

Ejemplo: El problema de la mochila

I

¿Qu´e podemos decir en cuanto a la calidad de las soluciones obtenidas por estos algoritmos?

I

Se puede demostrar que la selecci´ on seg´ un se maximice bi /pi da una soluci´ on ´ optima.

I

¿Qu´e podemos decir en cuanto a su complejidad?

I

¿Qu´e sucede si los elementos se deben poner enteros en la mochila?

C = 100, n = 5

p b b/p

1 10 20 2.0

2 20 30 1.5

3 30 66 2.2

4 40 40 1.0

5 50 60 1.2

I

mayor beneficio bi : 66 + 60 + 40/2 = 146.

I

menor peso pi : 20 + 30 + 66 + 40 = 156.

I

maximice bi /pi : 66 + 20 + 30 + 0,8 · 60 = 164.

Ejemplo: Tiempo de espera total en un sistema Problema: Un servidor tiene n clientes para atender, y los puede atender en cualquier orden. Para i = 1, . . . , n, el tiempo necesario para atender al cliente i es ti ∈ R+ . El objetivo es determinar en qu´e orden se deben atender los clientes para minimizar la suma de los tiempos de espera de los clientes. Si I = (i1 , i2 , . . . , in ) es una permutaci´on de los clientes que representa el orden de atenci´on, entonces la suma de los tiempos de espera es T

= ti1 + (ti1 + ti2 ) + (ti1 + ti2 + ti3 ) + . . . n X = (n − k + 1)tik . k=1

Ejemplo: Tiempo de espera total en un sistema

Algoritmo goloso: En cada paso, atender al cliente pendiente que tenga menor tiempo de atenci´ on.

Backtracking Idea: T´ecnica para recorrer sistem´aticamente todas las posibles configuraciones del espacio de soluciones de un problema computacional. I

Habitualmente, utiliza un vector a = (a1 , a2 , . . . , an ) para representar una soluci´on candidata, cada ai pertenece un dominio/conjunto ordenado y finito Ai .

I

Retorna una permutaci´ on IGOL = (i1 , . . . , in ) tal que tij ≤ tij+1 para j = 1, . . . , n − 1.

I

El espacio de soluciones es el producto cartesiano A1 × . . . × An .

I

¿Cu´al es la complejidad de este algoritmo?

I

I

Este algoritmo proporciona la soluci´ on ´optima!

En cada paso se extienden las soluciones parciales a = (a1 , a2 , . . . , ak ), k < n, agregando un elemento m´as, ak+1 ∈ Sk+1 ⊆ Ak+1 , al final del vector a. Las nuevas soluciones parciales son sucesores de la anterior.

I

Si Sk+1 es vac´ıo, se retrocede a la soluci´on parcial (a1 , a2 , . . . , ak−1 ).

Backtracking

I

Se puede pensar este espacio como un ´arbol dirigido, donde cada v´ertice representa una soluci´ on parcial y un v´ertice x es hijo de y si la soluci´ on parcial x se puede extender desde la soluci´on parcial y .

I

Permite descartar configuraciones antes de explorarlas (podar el ´arbol).

Backtracking: Esquema General - Todas las soluciones

algoritmo BT(a,k) si a es soluci´ on entonces procesar(a) retornar sino para cada a0 ∈ Sucesores(a, k) BT(a0 , k + 1) fin para fin si retornar

Backtracking: Esquema General - Una soluci´on algoritmo BT(a,k) si a es soluci´ on entonces sol ← a encontro ← true sino para cada a0 ∈ Sucesores(a, k) BT(a0 , k + 1) si encontro entonces retornar fin si fin para fin si retornar I

sol variable global que guarda la soluci´ on.

I

encontro variable booleana global que indica si ya se encontr´o una soluci´ on. Inicialmente est´a en false.

Ejemplo: Problema de las 8 reinas I

Ejemplo: Problema de las 8 reinas Ubicar 8 reinas en el tablero de ajedrez (8 × 8) sin que ninguna “amenace” a otra. I

648 ≈ 1014 I

Sabemos que dos reinas no pueden estar en el mismo casillero.   64 = 442616536 8

I

Sabemos que cada fila debe tener exactamente una reina. Cada soluci´on parcial puede estar representada por (a1 , . . . , ak ), k ≤ 8, con ai ∈ {1, . . . , 8} indicando la columna de la reina que est´a en la fila i. Tenemos ahora 88 = 16777216 combinaciones.

Divide and conquer

Es m´as, una misma columna debe tener exactamente una reina. I

Si la instancia I de entrada es peque˜ na, entonces utilizar un algoritmo ad hoc para el problema.

I

En caso contrario:

Se reduce a 8! = 40320 combinaciones. I

¿Cu´antas combinaciones del tablero hay que considerar?

¿C´omo chequear un vector a es una soluci´on?

I

ai − aj 6∈ {i − j, 0, j − 1}, ∀i, j ∈ {1, . . . , 8} e i 6= j. I

Ahora estamos en condici´ on de implementar un algoritmo para resolver el problema!

I

¿C´omo generalizar para el problema de n reinas?

I I

Dividir I en sub-instancias I1 , I2 , . . . , Ik m´as peque˜ nas. Resolver recursivamente las k sub-instancias. Combinar las soluciones para las k sub-instancias para obtener una soluci´on para la instancia original I .

Ejemplo: Mergesort Algoritmo divide and conquer para ordenar un arreglo A de n elementos (von Neumann, 1945).

Ejemplo: Mergesort Algoritmo divide and conquer para ordenar un arreglo A de n elementos (von Neumann, 1945).

I

Si n es peque˜ no, ordenar por cualquier m´etodo sencillo.

I

Si n es peque˜ no, ordenar por cualquier m´etodo sencillo.

I

Si n es grande:

I

Si n es grande:

I I I I

A1 := primera mitad de A. A2 := segunda mitad de A. Ordenar recursivamente A1 y A2 por separado. Combinar A1 y A2 para obtener los elementos de A ordenados (apareo de arreglos).

Este algoritmo contiene todos los elementos t´ıpicos de la t´ecnica divide and conquer.

Ejemplo: Multiplicaci´on de Strassen

I I I I

A1 := primera mitad de A. A2 := segunda mitad de A. Ordenar recursivamente A1 y A2 por separado. Combinar A1 y A2 para obtener los elementos de A ordenados (apareo de arreglos).

Este algoritmo contiene todos los elementos t´ıpicos de la t´ecnica divide and conquer.

Ejemplo: Multiplicaci´on de Strassen Definimos:

I

Sean A, B ∈ Rn×n . El algoritmo est´andar para calcular AB tiene una complejidad de Θ(n3 ).

I

Durante muchos a˜ nos se pensaba que esta complejidad era ´optima.

I

Sin embargo, Strassen (1969) pate´ o el tablero. Particionamos:     A11 A12 B11 B12 A= , B= . A21 A22 B21 B22

M1

=

(A21 + A22 − A11 ) (B22 − B12 + B11 )

M2

=

A11 B11

M3

=

A12 B21

M4

=

(A11 − A21 ) (B22 − B12 )

M5

=

(A21 + A22 ) (B12 − B11 )

M6

=

(A12 − A21 + A11 − A22 ) B22

M7

=

A22 (B11 + B22 − B12 − B21 ).

Entonces,  AB =

M2 + M3 M1 + M2 + M4 − M7

M1 + M2 + M5 + M6 M1 + M2 + M4 + M5

 .

Ejemplo: Multiplicaci´on de Strassen

I

Este algoritmo permite calcular el producto AB en tiempo O(nlog2 (7) ) = O(n2,81 ) (!).

I

Requiere 7 multiplicaciones de matrices de tama˜ no n/2 × n/2, en comparaci´ on con las 8 multiplicaciones del algoritmo est´andar.

I

Programaci´on Din´amica I

Al igual que “dividir y conquistar”, el problema es dividido en subproblemas de tama˜ nos menores que son m´as f´acil de resolver. Una vez resueltos esto subproblemas, se combinan las soluciones obtenidas para generar la soluci´on del problema original.

I

Es bottom up y no es recursivo.

I

Se guardan las soluciones de los subproblemas para no calcularlos m´as de una vez. Principio de optimalidad: un problema de optimizaci´on satisface el principio de optimalidad de Bellman si en una sucesi´on ´optima de decisiones o elecciones, cada subsucesi´on es a su vez ´optima. Es decir, si miramos una subsoluci´on de la soluci´on ´optima, debe ser soluci´on del subproblema asociado a esa subsoluci´on. Es condici´on necesaria para poder usar la t´ecnica de programaci´on din´amica.

La cantidad de sumas (y restas) de matrices es mucho mayor. I

I

El algoritmo asint´ oticamente m´as eficiente conocido a la fecha tiene una complejidad de O(n2,376 ) (Coppersmith y Winograd, 1987).

I I

Programaci´on Din´amica: ejemplos

I

Coeficientes binomiales

I

Producto de matrices

I

n k

Se cumple en camino m´ınimo (sin distancias negativos). No se cumple en camino m´aximo.

Coeficientes binomiales



Mochila 0/1.

I

Subsecuencia creciente m´axima

I

Comparaci´ on de secuencias de ADN

n k



=

   1   0

si k = 0 o k = n n−1 k−1



+



n−1 k



si 0 < k < n caso contrario

Coeficientes binomiales

0 1 2 3 4 .. .

0 1 1 1 1 1 .. .

k −1 k .. .

1 1 .. .

n−1 n

1 1

1

2

3

4

Coeficientes binomiales ···

k −1

k

1 1 1 1 ..

. 1 1

Coeficientes binomiales

0 1 2 3 4 .. .

0 1 1 1 1 1 .. .

k −1 k .. .

1 1 .. .

n−1 n

1 1

1 1 2 3

2

3

4

0 1 2 3 4 .. .

0 1 1 1 1 1 .. .

k −1 k .. .

1 1 .. .

n−1 n

1 1

1

2

1 2

1

3

4

···

k −1

k

1 1 ..

. 1 1

Coeficientes binomiales ···

k −1

k

1 1 1 ..

. 1 1

0 1 2 3 4 .. .

0 1 1 1 1 1 .. .

k −1 k .. .

1 1 .. .

n−1 n

1 1

1

2

3

1 2 3

1 3

1

4

···

k −1

k

1 ..

. 1 1

Coeficientes binomiales

0 1 2 3 4 .. .

0 1 1 1 1 1 .. .

k −1 k .. .

1 1 .. .

n−1 n

1 1

1 1 2 3 4

2

1 3

3

4

Coeficientes binomiales ···

k −1

k

1 1 ..

. 1 1

Coeficientes binomiales

0 1 2 3 4 .. .

0 1 1 1 1 1 .. .

k −1 k .. .

1 1 .. .

n−1 n

1 1

1 1 2 3 4

2

1 3 6

3

1 4

4

0 1 2 3 4 .. .

0 1 1 1 1 1 .. .

k −1 k .. .

1 1 .. .

n−1 n

1 1

1

2

3

1 2 3 4

1 3 6

1

4

···

k −1

k

1 ..

. 1 1

Coeficientes binomiales ···

k −1

k

1 ..

. 1 1

0 1 2 3 4 .. .

0 1 1 1 1 1 .. .

k −1 k .. .

1 1 .. .

n−1 n

1 1

1

2

3

4

1 2 3 4

1 3 6

1 4

1

···

..

k −1

k

. 1 1

Coeficientes binomiales algoritmo combinatorio(n,k) entrada: dos  enteros n y k n salida: k para i = 1 hasta n hacer A[i][0] ← 1 fin para para j = 0 hasta k hacer A[j][j] ← 1 fin para para i = 2 hasta n hacer para j = 2 hasta min(i − 1,k) hacer A[i][j] ← A[i − 1][j − 1] + A[i − 1][j] fin para fin para retornar A[n][k]

Multiplicaci´on de n matrices

M = M1 × M2 × . . . Mn Por la propiedad asociativa del producto de matrices esto puede hacerse de muchas formas. Queremos determinar la que minimiza el n´ umero de operaciones necesarias. Por ejemplo: las dimensiones de A es de 13 × 5, B de 5 × 89, C de 89 × 3 y D de 3 × 34. Tenemos I

((AB)C )D requiere 10582 multiplicaciones.

I

(AB)(CD) requiere 54201 multiplicaciones.

I

(A(BC ))D requiere 2856 multiplicaciones.

I

A((BC )D) requiere 4055 multiplicaciones.

I

A(B(CD)) requiere 26418 multiplicaciones.

Coeficientes binomiales

I

Funci´on recursiva (“dividir y conquistar”): I

I

Complejidad Ω(

n k



).

Programaci´on din´amica: I

Complejidad O(nk).

I

Espacio Θ(k): s´olo necesitamos almacenar la fila anterior de la que estamos calculando.

Multiplicaci´on de n matrices I

La mejor forma de multiplicar todas las matrices es multiplicar las matrices 1 a i por un lado y las matrices i + 1 a n por otro lado y luego multiplicar estos dos resultados para alg´ un 1 ≤ i ≤ n − 1.

I

En la soluci´on ´optima de M = M1 × M2 × . . . Mn , estos dos subproblemas, M1 × M2 × . . . Mi y Mi+1 × Mi+2 × . . . Mn deben estar resueltos de forma ´optima: se cumple el principio de optimalidad.

I

Llamamos m[i][j] soluci´on del subproblema Mi × Mi+1 × . . . Mj , es decir la cantidad m´ınima de multiplicaciones necesarias para calcular Mi × Mi+1 × . . . Mj .

Multiplicaci´on de n matrices

Multiplicaci´on de n matrices

Suponemos que las dimensiones de las matrices est´an dadas por un vector d ∈ N n+1 , tal que la matriz Mi tiene d[i − 1] filas y d[i] columnas para 1 ≤ i ≤ n. Entonces: I

Para i = 1, 2, . . . , n, m[i][i] = 0

I

Para i = 1, 2, . . . , n − 1, m[i][i + 1] = d[i − 1]d[i]d[i + 1]

I

Para s = 2, . . . , n − 1, i = 1, 2, . . . , n − s, m[i][i+s] =

I

¿Algoritmo?

I

¿Complejidad?

m´ın (m[i][k]+m[k+1][i+s]+d[ i−1]d[k]d[i+s])

i≤k

Get in touch

Social

© Copyright 2013 - 2024 MYDOKUMENT.COM - All rights reserved.