Está en la página 1de 46

Anlisis de a Algoritmos Andrea Rodr guez Dividir y Vencer Achicar y Vencer

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

Por una constante Por un factor Por una variable

Transformar y Vencer
Simplicacin o Representacin o Reduccin o

I Semestre - 2011

Anlisis de a Algoritmos Andrea Rodr guez Dividir y Vencer

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

Anlisis de a Algoritmos Andrea Rodr guez Dividir y Vencer Achicar y Vencer

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.

Por una constante Por un factor Por una variable

Transformar y Vencer
Simplicacin o Representacin o Reduccin o

Anlisis de a Algoritmos Andrea Rodr guez Dividir y Vencer

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)

Anlisis de a Algoritmos Andrea Rodr guez Dividir y Vencer 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 Andrea Rodr guez

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 ).

Dividir y Vencer 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 Andrea Rodr guez Dividir y Vencer

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

Anlisis de a Algoritmos Andrea Rodr guez Dividir y Vencer Achicar y Vencer


Por una constante Por un factor Por una variable

Dividir y vencers: ejemplos a 1. Ordenacin: mergesort y quicksort o 2. Mediana 3. Multiplicacin de matrices o

Transformar y Vencer
Simplicacin o Representacin o Reduccin o

Anlisis de a Algoritmos Andrea Rodr guez Dividir y Vencer

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

Andrea Rodr guez Dividir y Vencer Achicar y Vencer


Por una constante Por un factor Por una variable

1 2 3 4 5 6 7 8 9 10 11 12 13

Transformar y Vencer
Simplicacin o Representacin o Reduccin o

Anlisis de a Algoritmos Andrea Rodr guez Dividir y Vencer Achicar y Vencer

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).

Por una constante Por un factor Por una variable

Transformar y Vencer
Simplicacin o Representacin o Reduccin o

Anlisis de a Algoritmos Andrea Rodr guez

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

Dividir y Vencer 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 Andrea Rodr guez Dividir y Vencer Achicar y Vencer

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

Por una constante Por un factor Por una variable

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

Andrea Rodr guez Dividir y Vencer Achicar y Vencer


Por una constante Por un factor Por una variable

1 2 3 4 5 6 7 8 9 10 11 12 13

Transformar y Vencer
Simplicacin o Representacin o Reduccin o

Anlisis de a Algoritmos Andrea Rodr guez Dividir y Vencer Achicar y Vencer

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

Por una constante Por un factor Por una variable

Transformar y Vencer
Simplicacin o Representacin o Reduccin o

Anlisis de a Algoritmos Andrea Rodr guez

Ordenacin: cota m o nima


Dividir y Vencer

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

Anlisis de a Algoritmos Andrea Rodr guez Dividir y Vencer

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 =

Anlisis de a Algoritmos Andrea Rodr guez

Multiplicacin de matrices (cont) o


Entonces podemos usar dividir para conquistar donde: Z = AE + BG CE + DG AF + BH CF + DH

Dividir y Vencer Achicar y Vencer


Por una constante Por un factor Por una variable

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 ).

Anlisis de a Algoritmos Andrea Rodr guez Dividir y Vencer

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

Achicar y Vencer: Clasicacin y ejemplos o


Achica por una constante (usualmente por 1): ordenamiento por insercin o algoritmo de recorrido de grafos (DFS y BFS) ordenamiento topolgico o .... Achica por un factor constante (usualmente por la mitad) bsqueda binaria y mtodo de biseccin u e o exponenciacin al cuadrado o problema de la moneda falsa Achica por un tamao variable n algoritmo de Euclides seleccin por particin o o juegos tipo Nim

Andrea Rodr guez Dividir y Vencer 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 Andrea Rodr guez Dividir y Vencer Achicar y Vencer

Diferencias con otros enfoques


Para el problema de exponenciacin: o Fuerza bruta: n 1 muliplicaciones Divide y vencers: 2T (n/2) + 1 = n 1 a Achica por una constante: T (n 1) + 1 = n 1 Achica por un factor: T (n/a) + a 1 = (a 1)loga n = log2 n, cuando a = 2.

Por una constante Por un factor Por una variable

Transformar y Vencer
Simplicacin o Representacin o Reduccin o

