.4 Árvores Geradoras Em mutas aplcações estamos nteressados em subgrafos especas de um determnado grafo. Defnção Árvore Geradora - uma árvore T é chamada de árvore geradora de um grafo G se T é um subgrafo de G que possu todos os vértces de G. Exemplo : G: T : b a f e c d Obs: Uma submatrz (n-) x (n-) da matrz de ncdênca é não sngular se e somente se as arestas assocadas às (n-) colunas desta submatrz consttuem uma árvore geradora de G. Posto de um grafo o posto de uma grafo com n vértces é gual a n-. Como obter uma árvore geradora de G? Procedmento - Se G não possu crcutos G é sua própra árvore geradora. Se G possu crcutos retre uma aresta do crcuto. O sugrafo resultante é conexo. Se exstrem mas crcutos repta a operação até retrar uma aresta do últmo crcuto do grafo. O subgrafo resultante é conexo sem crcutos e possu todos os vétces de G. Portanto é uma árvore geradora de G. Teorema Todo grafo conexo contém pelo menos uma árvore geradora. Defnção Sea G(VA) um grafo conexo e T(VE) uma árvore geradora de G. Uma aresta de G que não pertence à árvore geradora T é chamada de elo de G em relação a T. As arestas que compõem uma árvore geradora são chamadas de ramo. Exemplo 2: Os elos de G relatvos a T na exemplo são: {(cf). (ac)(de)(ae)}. Obs: Observe que uma aresta que pertence a T pode ser um elo de G em relação a uma outra árvore geradora de G. No entanto o numero de elos de um grafo é fxo! Quantos são? Teorema Um grafo conexo com n vértces e m arestas possu (m - n +) elos.
Se adconarmos um elo de G a árvore T um únco crcuto será formado. Este crcuto é chamado de crcuto fundamental de G. Quantos crcutos fundamentas um grafo possu? Dado um grafo G como obter todas as árvores geradoras de G? Procedmento 2 - Utlze o procedmento para obter uma árvore geradora ncal. 2 - Determne os elos de G relatvos a esta árvore. Acrescentando um elo de G a T um crcuto é formado. 3 - Retre as arestas do crcuto fundamental formado uma a uma. Desta foram são geradas as arvores geradoras assocadas às arestas deste crcuto (k-) árvores geradoras onde k é o número de arestas no crcuto fundamental. Esta operação é chamada de transformação elementar (troca cíclca cyclc exchange). 4 - Repta a transformação elementar consderando outros elos do grafo. A análse do Procedmento 2 esboçado acma permte a formulação de uma sére de perguntas. ) Partndo de qualquer árvore e fazendo um certo número de transformações elementares é possível obter uma determnada árvore geradora? 2) Usando transformações elementares é possível obter todas as árvores geradoras? Quantas transformações elementares serão necessáras? 3) A efcênca do algortmo depende da árvore geradora ncal? Para responder algumas dessas perguntas precsamos defnr alguns novos concetos. Soma dreta - Dados dos conuntos S e S 2 a soma dreta de S e S 2 (representada por S S 2 ) é dada por: S S2 S S2 S S2. v v v v v v v S S v v v v v S S entâo 2 3 2 4 5 6 2 2 3 4 5 Dstânca entre duas árvores geradoras de G T e T é gual ao número de arestas que estão presentes em T e que não pertencem a T. Denotamos por d(t T ). Podemos defnr a dstâca entre duas árvores geradoras de G como sendo o número de transformações elementares necessáras para obter T a partr de T. Isto é: onde AT T d( T T ) AT T 2 é o conunto de arestas obtdo pela a soma dreta do conunto de arestas de T e de T. Árvore central Para uma árvore geradora T 0 de G sea max d ( T0 T ) a dstânca máxma de T 0 a qualquer outra árvore geradora T de G. Então T 0 é chamada de árvore central de G se: max d( T0 T ) max d( T T ) T árvore geradora de G. Grafo árvore O grafo árvore de G S(G) é defndo como o grafo em que cada vértce representa uma árvore geradora de G e exste uma aresta entre dos pares de vértces a dstânca entre as árvores geradoras assocados for gual a. 6
Estes concetos são usados em [2] para encontrar todas as árvores geradoras de G. A Fgura mostra um grafo G e o grafo árvore S(G ) assocado. Um outro algortmo para lstar todas as árvores geradoras de G é proposto em [3]. Teorema É possível gerar todas as árvores geradoras de G começando de uma árvore geradora qualquer e executando sucessvas transformações elementares. Exemplo Fgura - Grafo G e Grafo Árvore assocado S(G)[2] O Procedmento constró uma árvore geradora de G através da exclusão de arestas que fazem parte de um crcuto em G. O algortmo a segur constró uma árvore geradora de G nclundo arestas evtando a formação de crcutos. Algortmo - Determnar uma árvore geradora Consdere um grafo smples com n vértces e m arestas. Idéa Ince a árvore T com uma aresta qualquer de G. A cada teração nclua uma nova aresta em T de manera que nenhum crcuto é formado. ) O que acontece se o grafo não for conexo? Iremos obter váras árvores geradoras sto é uma floresta geradora. 2) Como garantr que ao nserr uma aresta nenhum crcuto é formado? Verfcar se as extremdades da aresta á foram ncluídas. Assm ao tentarmos acrescentar a aresta (v k w k ) à árvore as seguntes stuações podem ocorrer:
) Nem o vértce v k nem o vértce w k pertencem a alguma árvore T á construída. Neste caso cre uma nova árvore a partr destes vértces e desta aresta. Consdere que exste mas de uma componente no grafo faça cp= cp+. Assoce o rótulo cp aos vértces v k e w k. ) O vértve v k pertence à árvore T e o vértce w k pertence à árvore T. Neste caso a aresta (v k w k ) é usada para unr as duas árvores. Faça os vértces de T receberem o mesmo rótulo c dos vertces de T. Faça cp=cp-. ) Os dos vértces pertencem a árvore T.. Neste caso a aresta é descartada pos sua nclusão crara um crcuto. v) Apenas um dos dos vértces v k (ou w k ) pertence a alguma árvore T á construída. Neste caso acrescente a aresta e o vértce w k (ou v k ) à árvore. O vértce w k (ou v k ) recebe o mesmo rótulo c que os vértces á pertecentes a T. Como fazer para mplementar as déas acma? A efcênca do algortmo depende da rapdez com que verfcamos se as extremdades da aresta que estamos consderando pertence ou não a alguma árvore á crada. Para facltar esta busca cramos um vetor n-dmensonal VERTEX que armazena esta nformação. Quando uma aresta () é nserda em alguma árvore com rótulo c as posções e do vetor recebem o valor c. Assm para verfcar se a aresta (v k w k ) á fo ncluído em alguma árvore verfcamos se correspondentes posções de VERTEX são dferentes de zero. Se para algum vértce q VERTEX(q) = 0 o vértce q não esta ncluído em nenhuma árvore. Ao fnal do algortmo o vetor VERTEX dentfca os vértces em cada componentes do grafo. Isto é sufcente? Precsamos anda dentfcar as arestas que compõe cada árvore do grafo. Para sto cramos o vetor m-dmensonal ARESTA. Assm se a k-ésma aresta fo ncluída na árvore c faça ARESTA (k) = c caso contráro ARESTA (k)=0. Ao fnal do algortmo as posções do vetor com ARESTA()=0 dentfcam os elos de G. Exemplo Consdere o grafo G com 9 vértces e 2 arestas. O grafo será representado através de dos vetores m-dmensonas F e H. de tal forma que as extremdades da aresta K é armazenada nas posções fk e hk dos vetores F e H respectvamente. G é dado por: F = A E I I B B C B F C F A H = B H B C C E G F G E D C
. 5 - Árvore Geradora Mínma Consdere um rede e o problema de encontrar a árvore geradora mínma assocada. Valor de árvore - é a soma dos pesos assocados ás arestas contdas na árvore. Algortmo 2 (Kruskal) Qualquer grafo Passo - ordene as arestas do grafo em ordem não-decrescente de peso. Passo 2 - Aplque o algortmo para encontrar a arvore geradora consderando que as arestas serão seleconadas de acordo com a ordem estabelecda no passo. Lema A árvore geradora T obtda pelo Algortmo 2 é uma árvore geradora mínma de G. Prova - Seam e e 2... e n- as arestas de T na ordem em que foram consderadas no Algortmo 2. Isto é p(e ) <= p(e 2 ) <=... <=p(e n- ). Vamos supor que T não é uma árvore geradora (AG) mínma de G. Dentre as AG de valor mínmo sea T mn a árvore geradora que contém as arestas e e 2... e de T tal que sea o maor índce possível ( < (n-) pos em caso contráro e estara em T). Consdere que a aresta e + é adconada a T mn. Um crcuto é então crado. Este crcuto contém uma aresta x que não pertence a T (Se todas as arestas do crcuto estvessem em T T não sera uma árvore pos também tera um crcuto). Pela ordem em que as arestas foram consderadas na construção de T temos que e + fo adconada a T mas x não fo ncluída. Portanto p(e + )<=p(x) (caso contráro x tera sdo ncluída em T sem a formação de um crcuto). Vamos então construr uma nova árvore: T nova =T mn -{x}+{e + }. Se p(e + ) < p(x) então p(t nova ) < p(t mn ) o que contrara a hpótese que T mn é mínma. Se p(e + ) = p(x) então p(t nova ) = p(t mn ) e T nova é mínma e contém as arestas e e 2... e e + o que contradz que é o menor índce possível usado na construção de T mn. Portanto temos uma contradção quando dzemos que p(e + )<=p(x) e neste caso a suposção que T não é mínma é falsa. Assm mostramos que T é mínma. Algortmo 3 (PRIM) - Grafos Conexos Passo - Selecone um vértce v k de G e nclua em T Passo 2 - Repta este passo até que todos os vértces de G pertençam a T. Selecone a aresta de menor peso (v w ) tal que v pertença a T e w não pertença a T.
Exercíco [] - Utlze os algortmos de Kruskal e de Prm para dentfcar uma árvore geradora mínma em cada um dos grafos lustrados na fgura e 2. Qual é o melhor? Fgura Fgura 2 Referêncas [] - Mchel Gagnon - Notas de aula do curso: CI065 Algortmos e teora dos grafos UFPR 2002. [2] Shoura A. A. Tamura e T. Uno An optmal algorthm for scannng all spannng trees of undrected graphs. SIAM Journal on Computng 26(3) 678 692 997. [3] - Mnty G. A Smple Algorthm for Lstng All the Trees of a Graph. Crcuts and Systems IEEE Transactons on Crcut Theory Volume 2 Issue Page(s): 20 20 Mar 965.
Algortmo - Determnar uma árvore geradora Consdere um grafo smples com n vértces e m arestas. Idéa Ince a árvore T com uma aresta qualquer de G. A cada teração nclua uma nova aresta em T de manera que nenhum crcuto é formado. ) O que acontece se o grafo não for conexo? Iremos obter váras árvores geradoras sto é uma floresta geradora. 2) Como garantr que ao nserr uma aresta nenhum crcuto é formado? Verfcar se as extremdades da aresta á foram ncluídas. Assm ao tentarmos acrescentar a aresta (v k w k ) à árvore as seguntes stuações podem ocorrer: ) Nem o vértce v k nem o vértce w k pertencem a alguma árvore T á construída. Neste caso cre uma nova árvore a partr destes vértces e desta aresta. Consdere que exste mas de uma componente no grafo faça cp= cp+. Assoce o rótulo cp aos vértces v k e w k. ) O vértve v k pertence à árvore T e o vértce w k pertence à árvore T. Neste caso a aresta (v k w k ) é usada para unr as duas árvores. Faça os vértces de T receberem o mesmo rótulo c dos vertces de T. Faça cp=cp-. ) Os dos vértces pertencem a árvore T.. Neste caso a aresta é descartada pos sua nclusão crara um crcuto. v) Apenas um dos dos vértces v k (ou w k ) pertence a alguma árvore T á construída. Neste caso acrescente a aresta e o vértce w k (ou v k ) à árvore. O vértce w k (ou v k ) recebe o mesmo rótulo c que os vértces á pertecentes a T. Como fazer para mplementar as déas acma? A efcênca do algortmo depende da rapdez com que verfcamos se as extremdades da aresta que estamos consderando pertence ou não a alguma árvore á crada. Para facltar esta busca cramos um vetor n-dmensonal VERTEX que armazena esta nformação. Quando uma aresta () é nserda em alguma árvore com rótulo c as posções e do vetor recebem o valor c. Assm para verfcar se a aresta (v k w k ) á fo ncluído em alguma árvore verfcamos se correspondentes posções de VERTEX são dferentes de zero. Se para algum vértce q VERTEX(q) = 0 o vértce q não esta ncluído em nenhuma árvore. Ao fnal do algortmo o vetor VERTEX dentfca os vértces em cada componentes do grafo. Isto é sufcente? Precsamos anda dentfcar as arestas que compõe cada árvore do grafo. Para sto cramos o vetor m-dmensonal ARESTA. Assm se a k-ésma aresta fo ncluída na árvore c faça ARESTA (k) = c caso contráro ARESTA (k)=0. Ao fnal do algortmo as posções do vetor com ARESTA()=0 dentfcam os elos de G. Algortmo 2 (Kruskal) Árvore Geradora Mínma Passo - Ordene as arestas do grafo em ordem não-decrescente de peso. Passo 2 - Aplque o algortmo para encontrar a arvore (ou floresta) geradora consderando que as arestas serão seleconadas de acordo com a ordem estabelecda no passo.