3-Divide y Venceras

Embed Size (px)

Citation preview

J . Campos- C.P.S. Es qu emasalgort micos - Divide y ven cer sP g. 1Divide y vencersv Introduccin 2v La bsqueda dicotmica 8v La ordenacin por fusin 13v El algoritmo de ordenacin de Hoare 15v Algoritmos de seleccin y de bsqueda de la mediana 18v Multiplicacin de enteros grandes 22v Potenciacin de enteros 29v Introduccin a la criptografa 36v Multiplicacin de matrices 47v Calendario de un campeonato 52J . Campos- C.P.S. Es qu emasalgort micos - Divide y ven cer sP g. 2El esquema divide y vencers:Introduccinv Tcnica de diseo de algoritmos divide y vencers: descomponer el ejemplar a resolver en un cierto nmero de subejemplares ms pequeos del mismo problema; resolver independientemente cada subejemplar; combinar los resultados obtenidos para construir la solucin del ejemplar original.aplicar esta tcnica recursivamenteJ . Campos- C.P.S. Es qu emasalgort micos - Divide y ven cer sP g. 3v Esquema genrico:v Si k=1, el esquema anterior se llama tcnica de reduccin.funcin divide_y_vencers(x:tx) devuelve tyvariables x1,,xk:tx; y1,,yk:typrincipiosi x es suficientemente simpleentonces devuelve solucin_simple(x)sinodescomponer x en x1,,xk;para i:=1 hasta k haceryi:=divide_y_vencers(xi)fpara;devuelve combinar(y1,,yk)fsifinfuncin divide_y_vencers(x:tx) devuelve tyvariables x1,,xk:tx; y1,,yk:typrincipiosi x es suficientemente simpleentonces devuelve solucin_simple(x)sinodescomponer x en x1,,xk;para i:=1 hasta k haceryi:=divide_y_vencers(xi)fpara;devuelve combinar(y1,,yk)fsifinEl esquema divide y vencers:IntroduccinJ . Campos- C.P.S. Es qu emasalgort micos - Divide y ven cer sP g. 4v Sobre el coste computacional: Sea un algoritmo A que emplea un tiempocuadrtico. Sea c una constante tal que una implementacinparticular de A emplea un tiempopara un ejemplar de tamao n. Supongamos que A se puede descomponer en tres subejemplares de tamao n/ 2], resolverlos y combinar su resultados para resolver A. Sea d una constante tal que el tiempo empleado en la descomposicin y combinacin es t(n)dn.tA(n)cn2El esquema divide y vencers:IntroduccinJ . Campos- C.P.S. Es qu emasalgort micos - Divide y ven cer sP g. 5 La utilizacin de esta particin da lugar a un nuevo algoritmo B con un tiempo: Luego B es un 25% ms rpido que A. Si se aplica a B la misma tcnica de descomposi-cin se obtiene un algoritmo C con tiempo: Donde tA(n) es el tiempo del algoritmo simple, n0es el umbral por encima del cual el algoritmo se usa recursivamente y t(n) el tiempo de la descomposicin y combinacin. La solucin de la ecuacin en recurrencias da un tiempo para el algoritmo C de nlog 3 n1,59. tC(n) tA(n) sin n0

