Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Tcnicas de Diseo I e n
M. Andrea Rodr guez-Tastets Ayudante: Erick Elejalde
Universidad de Concepcin,Chile o www.inf.udec.cl\ andrea andrea@udec.cl
Transformar y Vencer
Simplicacin o Representacin o Reduccin o
I Semestre - 2011
Introduccin o Al terminar esta seccin del curso los alumnos debern ser capaces o a de Comprender las siguientes tcnicas de diseo: divide y e n vencers, achica y vencers, y transforma y vencers. a a a Analizar la complejidad de estos algoritmos. Aplicar algunas de estas tcnicas en la resolucin de e o problemas.
Achicar y Vencer
Por una constante Por un factor Por una variable
Transformar y Vencer
Simplicacin o Representacin o Reduccin o
Dividir y vencer Es una tcnica de diseo muy conocida que se caracteriza por: e n 1. Divide una instancia del problema en dos o ms instancias de a menor tamao. n 2. Soluciona los problemas pequeos recursivamente. n 3. Obtiene una solucin a la instancia original combinando estas o soluciones.
Transformar y Vencer
Simplicacin o Representacin o Reduccin o
Multiplicacin o El producto de dos nmeros complejos queda dado por u (a + bi)(c + di) = ac bd + (bc + ad)i. Lo que parece que implica multiplicacin de 4 nmero reales, pero o u que de hecho necesita solo 3 ya que: bc + ad = (a + b)(c + d) ac bd. Entonces se reduce de 4 multiplicaciones a 3 multiplicaciones. Esto no parece signicativo a menos que consideremos su aplicacin recursiva. o
Achicar y Vencer
Por una constante Por un factor Por una variable
Transformar y Vencer
Simplicacin o Representacin o Reduccin o
Multiplicacin (cont.) o
Ahora apliquemos esto a multiplicaciones de enteros de n bits. Consideremos dos enteros x e y de enteros de n bits, y asumamos por conveniencia que n es una potencia de 2. El primer paso para hacer la multiplicacin es dividir cada o nmero en dos partes, izquierda (xl e yl ) y derecha (xr e yr ) con n/2 bits de u largo. Entonces x = 2n/2 xl + xr y = 2n/2 yl + yr El producto entonces puede ser expresado como: xy = (2n/2 xl + xr )(2n/2 yl + yr ) = 2n xl y+ 2n/2 (xl yr + xr yl ) + xr yr En esta expresin la suma toma un tiempo lineal, tal como la multiplicacin o o por la potencia de dos que es solo un shift (corrimiento). Las operaciones bsicas (signicativas) aqu son entonces las n/2 multiplicaciones: a xl yl , xl yr , xr yl , xr yr , lo cual puede ser realizado como 4 llamadas recursivas. Entonces, la multiplicacin consiste en dividir el problema en 4 de tamao n/2 o n y entonces evaluar la expressin de sumas de tiempo O(n). En un sistema o recurrente: T (n) = 4T (n/2) + O(n)
Transformar y Vencer
Simplicacin o Representacin o Reduccin o
Multiplicacin (cont.) o
Ahora consideremos la estrategia presentada inicialmente para nmeros u complejos. Se pueden hacer las multiplicaciones de xl yl y xr yr y (xl + xr )(yl + yr ), ya que xl yr + xr yl = (xl + xr )(yl + yr ) xl yl xr yr . El algoritmos entonces queda dado por:
Algoritmo multiply (x, y ) begin n max(size of x, size of y ); if (n = 1) then return xy ; xl , xr los n/2 bits ms signicativo y los n/2 bit menos signicativos de x; a yl , yr los n/2 bits ms signicativo y los n/2 bit menos signicativos de y ; a P1 multiply (xl , yl ); P2 multiply (xr , yr ); P3 multiply (xl + xr , yl + yr ); return P1 2n + (P3 P1 P2 ) 2n/2 + P2 end Esto resulta en una recurrencia de T (n) = 3T (n/2) + O(n) con un orden de complejidad de O(n1,59 ).
Transformar y Vencer
Simplicacin o Representacin o Reduccin o
Recurrencia general de dividir y vencers a f (n) = af (n/b) + h(n) Donde h(n) (nd ), d 0 Teorema Maestro: If a < b d , f (n) (nd ) If a = b d , f (n) (nd logn) If a > b d , f (n) (nlogb a )
Achicar y Vencer
Por una constante Por un factor Por una variable
Transformar y Vencer
Simplicacin o Representacin o Reduccin o
Transformar y Vencer
Simplicacin o Representacin o Reduccin o
Ordenacin: MergeSort o Procedure Merge Sort (A, p, r ) if p < r then [ q := (p + r )/2 Merge Sort(A, p, q) Merge Sort(A, q + 1, r ) Merge(A, p, q, r )] end Merge Sort
Achicar y Vencer
Por una constante Por un factor Por una variable
1 2 3 4 5
Transformar y Vencer
Simplicacin o Representacin o Reduccin o
Anlisis de a Algoritmos
MergeSort: Mezcla Procedure Merge(A, p, qr ) n1 := q p + 1 n2 := r q for i = 1 to n1 do L[i] := A[p + i 1] for i = 1 to n2 do R[i] := A[q + i] L[n1 + 1] = R[n2 + 1] = i := j = 1 for k = p to r do if L[i] R[j] then[ A[k] := L[i] i := i + 1] else A[k] := R[j] j := j + 1] end Merge
1 2 3 4 5 6 7 8 9 10 11 12 13
Transformar y Vencer
Simplicacin o Representacin o Reduccin o
MergeSort: Anlisis a En sistema recurrente en todos los posibles casos del mergeSort es: T (n) = 2T (n/2) + (n), T (1) = 0 Entonces en este caso el orden de complejidad queda dado por O(nlogn).
Transformar y Vencer
Simplicacin o Representacin o Reduccin o
Ordenacin: QuickSort o La idea principal de este ordenamiento es: Seleccione un pivote - el primer elemento en la implementacin considerada o Reordene la lista de manera que todos los elementos en las primeras s posiciones son menores o iguales al pivote y todos los elementos en las n s posiciones son mayores o iguales que el pivote Intercambie el pivote con el ultimo elemento en el primer subarreglo. El pivote queda en su posicin nal o Ordene los dos subarreglos recursivamente
Transformar y Vencer
Simplicacin o Representacin o Reduccin o
Ordenamiento Quicksort Procedure QuickSort (A, p, r ) if p < r then [ q := Partition(A, p, r ) QuickSort(A, p, q) QuickSort(A, q + 1, r ) ] end QuickSort
Transformar y Vencer
Simplicacin o Representacin o Reduccin o
1 2 3 4
Anlisis de a Algoritmos
Particin del Quicksort o Procedure Partition(A, p, r ) x := A[p] i := p 1 j := r + 1 while true do [ repeat j := j 1 until A[j] x repeat i := i + 1 until A[i] x if i < j then[ temp := A[j] A[j] := A[i] A[i] := temp] else return j ] end Partition
1 2 3 4 5 6 7 8 9 10 11 12 13
Transformar y Vencer
Simplicacin o Representacin o Reduccin o
Quicksort: Anlisis a Mejor caso (y caso promedio): T (n) = 2T (n/2) + (n), T (1) = 0 Peor caso: T (n) = T (n 1) + (n), T (1) = 0
Transformar y Vencer
Simplicacin o Representacin o Reduccin o
Algoritmos de ordenamiento pueden ser vistos como rboles de decisin. a o Asuma un arreglo de 3 elementos. Entonces el siguiente rbol muestra el a proceso de ordenamiento.
a1<a2? No a1<a3? No a2<a3? 213 a1<a3? Si a2<a3? No
Achicar y Vencer
Por una constante Por un factor Por una variable
Transformar y Vencer
Simplicacin o Representacin o Reduccin o
123
321
231
312
132
La profundidad del rbol representa el nmero de comparaciones desde la ra a u z hasta la hoja. Cada hoja representa una posible permutacin. Entonces el rbol o a tiene n! posibles hojas. Ya que un rbol binario de profundidad h tiene a lo a ms 2h hojas, entonces ogn! 2h , y despejando h logn!, osea es (nlogn). a
Multiplicacin de matrices o
El producto de dos matrices X e Y de n n es una tercera matriz de n n Z = XY , con la entrada (i, j) tal que Zi,j = n Xi,j Yi,j . Esto implica un k=1 orden O(n3 ). Sin embargo, la multiplicacin de matrices se puede dividir en o subproblemas. Para ello, redena X e Y de la siguiente forma: X = A C E G B D F H
Achicar y Vencer
Por una constante Por un factor Por una variable
Transformar y Vencer
Simplicacin o Representacin o Reduccin o
Y =
Esto tiene un costo de T (n) = 8T (n/2) + O(n2 ), lo que es O(n3 ), igual que el algoritmo normal. Sin embargo, se puede mejorar usando la idea de la multiplicacin de enteros. o XY = Donde: P1 P2 P3 P4 = = = = A(F H) (A + B)H (C + D)E D(G E ) P5 = (A + D)(E + H) P6 = (B D)(G + H) P7 = (A C )(E + F ) P5 + P4 P2 + P6 P3 + P4 P1 + P2 P1 + P5 P3 P7
Transformar y Vencer
Simplicacin o Representacin o Reduccin o
Lo que tiene un costo de T (n) = 7T (n/2) + O(n2 ), que por el teorema maestro es O(nlog2 7 O(n2,81 ).
Achicar y Vencer
Reduce la instancia del problema a una instancia ms pequeas del a n mismo problema. Resuelve la instancia pequea n Extiende la solucin de la instancia pequea para obtener la solucin a o n o la instancia original Puede ser implementado top o bottom up Tambin conocido como enfoque inductivo o incremental e
Achicar y Vencer
Por una constante Por un factor Por una variable
Transformar y Vencer
Simplicacin o Representacin o Reduccin o
Anlisis de a Algoritmos
Transformar y Vencer
Simplicacin o Representacin o Reduccin o
Transformar y Vencer
Simplicacin o Representacin o Reduccin o
Achicar y Vencer
Por una constante Por un factor Por una variable
1 2 3 4 5 6 7
Transformar y Vencer
Simplicacin o Representacin o Reduccin o
Anlisis de a Algoritmos
Transformar y Vencer
Simplicacin o Representacin o Reduccin o
El caso promedio se obtiene asumiendo que para cada posible clave es igualmente probable que la clave est en cada uno de las posiciones del e orden. Por ejemplo, para la cuarta clave a analizar, es igualmente probable que deba estar en la 1,2,3 o 4ta posicin. Entonces el nmero o u esperado de intentos (comparaciones) para poder ubicar la clave j es: E (j) =
j i=1
n2 +3n4 4
Transformar y Vencer
Simplicacin o Representacin o Reduccin o
Se puede probar la correctitud de LI2 teniendo en cuenta que al terminar LI2, o i = 0 o A[i] key . Usando LI2 se prueba LI1.
Recorrido de un grafo
Muchas algoritmos necesitan recorrer un grafo.
Procedure DEPTH FIRST SEARCH(v ) A(v ) := 1 for each w V adjacent to v do if A(w ) = 0 then call DEPTH FIRST SEARCH(w ) end DEPTH FIRST SEARCH(v ) Procedure BREADTH FIRST SEARCH(v ) A(v ) := 1 inicializa Q con vrtice v e while Q not empty do[ call DELETE (v , Q) for all vrtices w adjacent to v do [ e if A(w ) = 0 then [ call ADD(w , Q) call A(w ) := 1]]] end BREADTH FIRST SEARCH(v )
Transformar y Vencer
Simplicacin o Representacin o Reduccin o
Transformar y Vencer
Simplicacin o Representacin o Reduccin o
Transformar y Vencer
Simplicacin o Representacin o Reduccin o
Ordenamiento Topolgico o
Sea G un grafo dirigo y sin ciclos, G es denominado dag. Los vrtices del dag e pueden ser linealmente ordenados de manera que por cada arco, su vrtice de e comienzo sea listado antes que su vrtice terminal. La condicin de no ser e o ac clico es condicin necesaria para el ordenamiento topolgico. o o
Transformar y Vencer
Simplicacin o Representacin o Reduccin o
2 Ordenamiento topolgico
3 2 1 4 5
Transformar y Vencer
Simplicacin o Representacin o Reduccin o
Transformar y Vencer
Simplicacin o Representacin o Reduccin o
Algoritmo de Euclides
El algorito de Euclides se basa en una aplicacin recursiva de: o gcd(m, n) = gcd(n, m mod n) Ejemplo: : gcd(80, 44) = gcd(44, 36) = gcd(36, 8) = gcd(8, 4) = gcd(4, 0) = 4 Un puede probar que el tamao, medido por el primer nmero decrese al n u menos la mitad despus de dos iteraciones consecutivas, por lo que e T (n) O(logn). Demo: Asuma m > n,y considere m y m mod n: (i) Caso 1: Si n m/2, entonces m mod n < n m/2. (ii) Caso 2: Si n > m/2, entonces m mod n = m n < m/2.
Achicar y Vencer
Por una constante Por un factor Por una variable
Transformar y Vencer
Simplicacin o Representacin o Reduccin o
Mediana
La mediana es el nmero en un arreglo que tiene la mitad de nmeros mayores u u y la mitad menores. La forma de determinar la mediana es simple. Basta con ordenarlos. El problema es que ordenar toma en el mejor caso O(nlogn), cuando nos gustar que fuera lineal. El ordenar hace bastante ms trabajo a a que simplemente obtener la mediana, no nos interesa el orden relativa de los dems nmeros en el arreglo. a u Una alternativa es la siguiente. Dado un arreglo S y un valor cualquier v , siempre se puede dividir el arreglo en tres sublistas Sl , Sr y Sv , representado el conjunto de valores que son menores, mayores o iguales a v , respectivamente. Entonces la bsqueda se reduce a una de las sublistas. Esto se puede u generalizar de esta manera, donde k representa el ksimo valor a seleccionar: e selection(Sl , k) v seleccion(S, k) = selection(SR , k |Sl | |Sv |) if k |Sl | if |Sl | < k |Sl | + |Sv | if k > |Sr |
Transformar y Vencer
Simplicacin o Representacin o Reduccin o
Mediana (cont.)
Las tres sublistas Sl , Sr y Sv , pueden obtenerse en forma lineal. Entonces se aplica recursividad en las sublistas. El efecto de este split es achicar el nmero u de elementos desde S a lo ms a max(|Sl |, |Sr |). El algoritmo es entonces a especicado excepto por el problema de escoger v , donde lo ideal es que se escoja de manera que permita achicar el arreglo sustancialmente, idealmente |Sl |, |Sr | 1/2|S|. En ese caso: T (n) = T (n/2) + O(n), T (1) = 0 Esto signica que justo escogemos la mediana, que es el caso ptimo. A o diferencia de eso, asumimos un esquema razonablemente bueno, una eleccin o aleatoria.
Achicar y Vencer
Por una constante Por un factor Por una variable
Transformar y Vencer
Simplicacin o Representacin o Reduccin o
Mediana: anlisis a
El tiempo de ejecucin depende de la eleccin de v . En el peor caso, si seleccionamos el nmero mayor o o o u el nmero menos, tenemos que el problema solo se achica en un elemento. Esto es: u n + (n 1) + (n 2) + = (n ) Por el otro lado, en el mejor caso seleccionamos un v que divide el problema en la mitad, con un costo de O(n). El promedio entonces cae entre O(n) y (n2 ). Distingamos un caso bueno de uno malo. Diremos que un caso bueno es uno donde el valor v cae entre un 25 a un 75 percentil del arreglo. Esto asegura que tanto Sl como Sr no pueden tener ms de 3/4 a elementos de S. Esto es, un 50 % de los elementos caen entre este rango. Dada una eleccin aleatoria, la pregunta entonces es cuntas iteraciones en promedio necesito para o a tener un valor v ? Esto se puede determinar con el siguiente razonamiento: Sea E el nmero esperado de u intentos antes de obtener un buen v . Ciertamente necesitamos al menos 1. Si a la primera no resulta, entonces se necesita repetir. Entonces E = 1 + 1/2E , lo que nos lleva a E = 2. Por lo tanto, nos queda que el tiempo esperado de T (n) es T (n) T (3/4n) + O(n), lo cual es de orden O(n).
2
Achicar y Vencer
Por una constante Por un factor Por una variable
Transformar y Vencer
Simplicacin o Representacin o Reduccin o
One-Pile Nim
Hay una pila de n palillos. Un jugador toma su turno y remueve de la pila a menos 1 y a lo ms m palillos a (se puede variar el nmero de palillos removidos). El ganador es el jugador que toma la ultima pila. u Quin gana: el que se mueve primero o el segundo, si es que ambos hacen el mejor movimiento posible?. e Uno lo puede mirar en forma inversa el proceso.
Transformar y Vencer
Simplicacin o Representacin o Reduccin o
Achicar y Vencer
Por una constante Por un factor Por una variable
Transformar y Vencer
Simplicacin o Representacin o Reduccin o
2 0 3 5
7 10 8
Transformar y Vencer
Un grupo de tcnica que resuelven un problema por transformacin son: e o Tranforma a una instancia ms simple o ms conveniente el mismo a a problema (simplicacin) : pre ordenamiento o Transforma a una representacin diferente de la misma instancia o (cambio de representacin) : rboles de bsqueda balanceados, heap, o a u heapsort Transforma un problema diferente para el cual un algoritmo existe (reduccin del problema) : reduccin a problemas de grafos o o
Transformar y Vencer
Simplicacin o Representacin o Reduccin o
Pre ordenamiento
Al ordenar muchas instancias de un problemas pueden ser transformadas a una forma ms simple. Algunos problemas que consideran lista son ms fciles de a a a resolver (pero no necesariamente menos costos) cuando estn ordenados: a bsqueda u Calcular la mediana (problema de seleccin que resulta ser un caso o donde el pre ordenamiento no lo hace ms eciente) a Encontrar elementos repetidos Convex Hull y conjunto de puntos ms cercanos. a Eciencia: Agrega el overhead de un preprocesamiento de costo (nlogn), pero usualmente reduce el problema por al menos una base de clase de eciencia (e.j., (n2 ) (n)).
Transformar y Vencer
Simplicacin o Representacin o Reduccin o
Elementos Repetidos
Con pre ordenamiento, usa el mergesort para ordenar (nlogn) y luego busca los elementos adyacente repetidos con costo (n). Conclusin, el o problema se resuelve con orden (nlogn). Por fuerza bruta, se comparan cada elemento, con un orden de (n2 ). En este caso, pre ordenamiento lleva a una mayor eciencia.
Transformar y Vencer
Simplicacin o Representacin o Reduccin o
Bsqueda u
La fuerza bruta para m bsquedas en n elementos es (n m) u Preordenadas m bsqueda en n elementos es O(nlogn + mlogn). u
Transformar y Vencer
Simplicacin o Representacin o Reduccin o
Arboles
La bsqueda, insercin y eliminacin en un rbol de bsqueda u o o a u balanceado es (logn), y no balanceado (n). Instancias simplicadas: AVL y rboles red and black restringen el a desbalance haciendo rotaciones. Los AVl y Red and Black son casos en que se simplica el balanceo. Cambio de representacin: B-trees tienden a un balanceo perfecto o permitiendo ms de un elemento en un nodo. Un heapsort es un rbol a a binario completo donde el padre es mayor a cualquiera de sus hijos en el rbol. Entonces, un subrbol de un heap es tambin un heap. a a e Tanto AVL, Red and Black, Btree y Heapsort fueron vistos en estructuras de datos, material al cual se hace referencia para su anlisis. a
Transformar y Vencer
Simplicacin o Representacin o Reduccin o
Achicar y Vencer
Por una constante Por un factor Por una variable
+ + a1 x + a0
Transformar y Vencer
Simplicacin o Representacin o Reduccin o
Transformar y Vencer
Simplicacin o Representacin o Reduccin o
return p end
Cmputo de an o
Para este problema usar la exponenciacin binaria de izquierda a derecha que sigue el siguiente o procedimiento: Inicialize el producto acumulador en 1. Recorra los d gitos binarios de la exponenciacin de izquierda a derecha. Si el d o gito binario actual es cero, aplique el cuadrado al acumulador (S), si es 1, aplique el cuadrado del acumulador y multiplique por a (SM). Ejemplo: Sea a13 , donde n = 13 = 1101. Entonces, las iteraciones son: 1 12 a = a 1 (a2 )a = a3 0 (a3 )2 = a6 1 (a6 )2 a = a1 3
Achicar y Vencer
Por una constante Por un factor Por una variable
Transformar y Vencer
Simplicacin o Representacin o Reduccin o
Reduccin de problema o
Si necesitas resolver un problema, redcelo a uno que conozcas como u resolver. Se usa en teor de complejidad para clasicar problemas. a Para que sea de valor prctico, el tiempo combinado de la a transformacin y la resolcuin del otro problema debe menor que el o o tiempo de resolver el problema por otro mtodo. e Ejemplo 1: el m nimo comn mltiplo (LCM) de dos positivos nmeros u u u m y n es el entero ms pequeo divisible (MCM) por ambos m y n. El a n problema de reduccin entonces es: LCM(m, n) = m n/MCM(m, n). o Ejemplo 2: El problema de maximizacin se puede ver como el converso o de la minimizacin : minf (x) = max[f (x)] o
Transformar y Vencer
Simplicacin o Representacin o Reduccin o
Transformar y Vencer
Simplicacin o Representacin o Reduccin o