Anlisis de a Algoritmos Andrea Rodr guez Dividir y Vencer

Ordenamiento por Insercin o


Procedure Insertion Sort (A) for j = 2 to length[A] do [ i := j 1 key := A[j] while i > 0 and A[i] > key do [ A[i + 1] := A[i] i := i 1] A[i + 1] := key ] end Insertion Sort

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

Ordenamiento por Insercin: anlisis o a


Eciencia: Tpeor (n) Tpromedio (n) Tmejor (n) = = n(n 1) (n2 ) n /4 (n ) n 1 (n)
2 2

Andrea Rodr guez Dividir y Vencer Achicar y Vencer


Por una constante Por un factor Por una variable

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

= (j + 1)/2. Conclusin, para el caso promedio sobre o


j+1 n j=2 2

todas las claves se tiene Estable

n2 +3n4 4

El mejor ordenamiento elemental.

Anlisis de a Algoritmos Andrea Rodr guez

Ordenamiento por Insercin: correctitud o


Una bosquejo de la prueba de correctitud es el siguiente: Se tiene que el primer loop LI 1 cumple que j = k y A[1] A[2] A[k 1]. El cuerpo o interior del loop contiene otro loop while LI2. Sea A [1 . . . n] la lista al comenzar LI2. Al momento de alcanzar el encabezado de LI2, entonces: A[1 . . . i + 1] A[i + 2 . . . j] = = A [1 . . . i + 1] A [i + 1 . . . j 1]

Dividir y Vencer Achicar y Vencer


Por una constante Por un factor Por una variable

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.

Anlisis de a Algoritmos Andrea Rodr guez Dividir y Vencer Achicar y Vencer


Por una constante Por un factor Por una variable

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

Anlisis de a Algoritmos Andrea Rodr guez Dividir y Vencer Achicar y Vencer

Depth-First Search (DFS)


DFS puede ser implementado con grafos representados por: matrices de adyacencia: (|V |2 ) lista de adyacencia: (|V | + |E |) Genera dos ordenamientos distintos de vrtices: e orden en el cual los vrtices son encontrados (push en la pila ) e orden en el cual los vrtices son eliminados de la pila (pop de la pila e cuando ya no tiene nodos adyacentes que visitar )

Por una constante Por un factor Por una variable

Transformar y Vencer
Simplicacin o Representacin o Reduccin o

Anlisis de a Algoritmos Andrea Rodr guez Dividir y Vencer Achicar y Vencer


Por una constante Por un factor Por una variable

Breadth-First Search (BFS)


BFS tiene la misma eciencia que DFS matrices de adyacencia: (|V |2 ) lista de adyacencia: (|V | + |E |) Genera un unico orden de vrtices. e

Transformar y Vencer
Simplicacin o Representacin o Reduccin o

Anlisis de a Algoritmos Andrea Rodr guez

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

Dividir y Vencer Achicar y Vencer


Por una constante Por un factor Por una variable

Transformar y Vencer
Simplicacin o Representacin o Reduccin o

2 Ordenamiento topolgico

3 2 1 4 5

Anlisis de a Algoritmos Andrea Rodr guez

Ordenamiento Topolgico (cont) o


Una alternativa de algoritmo es usar el DFS algoritm. El orden reverso detecta cuando no es un dag al encontrarse con un arco entrante. Otra alternativa es un algoritmo de remocin de origen (source removal o algorithm): En forma iterativa identicar y remover un origen (un vrtice con no arco entrante) y todos los arcos incidentes a l hasta no e e encontrar arcos o que no exista un vrtice de origen restante. Para e encontrar un vrtice origen invierta la lista de adyacencia por cada e vrtice para contar el nmero de arcos entrantes, al recorrer cada lista e u de adyacencia y contar el nmero de veces que aparece un vrtice en u e esas listas. Para remover un origen, decremente el contador en cada uno de sus vecinos por 1. Si al nal tenemos que an no se han recorrido u todos los vrtices pero no hay ninguno que sea de origen, entonces no e tenemos un dag.

Dividir y Vencer 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 Andrea Rodr guez Dividir y Vencer Achicar y Vencer


Por una constante Por un factor Por una variable

Exponenciacin por el cuadrado o