3tCn / 2 ]( )+t (n) en otro caso ' tB(n) 3tAn / 2 ]( )+t (n) 3cn +12| . ` , 2+dn34cn2+32c +d| . ` , n +34cEl esquema divide y vencers:IntroduccinJ . Campos- C.P.S. Es qu emasalgort micos - Divide y ven cer sP g. 6v Recordaruna de las ecuaciones en recurrenciasespecialmente til para el anlisis de algoritmos de divide y vencers: La solucin de la ecuacinT(n) = aT(n/ b) + (nklogpn)con a1, b>1, p0 esEl esquema divide y vencers:Introduccin T (n) O(nlogb a), sia> bkO(nklog p+ 1n) , sia bkO(nklog pn) , sia< bk ' J . Campos- C.P.S. Es qu emasalgort micos - Divide y ven cer sP g. 7v Sobre el clculo del umbral ptimo: Es un problema complejo. Para un mismo problema, vara con la imple-mentacin concreta y vara con el valor de n. Puede estimarse empricamente (tablas,)... ... o tericamente: calculando el n para el que la solucin recursiva y la solucin simple tienen igual coste; por ejemplo, si tA(n)=n2y t(n)=16n:da un valor de n064 (ignorando los redondeos). tA(n) 3tA(n / 2 ]) + t (n)El esquema divide y vencers:IntroduccinJ . Campos- C.P.S. Es qu emasalgort micos - Divide y ven cer sP g. 8La bsqueda dicotmicav Problema: Dado T[1..n] vector ordenado crecientemente y dado x, encontrar x en T, si es que est. Formalmente: encontrar un natural i tal que0in y T[i]xxentonces b:=verdadsino i:=i+1fsifmq;devuelve i-1finfuncin secuencial(T:vector[1..n]de dato;x:dato) devuelve 0..nvariables i:0..n+1; b:booleanoprincipioi:=1; b:=falso;mq (in) and not b hacersi T[i]>xentonces b:=verdadsino i:=i+1fsifmq;devuelve i-1finCoste caso promedio y caso peor: (n)J . Campos- C.P.S. Es qu emasalgort micos - Divide y ven cer sP g. 9v Bsqueda dicotmica (algoritmo de reduccin, puesto que k=1):La bsqueda dicotmicafuncin dicotmica(T:vector[1..n]de dato;x:dato) devuelve 0..nprincipiosi (n=0) or (x0.}principioformarTabla(t,1,n)finalgoritmo calendario(sal t:tabla){Devuelve en t al calendario de competicin den participantes, con n=2k, k>0.}principioformarTabla(t,1,n)finalgoritmo formarTabla(sal t:tabla;ent inf,sup:1..n){Forma la parte de tabla correspondiente a losenfrentamientos de los participantes inf..sup}variable medio:1..nprincipiosi inf:=sup-1entonces t[inf,1]:=sup; t[sup,1]:=infsinomedio:=(inf+sup) div 2;formarTabla(t,inf,medio);formarTabla(t,medio+1,sup);completarTabla(t,inf,medio,medio,sup-1,medio+1);completarTabla(t,medio+1,sup,medio,sup-1,inf)fsifinalgoritmo formarTabla(sal t:tabla;ent inf,sup:1..n){Forma la parte de tabla correspondiente a losenfrentamientos de los participantes inf..sup}variable medio:1..nprincipiosi inf:=sup-1entonces t[inf,1]:=sup; t[sup,1]:=infsinomedio:=(inf+sup) div 2;formarTabla(t,inf,medio);formarTabla(t,medio+1,sup);completarTabla(t,inf,medio,medio,sup-1,medio+1);completarTabla(t,medio+1,sup,medio,sup-1,inf)fsifinJ . Campos- C.P.S. Es qu emasalgort micos - Divide y ven cer sP g.58Calendario de un campeonatoalgoritmo completarTabla(ent/sal t:tabla;ent eqInf,eqSup,daInf,daSup,eqInic:1,,n){Rellena t[eqInf..eqSup,daInf..daSup] con permutaciones cclicas empezando en eqInic}principiopara j:=daInf hasta daSup hacert[eqInf,j]:=eqInic+j-daInffpara;para i:=eqInf+1 hasta eqSup hacert[i,daInf]:=t[i-1,daSup];para j:=daInf+1 hasta daSup hacert[i,j]:=t[i-1,j-1]fparafparafinalgoritmo completarTabla(ent/sal t:tabla;ent eqInf,eqSup,daInf,daSup,eqInic:1,,n){Rellena t[eqInf..eqSup,daInf..daSup] con permutaciones cclicas empezando en eqInic}principiopara j:=daInf hasta daSup hacert[eqInf,j]:=eqInic+j-daInffpara;para i:=eqInf+1 hasta eqSup hacert[i,daInf]:=t[i-1,daSup];para j:=daInf+1 hasta daSup hacert[i,j]:=t[i-1,j-1]fparafparafinJ . Campos- C.P.S. Es qu emasalgort micos - Divide y ven cer sP g.59v Coste temporal: Recurrencia: Por tanto, O(n2).v Y si n no es potencia de 2? Supongamos que est resuelto para n par. Si n es impar (mayor que 1), no bastan con n-1 das para la competicin, sino que se necesitan n.Basta con resolver el problema resultante de aadir un participante (ficticio) ms: el n+1.Como n+1 es par, podemos calcular el calendario, que consta de n das.Una vez resuelto, si al participante i-simo le toca jugar el da j-simo contra el participante n+1 (ficticio), eso significa que j es el da de descanso para el participante i.Calendario de un campeonato T (n) 2Tn 2( )+ n24J . Campos- C.P.S. Es qu emasalgort micos - Divide y ven cer sP g.60v Y si n es par? Si n div 2 es par, se puede aplicar el algoritmo formarTabla (visto para el caso n=2k). Si n div 2 es impar:Paso 1:u Se calcula la primera parte de la competicin para los n div 2 participantes de numeracin inferior, aadiendo un participante ficticio.u Se calcula la primera parte de la competicin para los otros n div 2 participantes , aadiendo otro participante ficticio.Paso 2:u El da j-simo, 1jn div 2, se hace jugar entre s a los dos participantes, uno de numeracin inferior y otro superior, a los que les haba tocado el j como da de descanso en el Paso anterior.Paso 3:u Se completa el resto de la tabla con competiciones cruzadas, de forma parecida a como se hizo en el algoritmo completarTabla.Calendario de un campeonatoJ . Campos- C.P.S. Es qu emasalgort micos - Divide y ven cer sP g.61 1 2 3123c2 3 c1 c 3c 1 23 2 1

11221 13cc3 1 2 345ad5 a d4 d ad 4 5a 5 4............Calendario de un campeonato1 2 3 4 512345a2 3 4 5 a1 5 3 a 4a 1 2 4 55 a 1 3 24 2 a 1 33 4 5 2 11 2 3 4 5678910b7 8 9 10 b6 10 8 b 9b 6 7 9 1010 b 6 8 79 7 b 6 88 9 10 7 61 2 3 4 5 6 7 8 9123456789102 3 4 5 6 8 9 10 71 5 3 7 4 9 10 6 88 1 2 4 5 10 6 7 95 9 1 3 2 6 7 8 104 2 10 1 3 7 8 9 67 8 9 10 1 4 3 2 56 10 8 2 9 5 4 3 13 6 7 9 10 1 5 4 210 4 6 8 7 2 1 5 39 7 5 6 8 3 2 1 4