técnicas desenho algoritmos_paa2010

Upload: richard

Post on 21-Feb-2018

213 views

Category:

Documents


0 download

TRANSCRIPT

  • 7/24/2019 Tcnicas Desenho Algoritmos_PAA2010

    1/17

    1. ALGORITMOS GULOSOS

    1.1 PROBLEMA DA MOCHILA CONTNUO

    Dados nobjetos e uma mochila, onde cada objeto i, 1 in,tem associado um peso wie um valor vi. A mochila carregaum peso mximo W.Deseja-se encher a mochila de maneira que a soma dosvalores dos objetos includos seja mxima e seja respeitada acapacidade mxima da mochila.Neste caso os objetos podem ser fracionados.

    Sejaxi, 0 xi 1 a poro do objeto ique ser carregada namochila. O objeto i contribui com xi wi ao peso total damochila, e comxiviao valor total dos objetos carregados.O problema da mochila pode ser definido como:

    max 1in,xivisujeito a 1inxiwiW onde

    0 xi1, 1 i n.

  • 7/24/2019 Tcnicas Desenho Algoritmos_PAA2010

    2/17

    Procedimento mochila(W,v,w,n)parai=1 at n faa x[i]=0peso= 0

    enquanto peso< Wfaaseja io melhor objeto disponvelse peso+ w[i] Wento x[i]=1

    peso= peso+w[i]seno x[i] = (W-peso)/w[i]

    peso= Wretornar x

    TEOREMA: Se os objetos i, 1 inso selecionados naordem decrescente de vi/wi, o algoritmo mochila determinauma soluo do problema da mochila contnuo.

  • 7/24/2019 Tcnicas Desenho Algoritmos_PAA2010

    3/17

    PROVA:Supor sem perda de generalidade que os objetos disponveisso numerados na ordem decrescente do valor por unidade

    de peso, ou seja: v1/w1 v2/w2... vn/wn. SejaX = (x1,x2,...xn) a soluo achada pelo algoritmo mochila. Se xi= 1 1in, a soluoX tima. Caso contrrio, sejajo menorndice tal que xj < 1. Observando o funcionamento doalgoritmo claro quexi = 1 se ij, e 1inxiwi = W. Seja o valor correspondente soluo X obtidapelo algoritmo dado por V(X) = 1in,xivi.Considere agora Y = (y

    1, y

    2 ,...y

    n) uma soluo qualquer do

    problema da mochila tal que 0 yi1,1in, e 1inyiwiW. Podemos concluir que 1in(xi-yi) wi0. Seja ovalor correspondente a soluo Y dado por V(Y) = 1 i n,yivi. Ento

    V(X) - V(Y) = 1in(xi-yi) vi= 1in(xi-yi) wi. vi/wi.Quando ij, temosxi= 0 e portanto xiyinegativo ou zero e vi/wivj/wj. E quando i=j, vi/wi=vj/wj.Ento, qualquer que seja o caso, tem-se

    (xi-yi) vi/wi(xi-yi) vj/wj.Portanto,

    V(X) - V(Y) = 1in(xi-yi) wi. vi/wi1in(xi-yi) wi.vj/wjvj/wj1in(xi-yi) wi0.

    Tem sido provado ento que nenhuma soluo Y tem valorV(Y) maior que V(X), ondeX a soluo dada pelo algoritmomochila.

  • 7/24/2019 Tcnicas Desenho Algoritmos_PAA2010

    4/17

    1.2

    ALGORITMO DE HUFFMANOs cdigos so usados para compresso de dados.

    Supor que os smbolossi, 1

    i

    n, n > 1, de um arquivo aarmazenar acontecem com freqncias dadas a seguir:f1: 45, f2: 13,f3: 12, f4:16, f5: 9, f6: 5.

    Uma possvel codificao destes smbolos :c1=000, c2=001, c3=010, c4=011, c5=100, c6=101.

    Uma outra codificao :d1=0, d2=101, d3=100, d4=111, d5=1101, d6=1100.

    Um cdigo prefixo um cdigo no qual nenhuma palavra

    cdigo prefixo de uma outra palavra cdigo.Os cdigos prefixos simplificam os processos de codificaoe de decodificao.O processo de decodificao necessita de uma representaoconveniente do cdigo prefixo.As rvores estritamente binrias cujas folhas so os smboloscodificados produzem uma boa representao.

    Dada uma rvore estritamente binria T tal que nenhumcdigo prefixo de outro, define-se como lio comprimentodo cdigo binrio correspondente ao smbolo si, e o custo darvore como c(T) = 1infili.

  • 7/24/2019 Tcnicas Desenho Algoritmos_PAA2010

    5/17

    Tcnica gulosa para construir uma rvore estritamentebinria de custo mnimo:

    O processo de construo da rvore procura subcdigos parao conjunto de smbolossi, 1 in, n > 1.Cada subcdigo corresponde a uma subrvore.Inicialmente cada smbolo uma folha de uma rvoreunitria.O paso iterativo produz a fuso de duas subrvores em umanica rvore. O processo termina quando o nmero desubrvores igual a 1.

    Seja Tuma subrvore estritamente binria. Define-sef(T) ={si folha de T}fi.Dadas Te T duas subrvores estritamente binrias, define-se T Tcomo a subrvore estritamente binria onde umnovo vrtice raiz tem por filhos esquerdo e direito as razesdas subrvores estritamente binrias Te T.O custo associado a rvore estritamente binria T T

    dado porf(T T) =f(T) +f(T).

  • 7/24/2019 Tcnicas Desenho Algoritmos_PAA2010

    6/17

    funo huffman ({fi|1 i n })criar uma lista de prioridades Qcontendo as freqencias

    fi(mnimo na raiz)

    parai=1 at n-1faamin(Q,f(T))min(Q,f(T))T= T Tf(T) = f(T) + f(T)inser ir (f (T),Q)

    A complexidade do pior caso do algoritmo huffmanO(n log n).

    LEMA 10.1: Sejamsismbolos com freqnciasfi, 1i n,n> 1 tais quef1ef2 so as menores freqncias. Ento existeuma rvore construda pelo algoritmo huffman para essessmbolos na qual os ns correspondentes as1e s2so irmosposicionados no ltimo nvel da rvore.

    TEOREMA 10.2: Seja T a rvore construda peloalgoritmo huffmanpara as freqnciasfi, 1i n, n > 1.Ento T de custo mnimo.

  • 7/24/2019 Tcnicas Desenho Algoritmos_PAA2010

    7/17

    1.3

    ALGORITMO DE PRIM (MST)

    Um multigrafoG=(V,E) um par ordenado onde V umconjunto finito no vazio de vrticeseE um conjunto depares no ordenados de elementos do conjunto V, ouarestas.Notao |V| = n, |E| = m.Um lao uma aresta do tipo (v,v).Um grafo um multigrafo que no admite arestasrepetidas e laos.

    Uma aresta e= (a,b) tem como extremidadesos vrticesae b. Uma aresta e= (a,b) incidentea cada uma de suasextremidades.Um grafo G2 = (V2, E2) subgrafo de G1 = (V1, E1)quando V2V1 eE2E1. Alm disso, se V2 V1ouE2E1ento G2 subgrafo prpriode G1. Se V2 = V1 entoG2 subgrafo geradorde G1.

    Seja G = (V,E) um grafo. Um passeio em G umaseqncia de vrtices v1,...,vk tais que (vi, vi+1) E para1 i k - 1, k 1. O valor k-1 o comprimento dopasseio. Se os vrtices v1,...,vkforem distintos, o passeio sedenomina caminho.Um passeio fechado quando v1 = vk. Um ciclo umpasseio fechado v1,...,vk-1,vk(v1= vk) tal que v1,...,vk-1 um

    caminho e k 4. Se o grafo G no possui ciclos ento chamado de acclico.Um grafo conexo quando existir um passeio entrequaisquer para de seus vrtices.Uma rvore um grafo conexo e acclico.

  • 7/24/2019 Tcnicas Desenho Algoritmos_PAA2010

    8/17

    TEOREMA: Seja Guma rvore. Ento m= n-1.

    TEOREMA: Todo grafo conexo possui uma rvore

    geradora.TEOREMA: Seja T= (V,E(T)) uma rvore geradora de G= (V, E). Seja euma aresta que pertence ao conjunto EE(T). Ento o grafo T + epossui exatamente um ciclo.

    Algoritmo de PRIM:

    Seja G = (V,E) um grafo conexo, n = |V|, m = |E|, ondetem-se definido um peso ou custo ou comprimento w(e)0para cada aresta eE.O problema MST (rvore geradora mnima minimumspanning tree) consiste em acharE(T) Etal que o grafoT=(V,E(T)) seja uma rvore geradora mnima de G e a

    soma dos custos das arestas seja a menor possvel entretodas as rvores geradoras de G.O algoritmo de PRIM trabalha da seguinte maneira:Seja B um subconjunto de vrtices do conjunto V,atualizado a cada iterao e inicialmente formado por umnico vrtice escolhido arbitrariamente.Seja E(T) um subconjunto de arestas de E atualizado a

    cada iterao e inicialmente vazio.A cada iterao, escolher a aresta e=(x,y) de custo mnimono escolhida at o momento tal que xB, yV-B(portanto a adio da nova aresta no forma ciclo narvore em construo). Se existir uma tal aresta e,

  • 7/24/2019 Tcnicas Desenho Algoritmos_PAA2010

    9/17

    acrescenta-lo ao conjuntoE(T) e acrescentar o vrticeyaoconjuntoB.A cada iterao do processo, o conjuntoE(T) est formado

    pelas arestas de uma rvore geradora para os vrtices deB.O algoritmo termina quandoB= V.

    Procedimento PRIM(G,w)B={v}, v vrtice arbitrrioE(T)= enquantoBVfaa

    achar e=(x,y) aresta de custo mnimo tal quexB,yV-BE(T)=E(T) {e}

    B=B {y}retornar E(T)

    TEOREMA: Seja G=(V,E) um grafo conexo. Seja E(T) o

    conjunto de arestas obtido pela execuo do procedimentoPRIM. O grafo T=(V,E(T)) uma rvore geradora mnimapara G.

    PROVA:Seja Gum grafo conexo. A cada iterao, o procedimentoPRIM acrescenta vrtices no conjunto B de maneira que

    exista uma aresta com uma extremidade em Be outra emV-B. Isto garante que a cada iterao i, o grafo Ti=(B,E(T)) uma rvore geradora do subgrafo de Ginduzido por B.Ao finalizar o procedimento,B=Ve T=(B,E(T))= (V,E(T)) uma rvore geradora de G.

  • 7/24/2019 Tcnicas Desenho Algoritmos_PAA2010

    10/17

    Para provar que T mnima, demonstraremos que a cadaiterao i, se ei a aresta escolhida pelo procedimentoPRIM ento Ti+ei subrvore de uma rvore geradora

    mnima de G.Faremos a prova por induo, supondo que se Ti subrvore de uma rvore geradora mnima TMde GentoTi+1= Ti+ei subrvore de uma rvore geradora mnimaTM apropriada.Se eiTMento vale o resultado.Se eiTMento TM+eicontm um nico ciclo C. Seja earesta em Ctal que uma extremidade pertence ao conjuntoBi e a outra ao conjunto V-Bi, onde Bi o conjunto Bcorrespondente iterao ido procedimento PRIM. SejaTM = (TM+ ei) - e. claro que TM rvore geradora deG.Por outro lado, w(TM ) = w(TM) + w(ei) w(e) e pelaescolha de aresta feita pelo procedimento PRIM, tem-sew(ei) w(e) ou w(ei) w(e) 0. Como TM e TM so

    rvores geradoras de Ge TM mnima, deve ser tambmmnima a rvore geradora TM .Ento vlido que Ti+1= Ti+ei subrvore de uma rvoregeradora mnima de G. Portanto, ao finalizar oprocedimento PRIM determinada uma rvore geradoramnima de G.

  • 7/24/2019 Tcnicas Desenho Algoritmos_PAA2010

    11/17

    2. DIVIDIR PARA CONQUISTAR

    2.1 BUSCA BINRIA

    Seja L uma lista em alocao seqencial de memria,ordenada, de tamanho n, onde cada n da lista tem umcampo chave. Sejaxa chave procurada.

    a)algoritmo no recursivo

    funo busca_binria(L ,n,x)inf= 1; sup= n; busca_bin= 0;enquanto inf sup faa

    meio= (inf + sup)/2se L [meio]. chave = xento

    busca_bin= meioinf= sup+ 1

    seno se L [meio]. chave < xento

    inf= meio+ 1seno sup= meio- 1

  • 7/24/2019 Tcnicas Desenho Algoritmos_PAA2010

    12/17

    b)algoritmo recursivo

    funo busca_binria_rec(L ,i,j,x)

    se I=jentose L[i].chave = x ento retornar iseno retornar n+1

    k = (i+j)/2se xL [k]. chave ento

    retornar busca_binria_rec(L ,i,k,x)seno

    retornar busca_binria_rec(L ,k+1,j,x)

    funo busca_binria1(L ,n,x)se n= 0 ou x> L [n].chave ento retornar (n+1)seno retornar busca_binria_rec(L ,1,n,x)

  • 7/24/2019 Tcnicas Desenho Algoritmos_PAA2010

    13/17

    2.2

    MERGE-SORT

    Este algoritmo consiste em dividir uma lista L a ordenar em

    duas partes de tamanho aproximadamente igual, ordenarcada parte por medio de chamadas recursivas ao mesmoalgoritmo, para compor a soluo de cada parte numasoluo da lista original.O algoritmo compe-se do procedimento merge para unirduas partes da lista (cada uma ordenada) formando uma listanica ordenada, e o procedimento recursivo merge-sort.

    procedimento merge(U, p,V,q,L)i= 1;j= 1U[p+1] = ; V[q+1] = parak=1 at p+q faa

    se U[i] < V[j] ento L [k] = U[i]; i= i+1;seno L [k] = V[j];j=j+1;

    procedimento merge-sort(L,n)

    % U, Vlistas de tamanho

    n/2

    e

    n/2

    respect.se n 1 ento

    parai= 1 at n/2faa U[i] = L [i]parai=1 at n/2faa V[i] = L [n/2+i]merge-sort(U, n/2)merge-sort(V, n/2)merge(U, n/2,V, n/2, L)

    (significa o maior valor admitido no computador)

  • 7/24/2019 Tcnicas Desenho Algoritmos_PAA2010

    14/17

    3. PROGRAMAO DINMICA

    3.1 COEFICINTE BINOMIAL

    n! = n(n-1)! n1

    0! = 1

    funo Comb(n,k)se k=0 ou k=nento retornar 1seno retornar Comb(n-1,k-1)+Comb(n-1,k)

    Um algoritmo de programao dinmica para calcular ocoeficiente binomial constroi uma tabela nxk utilizando arelao anterior.

    procedimento Comb1(n , k)para i= 0 atnfaa C(i , 0) = 1

    para i= 0 at nfaaparaj= 1 at kfaase ijento C(i , j) = C(i -1 , j-1) + C(i-1, j) seno

    se i=jento C(i , j) = 1 seno C(i , j) = 0

  • 7/24/2019 Tcnicas Desenho Algoritmos_PAA2010

    15/17

    3.2

    PROBLEMA DA MOCHILA INTEIRO

    max 1 inxivisujeito a 1 inxiwiW

    onde xi =0 ouxi=1, 1 in.Um algoritmo de programao dinmica paraeste problema consiste em determinar umatabela n+1 x W+1, onde n o nmero de objetos e W acapacidade mxima da mochila.

    Seja V[i,j] o mximo valor correspondente aosobjetos que podem ser carregados com capacidade mximaj,incluindo unicamente objetos numerados de 1 at i.Seja V[i-1,j] o valor correspondente a carregar na mochilaobjetos numerados de 1 at i-1 e no carregar o objeto i,comcapacidade mxima da mochila igual aj.Seja V[i-1,j-wi]+vi o valor correspondente a carregar namochila o objeto i de peso wie escolher entre os objetos 1

    at i-1 cujo peso j-wi.

    Ento, V[i,j] = max{V[i-1,j] ,V[i-1,j-wi]+vi}.

    A complexidade do pior caso do algoritmo de programaodinmica para o problema da mochila inteiro O(nW).

  • 7/24/2019 Tcnicas Desenho Algoritmos_PAA2010

    16/17

    procedimento MOCHILA INTEIRO (n, v , w , W)paraj= 0, . . . ,Wfaa V[0,j] = 0para i= 1, . . . , nfaa

    V[i, 0] = 0paraj= 1,...,Wfaase wi jento

    se V[i1,jwi] + vi> V[i1,j] entoV[i,j] = V[i1,jwi] + vi

    seno V[i,j] = V[i1,j]seno V[i,j] = V[i1,j]

  • 7/24/2019 Tcnicas Desenho Algoritmos_PAA2010

    17/17

    3.3

    RVORE BINRIA DE BUSCA DE CUSTOTIMO

    Procedimentorvore_binria_de_busca_tima(f,f',C)paraj=0 at nfaaC[j,j]= 0, F[j,j]= fj'

    para d=1 at nfaapara i= 0 at n-dfaaj = i+dF[i ,j]= F[i,j-1]+ fj+ fjC[i ,j]= mini < k j{ C[i,k-1]+ C[k,j]} + F[i ,j]