Resolver el exponencial de un nmero se puede resolver al aplicar en forma u recursiva las siguientes frmulas: o Para valores pares de n: an = (an/2 )2 , donde n > 0, a0 = 1. Para valores impares de n: an = (a(n1)/2 )2 a, donde n > 0, a0 = 1. La recurrencia queda dada entonces por T (n) = T ( n/2 ) + f (n), donde f (n) (1) y T (0) = 0. Por teorema maestro entonces T (n) (logn).

Transformar y Vencer
Simplicacin o Representacin o Reduccin o

Anlisis de a Algoritmos Andrea Rodr guez Dividir y Vencer

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

Anlisis de a Algoritmos Andrea Rodr guez

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 |

Dividir y Vencer 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 Andrea Rodr guez Dividir y Vencer

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

Anlisis de a Algoritmos Andrea Rodr guez Dividir y Vencer

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

Anlisis de a Algoritmos Andrea Rodr guez Dividir y Vencer Achicar y Vencer


Por una constante Por un factor Por una variable

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

Anlisis de a Algoritmos Andrea Rodr guez Dividir y Vencer

One-Pile Nim (cont.)


Considere un m = 4 y n = 10.

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

Gana siempre el primero si n no es um mltiplo de m + 1. u

Anlisis de a Algoritmos Andrea Rodr guez Dividir y Vencer Achicar y Vencer

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

Por una constante Por un factor Por una variable

Transformar y Vencer
Simplicacin o Representacin o Reduccin o

Anlisis de a Algoritmos Andrea Rodr guez Dividir y Vencer Achicar y Vencer


Por una constante Por un factor Por una variable

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

Anlisis de a Algoritmos Andrea Rodr guez Dividir y Vencer Achicar y Vencer

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.

Por una constante Por un factor Por una variable

Transformar y Vencer
Simplicacin o Representacin o Reduccin o

Anlisis de a Algoritmos Andrea Rodr guez Dividir y Vencer Achicar y Vencer


Por una constante Por un factor Por una variable

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

Anlisis de a Algoritmos Andrea Rodr guez Dividir y Vencer Achicar y Vencer

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

Por una constante Por un factor Por una variable

Transformar y Vencer
Simplicacin o Representacin o Reduccin o

Anlisis de a Algoritmos Andrea Rodr guez Dividir y Vencer

Cambio de representacin: Regla de Horner o


La evaluacin de un polinomio de la forma: o p(x) = an x + an1 x se puede formular como p(x) = (. . . (an x + an1 )x + . . . )x + a0 Un ejemplo es el siguiente: p(x) = = 2x x + 3x + x 5 = x(2x x 3x + 1) 5 x(x(2x x 3) + 1) 5 = x(x(x(2x 1) + 3) + 1) 5
3 2 4 3 2 3 2 n n1

Achicar y Vencer
Por una constante Por un factor Por una variable

+ + a1 x + a0

Transformar y Vencer
Simplicacin o Representacin o Reduccin o

Anlisis de a Algoritmos Andrea Rodr guez Dividir y Vencer Achicar y Vencer


Por una constante Por un factor Por una variable

Regla de Horner: Algoritm


Algoritmo p P[n]; for i n 1 to 0 do ; p x p + P[i]; endfor

Transformar y Vencer
Simplicacin o Representacin o Reduccin o

return p end

Eciencia, el nmero de multiplicaciones = nmero de sumas = (n) u u

Anlisis de a Algoritmos Andrea Rodr guez Dividir y Vencer

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

Eciencia: (b 1) T (n) 2(b 1), donde b = log2 n + 1

Anlisis de a Algoritmos Andrea Rodr guez

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

Dividir y Vencer 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 Andrea Rodr guez Dividir y Vencer Achicar y Vencer

Reduccin a problemas de grafos o


Algoritmos tales como el DFS o BFS pueden ser usados al hacer la reduccin a una representacin de grafos. o o Grafos de estado son usados con mucha frecuencia en inteligencia articial. En estos grafos los vrtices representan estados y los arcos e representan transiciones vlidas entre estados. Usualmente se usa un a vrtice original y uno de destino. e

Por una constante Por un factor Por una variable

Transformar y Vencer
Simplicacin o Representacin o Reduccin o

También podría gustarte