• Nenhum resultado encontrado

CONTAGEM E CODIFICAÇÃO DE ÁRVORES

N/A
N/A
Protected

Academic year: 2021

Share "CONTAGEM E CODIFICAÇÃO DE ÁRVORES"

Copied!
45
0
0

Texto

(1)

PAULO JORGE M. TEXEIRA

1. Motivac¸˜ao

S˜ao in´umeros os problemas que podem ser modelados atrav´es de ´arvores. As ´arvores s˜ao estruturas de dados extremamente ´uteis em muitas aplica¸c˜oes e admitem tratamento computacional eficiente quando comparadas `as estruturas mais gen´ericas como os grafos (os quais, por sua vez s˜ao mais flex´ıveis e com-plexos). As diferentes aplica¸c˜oes de ´arvores necessitam de estruturas bem mais complexas, como veremos no decorrer deste trabalho.

2. Conceitos Iniciais da Teoria de Grafos

Um grafo n˜ao orientado, ou simplesmente grafo G ´e um par (V, E), onde V ´e o conjunto de v´ertices e E ´e o conjunto de arestas. Indicaremos por |V | = n e |E| = m a quantidade de elementos de cada conjunto.

Cada aresta ´e um subconjunto de V com 1 ou 2 v´ertices.

Dada uma aresta {v, w} ∈ E, os v´ertices v e w s˜ao denominados extremidades da aresta, ou ent˜ao, que a aresta incide sobre os v´ertices v e w. Uma aresta unit´aria, da forma {v} ´e dito um la¸co. No caso de um la¸co, a aresta unit´aria ´e ”contada” duas vezes quando da determina¸c˜ao do grau do v´ertice e, portanto, contribui com 2(duas) unidades para o seu grau. Neste trabalho, os grafos considerados s˜ao finitos (possuem um n´umero finito de v´ertices) e n˜ao possuem la¸cos.

Um subgrafo H de G ´e dito um subgrafo gerador ou de espalhamento de G se V (H) = V (G).

Dois v´ertices s˜ao adjacentes ou vizinhos quando s˜ao extremidades de uma aresta. O conjunto de vizinhos de um v´ertice v ´e o conjunto N (v) = {w ∈ V /{v, w} ∈ E}. A cardinalidade |N (v)| ou ent˜ao, o n´umero de arestas incidentes em v, ´e dita o grau de v, e indicado por d(v).

A excentricidade de um v´ertice v de um grafo G, denotada por e(v), ´e a maior das distˆancias do v´ertice v aos demais v´ertices do grafo G, isto ´e: e(v) = m´ax{d(v, w)/w ∈ V (G), w 6= v}.

O diˆametro de um grafo G, denotado por diˆametro (G), ´e o maior valor dentre todas as excentricidades dos v´ertices de G, isto ´e: diˆametro (G) = m´ax {e(v)/v ∈ V (G)}.

O raio de um grafo G, denotado por raio(G), ´e o menor valor dentre todas as excentricidades dos v´ertices de G, isto ´e: raio(G) = m´ın{e(v)/ v ∈ V (G)}. O centro de um grafo G, denotado por C(G), ´e o conjunto de v´ertices do grafo G que tˆem a menor excentricidade, isto ´e: C(G) = {v ∈ V (G)/e(v) ´e m´ınimo }. Portanto, em vista da defini¸c˜ao, tem-se que o centro de um grafo n˜ao ´e formado, necessariamente, por um ´

unico v´ertice.

Dado um grafo G = (V, E), um passeio em G ´e uma seq¨uˆencia de v´ertices de G : v1, v2, ..., vk tais que

toda aresta (vi, vi+1) ∈ E, i, 1 6 i 6 k − 1. O comprimento do passeio ´e dado pelo n´umero de arestas

(2)

do passeio e o v´ertice vk seu t´ermino (ou fim). Um passeio em que n˜ao h´a repeti¸c˜ao de arestas, isto ´e:

todas as arestas do passeio s˜ao distintas, ´e dito uma trilha ou trajeto. Em particular, se n˜ao h´a repeti¸c˜ao de v´ertices, o passeio ´e dito um caminho. Um passeio v1, v2, · · · , vk´e dito fechado quando o v´ertice de seu

in´ıcio coincide com o v´ertice de seu t´ermino, isto ´e: v1 = vk. Analogamente, uma trilha ou um caminho

s˜ao ditos fechados quando o v´ertice de in´ıcio coincide com o v´ertice final. Um caminho ´e dito hamiltoniano se ´e composto por uma seq¨uˆencia de arestas que percorre os v´ertices do grafo uma e somente uma ´unica vez.

Uma trilha ´e dita hamiltoniana se ´e um caminho hamiltoniano que, partindo de um qualquer v´ertice de um grafo G conexo, retorna ao v´ertice inicial de tal modo que, exceto para o v´ertice inicial, foi percorrido um caminho hamiltoniano. Assim, fica formado um circuito com todos os v´ertices do grafo G e, portanto, todos os v´ertices desse circuito tˆem grau igual a 2(dois). Um ciclo ´e um passeio fechado v1, v2, · · · , vk−1, vk,

v1 tal que v1, v2, · · · , vk ´e um caminho. Ou seja, um ciclo ´e um caminho de comprimento maior do que ou

igual a 3, em que o primeiro e o ´ultimo v´ertices coincidem. Um ciclo simples ´e um caminho de comprimento maior do que ou igual a 3 em que somente o primeiro e o ´ultimo v´ertices coincidem. O tamanho de um passeio fechado ´e dado pelo n´umero de arestas que o comp˜oem. Em particular, o comprimento de um ciclo ´e dado pelo seu n´umero de v´ertices distintos ou, equivalentemente, de seu n´umero de arestas. Um ciclo com um n´umero par de arestas ´e dito um ciclo par, e com um n´umero ´ımpar de arestas ´e dito um ciclo ´ımpar. Um grafo que n˜ao possui ciclos ´e dito ac´ıclico. Um grafo ´e conexo quando existir pelo menos um caminho entre cada par de v´ertices. Caso contr´ario ´e dito desconexo. Uma componente conexa ´e um subgrafo conexo do grafo considerado. Indicamos o n´umero de componentes conexas de um grafo G por w(G).

Uma ´arvore ´e um grafo conexo e ac´ıclico. Uma corda em um ciclo ´e uma aresta que ´e adjacente a dois v´ertices n˜ao consecutivos desse ciclo. Uma corda em um caminho ´e uma aresta que ´e adjacente a dois v´ertices n˜ao consecutivos de um caminho.

3. Introduc¸˜ao

Quando dois ou mais grafos tˆem particularidades pr´oprias entre si dizemos que eles pertencem `a mesma fam´ılia de grafos. Assim, podemos definir uma fam´ılia de grafos como o conjunto (finito ou n˜ao) de todos os grafos que satisfazem a uma ou mais propriedades (as quais caracterizam essa fam´ılia) que precisam ser claramente atendidas por todos os seus elementos.

Normalmente, a defini¸c˜ao de uma fam´ılia consiste em mencionar a propriedade satisfeita pelos grafos que a constituem.

Como o conjunto de todos os grafos ´e infinito, o m´aximo que podemos afirmar ´e que um grafo pode pertencer a mais de uma fam´ılia, de acordo com a caracteriza¸c˜ao a ela dada. O universo dos grafos tem sido ent˜ao, largamente estudado, atrav´es de diferentes fam´ılias com suas espec´ıficas caracter´ısticas.

O grande desafio da comunidade de Teoria dos Grafos ´e:

(3)

* encontrar condi¸c˜oes que permitam determinar o total de elementos de cada fam´ılia; e

* definir a maneira de ser poss´ıvel construir grafos que atendam `as propriedades estabelecidas para cada uma das fam´ılias. Entre essas fam´ılias podemos destacar:

* a fam´ılia dos grafos eulerianos (aqueles grafos em que ´e poss´ıvel verificar a existˆencia de um circuito(ou ciclo) que inclua exatamente uma vez cada aresta);

O problema foi estudado pela primeira vez por Euler (1707-1783) e, por essa raz˜ao um circuito que percorre cada aresta de um grafo exatamente uma vez ´e dito um circuito euleriano e, um grafo que possui tal circuito ´e ent˜ao chamado de grafo euleriano.

* a fam´ılia dos grafos hamiltonianos (aqueles grafos em que ´e poss´ıvel verificar a existˆencia de um circuito(ou ciclo) que inclua exatamente uma vez cada v´ertice);

Um circuito passando exatamente uma vez por cada v´ertice de um grafo ´e chamado de circuito hamil-toniano, em homenagem ao matem´atico irlandˆes William Rowan Hamilton (1805-1865), que estudou este problema no grafo determinado pelas arestas de um dodecaedro regular. Um grafo que possui um circuito hamiltoniano ´e ent˜ao chamado de grafo hamiltoniano.

H´a grafos que podem pertencer a mais de uma fam´ılia. Por exemplo, os grafos da fam´ılia de ciclos s˜ao eulerianos e hamiltonianos. H´a outros grafos que s˜ao eulerianos e n˜ao s˜ao hamiltonianos. H´a outros que s˜ao hamiltonianos mas n˜ao s˜ao eulerianos, e h´a outros que n˜ao s˜ao eulerianos e tamb´em n˜ao s˜ao hamiltonianos.

* a fam´ılia dos grafos planares (aqueles em que sua representa¸c˜ao no plano seja poss´ıvel desde que atenda ao fato de que quaisquer duas arestas nunca se cruzem, podendo as arestas at´e ter um v´ertice em comum).

* a fam´ılia das ´arvores(aqueles grafos que s˜ao conexos e ac´ıclicos e com o menor n´umero de arestas); * a fam´ılia dos grafos isomorfos (aqueles grafos em que h´a uma bije¸c˜ao entre os conjuntos de v´ertices de cada um deles e de tal modo que as adjacˆencias entre arestas fiquem preservadas, conforme a defini¸c˜ao a seguir);

3.1. O Problema do Isomorfismo entre Grafos.

Dois grafos G1 = (V1, E1) e G2 = (V2, E2) s˜ao ditos isomorfos quando existir uma bije¸c˜ao f : V1 −→ V2

tal que, para todo v, w ∈ V1, {v, w} ∈ E1 ⇐⇒ {f (v), f (w)} ∈ E2. Ou seja: v´ertices vizinhos de G1 devem

ser mapeados (tˆem sua imagem) pela fun¸c˜ao f em v´ertices vizinhos de G2 e vice-versa.

Exemplo 3.1.1. A fun¸c˜ao f : {1, 2, 3, 4, 5} −→ {m, n, o, p, q} tal que: f (1) = n, f (2) = q, f (3) = o, f (4) = p e f (5) = m define um isomorfismo entre os grafos G1 e G2 representados na figura a seguir.

Decidir, por exemplo, quando dois grafos finitos G1 e G2 s˜ao isomorfos ´e um problema de dif´ıcil solu¸c˜ao.

(4)

1 2 3 4 5 m n o p q

Figura 1. Dois grafos Isomorfos

biun´ıvoco os v´ertices dos dois grafos, preservando a no¸c˜ao de adjacˆencia. Inicialmente, como condi¸c˜ao necess´aria para que isto ocorra ´e preciso que ambos os conjuntos de v´ertices tenham a mesma quantidade de elementos, ou seja: |V1| = |V2| = n. Caso contr´ario n˜ao podem existir bije¸c˜oes de V1 em V2.

A solu¸c˜ao da verifica¸c˜ao da existˆencia ou n˜ao de um isomorfismo entre dois grafos por ”for¸ca bruta” ´e aquela em que devemos experimentar todas as fun¸c˜oes bijetoras existentes de V 1 para V 2 (ou parte delas) , verificando, para cada uma, se a rela¸c˜ao de adjacˆencia expressa pelo conjunto de arestas de G1 ´e

preservada no conjunto de arestas de G2. Ora, quando |V1| = |V2| = n, existem n! bije¸c˜oes distintas de V1

em V2. Assim, ser´a preciso exibir pelo menos uma, dentre as n! poss´ıveis bije¸c˜oes de G1 para G2 , o que

evidencia a ineficiˆencia deste algoritmo.

N˜ao ´e conhecido at´e o momento, na literatura, um algoritmo eficiente

(de complexidade polinomial) que permita verificar se dois grafos quaisquer (que n˜ao pertencem a uma fam´ılia conhecida, ou essa fam´ılia n˜ao foi caracterizada no momento da verifica¸c˜ao, ou os grafos n˜ao satisfazem `a nenhuma propriedade em especial) s˜ao ou n˜ao grafos isomorfos, ou seja, um algoritmo que resolva o problema da verifica¸c˜ao do isomorfismo. E, tamb´em, ainda

n˜ao foi provado que tal algoritmo n˜ao existe

. Para a fam´ılia das ´arvores o problema tem solu¸c˜ao de forma eficiente, isto ´e, pode ser verificado o isomorfismo entre duas ´arvores, em tempo linear, no n´umero de v´ertices.

3.2. Representa¸c˜ao de Grafos.

Um esquema de representa¸c˜ao ´e uma maneira alternativa de exibir os grafos de uma determinada fam´ılia. O resultado obtido pela aplica¸c˜ao de um esquema a um grafo G = (V, E), onde |V | = n e |E| = m, E = {{u, v}/u ∈ V, v ∈ V } ´e chamado representa¸c˜ao para o grafo. ´E preciso explicitar n v´ertices e m pares de v´ertices. A partir dela, os conjuntos de v´ertices e arestas do grafo representado devem poder ser deduzidos sem ambig¨uidades.

A seguir apresentamos alguns esquemas de representa¸c˜ao:

3.2.1. O esquema de representa¸c˜ao mais usual para grafos arbitr´arios ´e o gr´afico, onde:

(5)

* essa representa¸c˜ao gr´afica n˜ao ´e ´unica.

3.2.2. - Outro esquema consiste em mencionar, para todo v´ertice v ∈ V , seu conjunto de vizinhos N (v), construindo um conjunto de pares da forma {(v, {N (v)})/v ∈ V }. Numa representa¸c˜ao obtida por esse esquema s˜ao mencionadosX

v∈V

(1 + |N (v)|) = n + 2m termos.

Exemplo 3.2.2.1. Subfam´ılia dos grafos conexos cujos v´ertices possuem grau 2. Uma caracteriza¸c˜ao equivalente seria dizer que os grafos integrantes desta fam´ılia s˜ao ciclos simples sem arestas interiores (cordas). Logo, grafos com n v´ertices desta fam´ılia possuem exatamente n arestas. O esquema de rep-resenta¸c˜ao por vizinhos exige a nomea¸c˜ao de n + 2n = 3n elementos. Por exemplo, considere o ciclo representado abaixo:

5

1

2

4

3

6

Figura 2

Representa¸c˜ao por vizinhos: {(1, {2, 6}), (2, {1, 3}), (3, {2, 4}), (4, {3, 5}), (5, {4, 6}), (6, {5, 1})}. Figura 2: Um ciclo simples com 6 v´ertices e seu esquema de representa¸c˜ao por vizinhos.

3.3. Um esquema alternativo mais compacto para representar os grafos de um ciclo ´e utilizar uma seq¨uˆencia de n v´ertices, dispostos na mesma ordem em que figuram no ciclo: ¿ 1, 2, 3, 4, 5, 6 À. Esta repre-senta¸c˜ao n˜ao ´e ´unica pois o mesmo grafo poderia ser representado por ¿ 1, 6, 5, 4, 3, 2 À ou ¿ 2, 3, 4, 5, 6, 1 À, por exemplo.

Ao utilizarmos um esquema de representa¸c˜ao, se cada grafo da fam´ılia possui uma ´unica representa¸c˜ao esta ´e denominada um C´odigo. Neste caso, a correspondˆencia entre grafos e c´odigos deve ser biun´ıvoca. O processo para a obten¸c˜ao do c´odigo para um determinado grafo de uma dada fam´ılia chama-se Codifica¸c˜ao.

A valida¸c˜ao de um c´odigo consiste em determinar se a ele corresponde um grafo da fam´ılia, sem explicitamente exibir tal grafo. A constru¸c˜ao expl´ıcita do grafo a partir de seu c´odigo chama-se Decodifica¸c˜ao.

(6)

A seguir, apresentamos algumas propriedades b´asicas de ´arvores, introduzimos alguma terminologia conveniente para trabalhar com ´arvores e provamos algumas f´ormulas ´uteis de contagem sobre ´arvores.

4. Definic¸˜oes B´asicas em ´Arvores e ´Arvores Enraizadas

Um dos tipos especiais de grafos mais amplamente utilizados em diferentes aplica¸c˜oes ´e uma ´arvore. H´a uma importante utiliza¸c˜ao como modelos combinat´orios em qu´ımica, ciˆencia da computa¸c˜ao, pesquisa operacional, ciˆencias sociais, e muitas outras ´areas da matem´atica aplicada. Devido `a sua relativa simpli-cidade estrutural, as ´arvores s˜ao uma das classes de grafos mais intensamente estudadas. Portanto, gerar ´arvores ´e um importante problema computacional.

Defini¸c˜ao 4.1. Uma ´arvore enraizada T ´e um grafo com um determinado v´ertice r, chamado de raiz, e pode-se provar (mais adiante ser´a feito) que h´a um ´unico caminho da raiz at´e qualquer dos outros v´ertices.

Ap´os a defini¸c˜ao do v´ertice raiz, os v´ertices restantes constituem um ´unico conjunto vazio ou s˜ao divididos em k (k > 1) conjuntos disjuntos, distintos e n˜ao vazios, que s˜ao as sub´arvores de r, onde cada sub´arvore ´e, por sua vez, uma ´arvore.

Observa¸c˜ao 4.2. Uma ´arvore enraizada T tem uma ´unica raiz.

De fato.

Suponha, por absurdo, que seus v´ertices a e b sejam, ambos, ra´ızes de T . Ent˜ao, haveria caminhos do v´ertice a para o v´ertice b e do v´ertice b para o v´ertice a, formando um ciclo, o que ´e uma contradi¸c˜ao. Assim, uma vez enraizada, uma ´arvore tem uma ´unica raiz.

Intuitivamente, uma ´arvore em Teoria dos Grafos parece-se com uma ´arvore real no sentido de que toda ´arvore pode ser desenhada com a ”aparˆencia” de uma ´arvore real.

Nota¸c˜ao: A nota¸c˜ao Tr indica a sub´arvore de T com raiz em r se r ´e um v´ertice de T .

Como os conjuntos das sub´arvores tˆem de ser disjuntos observe que a estrutura indicada na Figura 3, abaixo, n˜ao ´e uma ´arvore. Podemos tamb´em observar que h´a dois caminhos distintos entre os v´ertices A e H: um caminho passando pelo v´ertice C e outro caminho passando pelo v´ertice B.

Al´em do mais, se uma ´arvore ´e um grafo n˜ao direcionado (sem arestas direcionadas), ent˜ao, qualquer v´ertice pode ser a raiz da ´arvore. Por exemplo, considere os exemplos de ´arvores na Figura 4, abaixo.

(7)

H B C E F G D A I Figura 3 a b c e f g d h i j k l

h

d

i

b

j

e

a

k

l

f

m

c

g

i

h

j

d

e

b

a

l

k

c f

m

g

Figura 4

dire¸c˜oes das arestas s˜ao ignoradas) e um segundo caminho de a para h via g ; o acr´escimo de uma aresta (−→d, a) cria um ciclo o que faz com que se tenha um segundo caminho de a para a, uma vez que j´a temos o caminho nulo de a para a.

4.1. Propriedades das ´arvores enraizadas.

(8)

n˜ao direcionada que n˜ao tem raiz (no sentido de que n˜ao tem uma raiz em especial)). Uma ´arvore n˜ao direcionada pode ser transformada em uma ´arvore enraizada escolhendo-se um v´ertice como raiz e, ent˜ao, direcionando todas as arestas saindo da raiz. Em uma ´arvore T = (V, E), qualquer v´ertice pode ser eleito como raiz, tornando-a enraizada.

Uma ´arvore cuja raiz n˜ao ´e determinada a priori ´e simplesmente chamada uma ´arvore livre. Essas defini¸c˜oes s˜ao usadas para ´arvores enraizadas e n˜ao enraizadas.

Por exemplo, para enraizar a ´arvore n˜ao direcionada que est´a no meio na Figura 4, no v´ertice a, simplesmente podemos direcionar todas as arestas da esquerda para a direita.

O modo padr˜ao de desenhar uma ´arvore enraizada T ´e colocar a raiz a no topo da figura. Ent˜ao os v´ertices adjacentes de a s˜ao colocados num n´ıvel abaixo do n´ıvel de a, e assim por diante, como na primeira ´arvore da Figura 4. Dizemos que a raiz est´a no n´ıvel 0, os v´ertices b e c naquela ´arvore est˜ao no n´ıvel 1, os v´ertices d, e, f , e g naquela ´arvore est˜ao no n´ıvel 2 e assim por diante. Para qualquer v´ertice x em T , exceto a raiz, o pai de x ´e o ´unico v´ertice y com uma aresta para x (o mais pr´oximo do ´ultimo v´ertice no caminho ´unico de a para x). Reciprocamente, o v´ertice x ´e um filho do v´ertice y. Se dois v´ertices tˆem o mesmo pai, eles s˜ao irm˜aos. Na primeira ´arvore da Figura 4, o v´ertice e tem o v´ertice b como seu pai, os v´ertices h e i como seus filhos, os v´ertices d e f como seus irm˜aos, o v´ertice a como seu outro ancestral, e o v´ertice l como seu outro descendente. Os ancestrais de um v´ertice v em uma ´arvore enraizada s˜ao todos os v´ertices no (´unico) caminho simples entre a raiz e v (incluindo o pr´oprio v´ertice v). A raiz ´e, portanto, um ancestral comum a todos os v´ertices. Um v´ertice w ´e descendente de v se, e somente se, v for ancestral de w. A rela¸c˜ao pai-filho se estende aos ancestrais e descendentes de um v´ertice.

Seja n o v´ertice raiz da sub´arvore Tn de T . Os v´ertices ra´ızes n1, n2, · · · , nk das sub´arvores de Tn s˜ao

chamados de filhos de n e n ´e o pai destes v´ertices, que s˜ao v´ertices irm˜aos entre si. Se z ´e filho de n1

ent˜ao n2 ´e tio de z e n ´e avˆo de z. O grau de uma ´arvore ´e o m´aximo entre os graus de seus v´ertices.

Denomina-se caminho numa ´arvore a uma seq¨uˆencia de v´ertices distintos v1, v2, · · · , vk−1, vk, de modo que

exista sempre a rela¸c˜ao ”vi ´e pai de vi+1” ou ”vi ´e filho de vi+1” entre v´ertices consecutivos, isto ´e, entre

v1 e v2, entre v2 e v3, · · · , entre vk−1 e vk. Diz-se que v1 alcan¸ca vk e que vk ´e alcan¸cado por v1, quando

h´a um ´unico caminho entre os v´ertices v1 e vk. Um caminho de k v´ertices ´e obtido pela sequˆencia de k − 1

pares de v´ertices. Nesse caso o caminho ´e dito de comprimento k − 1.

Definimos o n´umero do n´ıvel ou profundidade de um v´ertice x em M como o comprimento do ´unico caminho do v´ertice a para o v´ertice x, ou seja, ´e o n´umero de v´ertices do caminho entre a raiz e o v´ertice. O n´ıvel de um v´ertice ´e o n´umero de ancestrais que ele possui. O n´ıvel da raiz (ou profundidade de uma ´arvore) ´e, portanto, igual a 1. Na Figura 4, o comprimento do caminho entre o v´ertice a e o v´ertice h ´e 3. Cada v´ertice x em T ´e a raiz da sub´arvore de x e seus descendentes. O n´umero de filhos de um v´ertice x ´e chamado grau de sa´ıda desse v´ertice, e indicado por d+

(x). Se um v´ertice u pertence `a sub´arvore Tv

(v ´e a raiz de Tv ), ent˜ao u ´e descendente de v e v ´e dito ancestral ou antecessor de u. Se, neste caso, u

(9)

possui descendentes pr´oprios (v´ertices sem filhos) ´e chamado de v´ertice folha. Ou seja, um v´ertice folha ´e aquele com grau de sa´ıda nulo. Assim, um v´ertice v tal que d(v) = 1 ´e chamado folha.

Um v´ertice que n˜ao ´e folha ´e chamado v´ertice interior ou v´ertice interno. Se cada v´ertice interno de uma ´arvore enraizada tem m filhos, a ´arvore T ´e chamada de ´arvore m-´aria. Se m = 2, a ´arvore T ´e dita uma ´arvore bin´aria e se m = 3, T ´e uma ´arvore tern´aria.

A altura de um v´ertice v ´e o n´umero de v´ertices no maior caminho de v at´e um de seus descendentes. Assim, as folhas, por defini¸c˜ao, tˆem altura igual a 1. A altura de uma ´arvore T ´e igual ao m´aximo n´ıvel de seus v´ertices. Representa-se a altura de T por h(T ) e a altura da sub´arvore de raiz v por h(v).

Uma ´arvore ordenada ´e aquela na qual os filhos de cada v´ertice est˜ao ordenados. Assume-se a ordena¸c˜ao da esquerda para a direita. Desse modo, a ´arvore da Figura 3 ´e ordenada. Entretanto, o mesmo n˜ao ocorre com a ´arvore da Figura 5.

Figura 5. ´Arvore n˜ao ordenada

5. Diferentes Caracterizac¸ ˜oes das ´arvores

As ´arvores tˆem muitas caracteriza¸c˜oes equivalentes. Apresentaremos aqui 3(trˆes) delas.

5.1. Primeira caracteriza¸c˜ao de ´arvores.

Defini¸c˜ao 5.1.1. Um grafo conexo e sem ciclos (ac´ıclico) ´e dito uma ´arvore e ser´a indicado por T = (V, E) (quando for preciso fazer referˆencia aos respectivos conjuntos de v´ertices e arestas) ou simplesmente por T , uma referˆencia do inglˆes ”tree”

(10)

Defini¸c˜ao 5.1.2. Um grafo sem ciclos ´e dito uma floresta. Assim, uma ´arvore ´e uma floresta com um ´

unico grafo conexo: ela mesma. E cada componente conexa de uma floresta ´e uma ´arvore.

A seguir, apresentamos alguns resultados derivados dessa primeira caracteriza¸c˜ao das ´arvores.

Teorema 5.1.3. Um grafo T ´e uma ´arvore se e somente se todo par de v´ertices de T ´e unido por um ´

unico caminho.

Prova:

Seja T uma ´arvore.

Suponha, por contradi¸c˜ao, que existem dois caminhos distintos P1 e P2 entre os v´ertices v e w de T .

Como os caminhos s˜ao distintos, existem v´ertices t1 e t2 tais que as se¸c˜oes de P1 e P2 entre t1 e t2 s˜ao

totalmente disjuntas. Logo, considerando a uni˜ao dessas se¸c˜oes (P1(t1− t2) ∪ P2(t1− t2)), temos um ciclo.

Isso ´e uma contradi¸c˜ao! Logo, se T ´e uma ´arvore, para todo par de v´ertices de T existe um ´unico caminho entre eles.

P

1

v

w

P

2

P

1

v

w

t

1

t

2

P

2 Figura 6

Suponha agora que para todo par de v´ertices de T existe um ´unico caminho entre eles. Logo, T ´e conexo. Falta ent˜ao, agora, mostrar que T ´e grafo ac´ıclico. Suponha que T ´e c´ıclico, ou seja, que T cont´em algum ciclo bC.

u

v

C

Figura 7

Seja e = (u, v) uma aresta no ciclo bC. Ent˜ao, bC − (u, v) ´e um caminho em T entre u e v, contradizendo a hip´otese de que o caminho era ´unico. Portanto, T ´e conexo e ac´ıclico e ent˜ao, por defini¸c˜ao, T ´e uma ´arvore.

(11)

Prova:

Seja T = (V, E) tal que |V | = n, |E| = m. Vamos fazer a prova por indu¸c˜ao no n´umero de v´ertices de T . Para n = 1, temos que: m = 0 = n−1 = 1−1. Verdadeira para n = 1. Suponha como hip´otese de indu¸c˜ao que o resultado ´e v´alido para toda ´arvore com menos do que n v´ertices, e para n > 1. Ent˜ao, T possui pelo menos uma aresta e = {v, w}. Se removermos a aresta e de T teremos duas componentes conexas T1 e T2,

sendo ambas ´arvores e o grafo T com menos de n v´ertices. Seja |V (t1)| = n1 ; |E(t1)| = m1 ; |V (t2)| = n2

; |E(t2)| = m2 Logo, a hip´otese de indu¸c˜ao vale para T1 e para T2, ou seja: m1 = n1 − 1 e m2 = n2− 1.

Mas, |V (t)| = n = (|V (t1)| = n1) + (|V (t2)| = n2) = n1 + n2|E(t)| = m = |E(t1)| + |E(t2)| + 1 =

n1 − 1 + n2− 1 + 1 = n1+ n2− 1 = n − 1. Ent˜ao, o resultado vale para toda ´arvore com n elementos,

n > 1.

Lema 5.1.5. Seja T = (V, E) uma ´arvore. As afirma¸c˜oes seguintes s˜ao equivalentes: 1. T ´e uma ´arvore.

2. T ´e conexo e |E| ´e m´ınima. 3. T ´e ac´ıclico e |E| = |V | − 1. 4. T ´e conexo e |E| = |V | − 1.

5. T ´e ac´ıclico e para todo v, w ∈ V , a adi¸c˜ao de uma aresta v,w produz um grafo contendo exatamente um ciclo.

6. T ´e conexo e para toda aresta e = {u, w} em E, o grafo G1 = G − {{u, w}} ´e desconexo.

7. Para quaisquer v´ertices u e w em V , o caminho de u a w ´e ´unico.

Prova:

1 =⇒ 2: Se T ´e ´arvore, T ´e conexo e ac´ıclico, e o n´umero m´ınimo de arestas ´e n − 1, pois, caso contr´ario, T seria desconexo (um caminho ´e o grafo conexo com o menor n´umero de arestas e, sendo o n´umero de v´ertices igual a n, h´a n − 1 arestas nesse caminho);

2 =⇒ 3: Como T ´e conexo e |E| ´e m´ınima, T ´e ac´ıclico, pois a existˆencia de qualquer ciclo implica que |E| n˜ao seja m´ınima. A retirada de uma aresta e = u, w de T implica que T1 = T − {{u, w}}

´e grafo desconexo com duas componentes conexas, pois, caso contr´ario, a inclus˜ao da aresta em T formaria um ciclo. Procedendo `a retirada das arestas de T , uma a uma, ter´ıamos, ao final, a forma¸c˜ao de n componentes conexas (o m´aximo poss´ıvel) com a retirada de n − 1 arestas. Assim: m = |E| = |V | − 1;

3 =⇒ 4: Suponha que T ´e ac´ıclico e m = |E| = n − 1. Suponha, por absurdo, que T ´e desconexo. Logo, T no m´ınimo tem duas componentes conexas C1 e C2. Sejam os v´ertices u e w,

respectivamente, de C1 e C2. A inclus˜ao da aresta e = u, w `a T n˜ao cria um ciclo e torna T conexo.

Se T tem k componentes conexas, inclui-se k − 1 arestas como visto antes, e, da´ı, T ´e conexo. Nesse caso, o total de arestas ser´a m = n − 1 + (k − 1) o que ´e absurdo, pois por hip´otese, m = n − 1. Logo, T ´e conexo e m = n − 1;

(12)

(a) Suponha que T ´e conexo e m = |E| = n − 1. Suponha, por absurdo, que C1 e C2 s˜ao ciclos

em T . Ao retirar duas arestas, uma de cada ciclo, T continuar´a conexo e m = n − 1 − 2 6 n − 1. Contradi¸c˜ao, pois m ´e m´ınima. Logo, T ´e ac´ıclico;

(b) Seja e = u, w uma aresta a ser adicionada a T . Como T ´e conexo, havia um caminho entre os v´ertices u e w e a inclus˜ao da aresta e = u, w cria um ciclo em T . Como T ´e ac´ıclico (parte (a)), esse ciclo criado ´e ´unico;

5 =⇒ 6: (a) A primeira parte vem de 3 4. Logo, para todo apr de v´ertices u e w de V , h´a um ´

unico caminho entre u e w. A retirada de qualquer aresta {v, t} no caminho entre dois quaisquer v´ertices u e w, desconecta o grafo T , ou seja, T − {{v, t}} ´e desconexo;

6 =⇒ 7: Suponha que dois quaisquer v´ertices u e w de T estejam unidos por mais de um caminho em T . Assim, a retirada de qualquer aresta de um dos caminhos entre u e w n˜ao torna o grafo desconexo, o que contraria a hip´otese. Logo, o caminho entre dois v´ertices quaisquer em T ´e ´unico; 7 =⇒1: Suponha que para todo par de v´ertices u e w em V , o caminho entre u e v ´e ´unico. Logo, por defini¸c˜ao, T ´e conexo. Como o caminho entre u e v ´e ´unico, n˜ao h´a um ciclo contendo u e w em T . Logo, T ´e ac´ıclico. Da´ı T ´e ´arvore, por defini¸c˜ao.

Teorema 5.1.6. (do aperto de m˜aos) Seja G = (V, E) grafo tal que |V | = n e |E| = m. Ent˜ao X

v∈V

d(v) = 2m.

Prova: cada aresta (v, w) contribui com 2(duas) unidades para a soma dos graus dos v´ertices (uma unidade para d(v) e uma unidade para d(w)). Logo, a soma total ´e duas vezes o n´umero de arestas.

Observa¸c˜ao: Esse teorema ´e tamb´em v´alido para multigrafos.

Corol´ario 5.1.7. Em qualquer grafo G, a soma dos graus de seus v´ertices ´e par.

Prova: ´E imediato, pois X

v∈V

d(v) = 2m, e 2m ´e par.

Corol´ario 5.1.8. Em qualquer grafo G = (V, E), o n´umero de v´ertices de grau ´ımpar ´e par.

Prova: Sejam VP = {v ∈ V / d(v) ´e par} e VI = {v ∈ V / d(v) ´e ´ımpar}. ´E claro que V = VP ∪ VI e

VP ∩ VI = φ. Al´em disso: X v∈VP∪VI d(v) =X v∈V d(v) = X v∈Vp d(v) +X v∈VI

d(v) = 2m Logo, o n´umero de parcelas

de grau ´ımpar (ou o n´umero de v´ertices de grau ´ımpar) ´e par.

Lema 5.1.9. Em uma ´arvore T = (V, E), X

v∈V

d(v) = 2m = 2n − 1 , onde n = |V |.

Prova: Imediato, pois qualquer aresta u, w de um grafo tem o grau de seus v´ertices extremidades u e w contados duas vezes: uma com os vizinhos de u e outra com os vizinhos de w, e pelo Lema 5.1.5, m = n − 1.

(13)

Teorema 5.1.11. Toda ´arvore n˜ao trivial, ou seja, |V (T )| > 2 tem pelo menos duas folhas.

Prova: Todo grafo conexo com pelo menos dois v´ertices tem uma aresta. Considere um caminho maximal em uma ´arvore. Os v´ertices extremos desse caminho s˜ao necessariamente de grau 1 (pois se n˜ao fossem de grau 1, o caminho poderia ser prolongado e ent˜ao n˜ao mais seria um caminho maximal). Logo, os v´ertices extremos desse caminho s˜ao duas folhas de T .

Lema 5.1.12. Seja T = (V, E) uma ´arvore com n v´ertices e v uma folha de T . Ent˜ao, T − v ´e uma ´arvore com exatamente n − 1 v´ertices.

Prova: Seja v uma folha de T e T1 = T − v. Sejam u e w ∈ V (T ), u 6= v, w 6= v e P um caminho

entre u e w. ´E claro que v n˜ao est´a em P . Logo, P ´e tamb´em um caminho em T1. Logo T1 ´e conexo. A

remo¸c˜ao do v´ertice v n˜ao cria ciclos em T1. Logo, T1 ´e uma ´arvore com n − 1 v´ertices.

Defini¸c˜ao 5.1.13. O centro de uma ´arvore ´e definido como C(T ) = {v ∈ V (T )/ e(v) ´e m´ınima}. Essa ´e uma particular defini¸c˜ao do centro de um grafo, como anteriormente j´a visto.

Teorema 5.1.14 (Jordan 1869). O centro de uma ´arvore T tem exatamente um v´ertice ou exatamente dois v´ertices adjacentes entre si.

Prova: Vamos fazer a prova por indu¸c˜ao no n´umero de v´ertices de T . Se |V (T )| = 1, ent˜ao C(T ) = v e, assim: |C(T )| = 1. Se |V (T )| = 2, ent˜ao V (T ) = u, v e, assim: |C(T )| = 2.

Logo, a proposi¸c˜ao ´e verdadeira para n = 1 e para n = 2.

Suponha, ent˜ao, o resultado verdadeiro para toda ´arvore com menos do que n v´ertices, sendo n > 2. Seja T qualquer ´arvore com n v´ertices. Seja F = {vV (T )/d(v) = 1}, ou seja: F ´e o conjunto das folhas de T . Seja T1 = T − F .

Pelo Lema 5.1.9, T1 ´e uma ´arvore com menos do que n v´ertices (logo, a hip´otese de indu¸c˜ao se aplica a

T1).

Observe que para todo v´ertice u ∈ V (T ), o v´ertice que est´a a uma distˆancia m´axima de u ´e necessari-amente uma folha, pois T ´e grafo conexo. Logo, os v´ertices de excentricidade m´axima s˜ao as folhas e, ent˜ao,C(T ) ∩ F = φ.

Como todas as folhas foram removidas de T e nenhum caminho entre dois v´ertices interiores de T passam por folhas, temos que eT1(u) = eT (u) − 1. Ou seja, os v´ertices de excentricida de m´ınima em T1 s˜ao iguais

aos v´ertices de excentricidade m´ınima de T . Temos, ent˜ao, que: C(T ) = C(T1) e, logo, vale o resultado

para T , n > 1.

Defini¸c˜ao 5.1.15. Dada uma ´arvore T = (V, E), uma raiz de T ´e qualquer v´ertice v de T escolhido e chamado, a partir da escolha, de raiz. A ´arvore T passa a ser dita, ent˜ao, uma ´arvore enraizada.

(14)

r Figura 8 Exemplo 5.1.16.1.

e

removendo

a aresta

e

G

w

(G) = 2

w

(G - e) = 3

u

v

Figura 9

Teorema 5.1.17. Uma aresta e ´e uma ponte de G se e somente se n˜ao existir ciclo contendo a aresta e.

Prova: Seja e = {v, w} ∈ E(G) uma ponte de G. Logo, ω(G − e) > ω(G) e, al´em disso, v e w , os v´ertices extremos da aresta e est˜ao em componentes conexas distintos. Suponha, por contradi¸c˜ao, que existe um ciclo ω contendo a aresta e. Logo, ω − e ´e um caminho entre v e w em G − e, contradizendo o fato de que estavam em componentes conexas distintas.

v

e

w

C - e

Figura 10

Suponha, agora, que n˜ao existe um ciclo contendo a aresta e

(15)

v

e

w

P

Figura 11

Corol´ario 5.1.18. Seja G = (V, E) um grafo conexo. T ´e uma ´arvore se e somente se cada aresta de T for uma ponte.

Prova: Suponha que T ´e uma ´arvore. Logo, por defini¸c˜ao, T ´e grafo conexo e ac´ıclico e, portanto, pelo Teorema 5.1.17, toda aresta de T ´e uma ponte. Por outro lado, suponha que toda aresta de T ´e uma ponte. Da´ı, pelo mesmo Teorema, n˜ao existe ciclo em T que contenha qualquer aresta de T e ent˜ao T ´e ac´ıclico e conexo. Portanto,T ´e uma ´arvore.

5.2. Segunda caracteriza¸c˜ao de ´arvores. Essa caracteriza¸c˜ao envolve a no¸c˜ao de folhas. Como visto anteriormente, uma folha de um grafo G ´e um v´ertice de grau 1. ´E claro que toda ´arvore com mais de um v´ertice tem pelo menos dois v´ertices folhas.

Uma caracteriza¸c˜ao recursiva de ´arvores ´e: Um grafo G (tendo um v´ertice folha v), com tamanho n > 1, ´e uma ´arvore se e somente se removendo-se a folha v e a ´unica aresta incidente na folha v, o grafo remanescente ´e uma ´arvore de tamanho n − 1.

Os v´ertices sem filhos de uma ´arvore T s˜ao chamados folhas de T . Todos os outros v´ertices (com filhos) s˜ao chamados v´ertices internos de T . Se cada v´ertice interno de uma ´arvore enraizada tem m filhos, a ´arvore T ´e chamada de ´arvore m-´aria.

Uma ´arvore enraizada ´e uma ´arvore com um v´ertice, a raiz, que ser´a distinta dos outros v´ertices. Duas ´arvores enraizadas s˜ao consideradas isomorfas se e somente se existe uma bije¸c˜ao entre elas que preserva adjacˆencias correspondentes entre as arestas e, a raiz de uma ´e levada na raiz da outra.

Existem exatamente nn−2 ´arvores rotuladas com n v´ertices. Esse resultado, devido `a Cayley, ´e um dos

mais c´elebres resultados em Teoria dos Grafos. Existem muitas provas para ele, uma delas devido `a Pr¨ufer, que usa um particular c´odigo para representar ´arvores rotuladas, conhecido como C´odigo de Pr¨ufer. Mais adiante veremos em detalhes como obter esse c´odigo e provar esse resultado. Usando a caracteriza¸c˜ao recursiva de ´arvores mencionada acima, ´e f´acil mostrar que ´e poss´ıvel determinar a ´arvore rotulada cujo c´odigo ´e a seq¨uˆencia de r´otulos fornecida.

5.3. Terceira caracteriza¸c˜ao de ´arvores.

Teorema 5.3.1. - Uma ´arvore com n v´ertices tem n-1 arestas.

(16)

Teorema 5.3.2. Uma ´arvore m-´aria T com k v´ertices internos tem n = mk + 1 v´ertices no total.

Prova: Cada v´ertice interno tem m filhos. Assim h´a mk filhos mais o v´ertice n˜ao-filho, a raiz. Logo, h´a mk + 1 v´ertices no total.

Corol´ario 5.3.3. Seja T uma ´arvore m-´aria. Ent˜ao temos: (a) Se T tem k v´ertices internos, ela tem j = (m − 1)k + 1 folhas. (b) Se T tem j folhas, ele tem k = j − 1

m − 1 v´ertices internos e

mj − 1

m − 1 v´ertices no total. (c) Se T tem n v´ertices no total, ela tem n − 1

m v´ertices internos e

(m − 1)n + 1

m folhas.

Prova:

(a) Sabemos que o total de v´ertices (n) ´e igual `a soma dos v´ertices internos (k) com as folhas (j). Logo: j = n − k. Mas n = mk + 1 do Teorema. Da´ı: j = n − k = mk + 1 − k = (m − 1)k + 1.

(b) De (a), tem-se: j = (m − 1)k + 1. Logo, j − 1 = (m − 1)k. Da´ı: k = j − 1

m − 1 e como n = j + k , ent˜ao n = j + j − 1 m − 1 = mj − 1 m − 1 . (c) De n = j + k, vem: k = n − j = n − {(m − 1)k + 1} = n − (m − 1)k − 1. Logo: k + (m − 1)k = n − 1. Da´ı: k(1 + m − 1) = n − 1. Ou seja: k = n − 1 m .

6. Problemas simples envolvendo o estudo das ´arvores

6.1. Introdu¸c˜ao. Nesta se¸c˜ao utilizamos as f´ormulas de contagem demonstradas na se¸c˜ao anterior e aplicamos essas f´ormulas em alguns problemas de decomposi¸c˜ao. A seguir, mostramos como as ´arvores podem ser usadas para decompor e sistematizar a an´alise de v´arios problemas de busca. Essas f´ormulas de contagem ser˜ao bastante ´uteis nas se¸c˜oes seguintes, quando da discuss˜ao de particularidades sobre as ´arvores bin´arias.

6.2. Problemas simples.

6.2.1. O problema de uma cadeia de telefones.

Suponha que uma cadeia de telefones seja instalada por uma empresa que tenha 100 funcion´arios. Ela ´e ativada por um l´ıder que liga para um escolhido grupo de trˆes pessoas. Cada uma dessas trˆes pessoas liga para grupos escolhidos de trˆes outras pessoas, e assim por diante. Quantas liga¸c˜oes ser˜ao feitas ao todo? Quantas pessoas n˜ao ter˜ao que fazer nenhuma liga¸c˜ao?

Solu¸c˜ao: Tal cadeia telefˆonica ´e uma ´arvore enraizada com 100 v´ertices. Uma aresta corresponde a uma liga¸c˜ao. Ent˜ao, pelo Teorema 5.3.1, haver´a 100 − 1 = 99 liga¸c˜oes.

Uma vez que a ´arvore ´e tern´aria (3-´aria), do Corol´ario 5.3.3 parte (c), tem-se que h´a k = (3 − 1)100 − 1

3 =

67 folhas. Isto ´e, 67 pessoas n˜ao far˜ao nenhuma liga¸c˜ao.

6.2.2. O problema do torneio de tˆenis.

(17)

CAMPEÃO

Figura 12. ´Arvore de um torneio de tˆenis.

Solu¸c˜ao: torneio se desenrola de um modo bin´ario contr´ario (semelhante a uma ´arvore) mas a constru¸c˜ao da ´arvore se faz no sentido contr´ario: das folhas para a raiz da ´arvore, como pode ser visto na Figura 7.

Todos os participantes s˜ao folhas e as partidas s˜ao os v´ertices internos. Pelo Corol´ario parte (b), se h´a j = 56 folhas e a ´arvore ´e bin´aria, ent˜ao h´a k = 56 − 1

2 − 1 = 55 partidas a serem disputadas.

Como visto anteriormente, a altura de uma ´arvore enraizada ´e o comprimento do caminho mais longo, ou, equivalentemente, o maior n´umero de n´ıvel indicado para qualquer v´ertice. Uma ´arvore enraizada de altura h ´e chamada equilibrada se todas as folhas est˜ao nos n´ıveis h e h − 1. ´Arvores equilibradas s˜ao ”boas” ´arvores. A ´arvore da cadeia de telefones do problema 6.2.1 deveria ser equilibrada de modo a fazer chegar a mensagem a todos os funcion´arios o mais r´apido poss´ıvel. Uma ´arvore de torneio de tˆenis, como do problema 6.2.2, deveria ser equilibrada para ser justa; de outra forma, alguns jogadores poderiam chegar `as finais jogando menos partidas que outros jogadores. Na pr´atica, em Torneios do Grand Slam, os melhores jogadores, segundo um ranking anual, s´o come¸cam a jogar a partir da segunda rodada, ou seja, s˜ao v´ertices internos sem terem sido folhas. Tornando-se uma ´arvore m-´aria equilibrada, minimiza-se sua altura, como veremos a seguir.

Teorema 6.2.3Considere T uma ´arvore m-´aria de altura h. Ent˜ao: (a) T tem no m´aximo mh folhas; (b)

se T tem j folhas, ent˜ao tem altura h > [log jm]; (c) se T ´e uma ´arvore equilibrada, ent˜ao h = [log jm] .

Prova: ´E claro que uma ´arvore m-´aria de altura igual a l tem m folhas (os filhos da raiz). Agora vamos usar indu¸c˜ao para mostrar que uma ´arvore m-´aria de altura h, tem no m´aximo, mh folhas. As

(18)

da raiz. Estas m sub-´arvores tˆem altura de no m´aximo h − 1. Por indu¸c˜ao, elas tˆem no m´aximo mh−1

folhas cada uma ou no m´aximo m.mh−1 = mh folhas no total. A segunda parte do Teorema, agora segue

imediatamente (basta lembrar que h = [log jm] implica em que mh−1 < j 6 mh).

Exerc´ıcio 6.2.4 Mostre que a soma dos n´umeros de n´ıvel de todas as j-folhas, numa ´arvore bin´aria, ´e pelo menos j(log2j) e, portanto, o n´ıvel m´edio de folhas ´e pelo menos log2j.

Um dos usos mais comuns da aplica¸c˜ao de ´arvores ´e em procedimentos de testagens seq¨uenciais. Os dois procedimentos de testagem seq¨uenciais mostrados a seguir (um deles um problema b´asico de ciˆencia da computa¸c˜ao e o outro um quebra-cabe¸ca de l´ogica), ilustram a variedade de tais aplica¸c˜oes de ´arvores.

6.2.5 - O problema da busca de dicion´ario

Examinemos o problema do compilador ”busca no dicion´ario”. Queremos identificar uma palavra des-conhecida (n´umero) X testando-a em um ramo de 3 caminhos indicados por: menor que, igual a e maior que, contra ”palavras” num conjunto (dicion´ario) ao qual X pertence. O procedimento de teste pode ser representado por uma ´arvore bin´aria, ou quase bin´aria. Por exemplo, se X fosse uma das 14 primeiras letras do alfabeto, ent˜ao a Figura 8 seria a tal ´arvore bin´aria de busca. Cada v´ertice ´e rotulado com a letra testada naquele est´agio do procedimento. O procedimento come¸ca por testar X contra H. A aresta `a esquerda de um v´ertice ´e colocada quando X ´e menor que a letra e a aresta da direita quando X ´e maior. Tal ´arvore pode ter um v´ertice interno com apenas um filho se o n´umero de v´ertices for par. Para minimizar o n´umero de testes necess´arios de modo a reconhecer qualquer X, ou seja, minimizar a altura da ´arvore de busca, devemos tornar a ´arvore equilibrada. Suponha que X pertence a um conjunto de n ”palavras”. Qual o n´umero m´aximo de testes que seriam necess´arios para reconhecer X?

H

D

L

B

F

J

N

A

C

E

G

L

K

M

Figura 13. ´Arvore de teste da busca do dicion´ario.

(19)

Pelo Corol´ario 5.3.3, uma ´arvore bin´aria de busca com n v´ertices tem (2 − 1)n + 1

2 = 2

n + 1

2 folhas. Ent˜ao, o n´umero m´aximo de testes necess´arios para reconhecer X ´e a altura de uma ´arvore de busca equilibrada de n + 1

2 folhas, ou seja: h = log2 n + 1

2 = log2[(n + 1)] − 1.

6.2.6 - O Problema do quebra-cabe¸ca

Um quebra-cabe¸ca de l´ogica, muito conhecido, tem n moedas, sendo uma delas falsa (muito leve ou muito pesada em rela¸c˜ao `as outras n − 1 moedas) e uma balan¸ca para comparar o peso de quaisquer dois conjuntos de moedas (a balan¸ca pode inclinar-se para a direita, para a esquerda ou ficar equilibrada).

O problema a ser resolvido ´e: para um dado valor de n, determinar um procedimento para encontrar a moeda falsa realizando-se um n´umero m´ınimo de pesagens.

Em algumas varia¸c˜oes deste problema, o enunciado informa que a moeda falsa ´e muito pesada ou leve demais. Se, a priori, sabemos que a moeda falsa ´e muito leve, quantas pesagens ser˜ao necess´arias, no m´ınimo, para um conjunto com n moedas?

Solu¸c˜ao:

Nosso procedimento para testagem vai formar uma ´arvore na qual o primeiro teste ´e a raiz da ´arvore. Os demais outros testes s˜ao os outros v´ertices internos, e as solu¸c˜oes, isto ´e, qual moeda ´e falsa, s˜ao as folhas.

Consideremos para a ilustra¸c˜ao que ser´a feita (veja a Figura 9), a testagem para oito moedas (numeradas de 1 a 8), onde a forma¸c˜ao da ´arvore obedecer´a:

1 seguir pela aresta da esquerda quando o conjunto de moedas da esquerda, numa testagem, ´e mais leve; 2. seguir a aresta do meio quando os dois conjuntos de moedas tˆem o mesmo peso;

3. seguir pela aresta da direita quando o conjunto de moedas da direita ´e mais leve.

1 2 3

6 7 8

1

3

4

5

6

8

1

2

3 4

5

6 7

8

9

1 2 3

6 7 8

1

3

4

5

6

8

1

2

3 4

5

6 7

8

9

Figura 14. ´Arvore de teste com 8 moedas.

(20)

haver´a n folhas, isto ´e, n diferentes possibilidades de qual moeda ´e a falsa. O Teorema 6.2.3 garante que a ´arvore de teste deve ter altura maior do log2n que para conter n folhas. N˜ao ´e autom´atico que exista um

procedimento de teste que possa alcan¸car o limite de altura . Para o problema da moeda falsa sendo mais pesada ou mais leve, este limite pode ser alcan¸cado dividindo-se sucessivamente o subconjunto corrente, onde se sabe estar a moeda falsa, em trˆes pilhas quase iguais e comparando-se duas das pilhas de mesmo tamanho.

Se a moeda falsa n˜ao pode ser identificada, a priori, como mais leve ou mais pesada, ent˜ao o problema seria muito mais dif´ıcil. Uma determinada moeda ir´a, geralmente (mas n˜ao sempre), aparecer em duas folhas da ´arvore de teste: uma vez quando a moeda for mais leve e outra vez quando for mais pesada. A Figura 9 ilustra o problema comentado.

6.2.6 - O Problema do compilador

Esse problema ´e um exemplo de constru¸c˜ao de ´arvore de baixo para cima, come¸cando por um conjunto de folhas.

Ao construir uma tabela de s´ımbolos, um compilador inicialmente lista um grande n´umero de diferentes nomes de vari´aveis usados pelo programa (e outros nomes extras gerados pelo compilador). Mais tarde, o compilador combina repetidamente dois nomes ou dois subconjuntos de nomes que dever˜ao ser atribu´ıdos a um mesmo lugar na mem´oria (em v´arias sub-se¸c˜oes do programa, nomes diferentes s˜ao usados para a mesma vari´avel). Considerando que um certo nome de vari´avel possa ser submetido em diversas rodadas, sendo renomeado e combinado com outros nomes, n˜ao ´e eficaz mudar um nome a cada vez que ele ´e combinado. Ao inv´es disso, pode-se construir ´arvores como ´e mostrado nas Figuras 10. Se os nomes A e B s˜ao equivalentes e ambos deveriam ser uma vari´avel chamada A, combinamos as folhas A e B em uma ´arvore, como mostrado na Figura 10, tomando A como raiz. Se A e B s˜ao combinados com o novo nome A0

e depois A0

´e combinado com C, e agora tanto A0

quanto C s˜ao equivalentes e agora chamados C, constru´ımos a ´arvore mostrada na Figura 10. Seguindo para cima at´e o topo da ´arvore, pode-se determinar o nome atual de qualquer nome original. Seja COMB(W ; X; Y ) a opera¸c˜ao de combinar os conjuntos de vari´aveis atualmente chamadas X e Y em uma vari´avel chamada W. Suponha que iniciamos com nomes de vari´aveis A, B, C, D, E, F, G e sucessivamente ser˜ao feitas as seguintes opera¸c˜oes: COMB(E; E, G), COMB(B0 ; B, C), COMB(D0 ; D, F ), COMB(B0 ; B0 , E), COMB(A0 ; A0 , B0

). Ent˜ao ter´ıamos a fam´ılia de ´arvores mostrada na Figura 10. Por exemplo, a vari´avel originalmente chamada G ´e agora chamada A0

(como s˜ao A, B, C, e E).

7. Resultados te´oricos envolvendo o estudo sobre ´Arvores 7.1. ´Arvores Geradoras.

(21)

(a) A B B A (b) B C A B A´ A B C A´ C B A ( c ) A´ A B´ B C E G A A A

Figura 15. Procedimentos de um compilador

gerador minimal conexo de um grafo G conexo onde qualquer aresta que seja recolocada na ´arvore, forma um ciclo em G.

G T

Figura 16

Corol´ario 7.1.2. Todo grafo conexo G possui uma ´arvore geradora.

Prova: Seja T um subgrafo gerador minimal conexo de G em rela¸c˜ao `a propriedade de ser conexo e em rela¸c˜ao `a quantidade de arestas. Assim, T ´e conexo por constru¸c˜ao. Vamos mostrar que T ´e ac´ıclico.

Suponha que T n˜ao seja ac´ıclico e seja bC um ciclo de T , e seja e uma aresta de bC. Logo, pelo Teorema 5.1.14, a aresta e n˜ao ´e uma ponte de T .

(22)

Corol´ario 7.1.3. Se G ´e grafo conexo ent˜ao m > n − 1, onde |E(G)| = m e |V (G)| = n.

Prova: Seja G um grafo conexo. Ent˜ao, pelo Corol´ario 7.1.2, G tem uma ´arvore geradora T e, portanto, tem-se que: m = |E(G)| ≥ |E(T )| = |V (T )| − 1 = ∗n − 1. Da´ı m > n − 1. A igualdade ∗ vem da Defini¸c˜ao 7.1.1

Teorema 7.1.4. Seja T uma ´arvore geradora de G e uma aresta c ∈ E(G) − E(T ). Ent˜ao, T + e cont´em exatamente um ciclo.

Prova: Seja T uma ´arvore geradora de G.Sabemos que ´e um subgrafo gerador minimal conexo de G e, portanto, a inclus˜ao de uma aresta c ∈ E(G) − E(T ) gera um ciclo em T e esse ciclo, necessariamente, cont´em a aresta e.

v

e

w

C - e

Figura 17

Seja bC um ciclo de T + e contendo a aresta e. Temos que bC − e ´e um caminho em T entre os extremos da aresta e. Logo, esse caminho ´e ´unico.

Portanto, o ciclo que cont´em a aresta e, ´e ´unico, ou seja, T + e cont´em exatamente um ciclo.

Defini¸c˜ao 7.1.5. Se T ´e uma ´arvore geradora de G ent˜ao T (G) = (V, E(G) − E(T )) ´e chamado de co-´arvore de G.

Exemplo

G

T

T

(G) é co-árvore de G

Figura 18

Teorema 7.1.6. Seja G um grafo conexo, T uma ´arvore geradora de G e uma aresta e de G. Ent˜ao: (i) T (G) n˜ao cont´em cortes de arestas de G;

(23)

Prova:

(i) Uma co-´arvore T (G) n˜ao pode conter um corte de arestas de G, porque mesmo retirando todas as arestas de , o grafo G permanece conexo, pois restar˜ao as arestas de T , que ´e uma ´arvore geradora de G. (ii) Seja e uma aresta de T tal que T − e ´e desconexo. Logo, a aresta e ´e ponte de T . Sejam S e S os conjuntos de v´ertices dos componentes conexos de T − e respectivamente. Assim, como [S, S] ´e um corte de arestas de G, por defini¸c˜ao, e ´e minimal. De fato: [S, S] − e n˜ao ´e um corte por (i). Ou seja, B = [S, S] − e ⊂ T (G) + e. Tome qualquer aresta e0

∈ B. T − e + e0

´e ainda uma ´arvore geradora m´ınima de G, Logo, todo corte minimal de G contido em T (G) + e deve incluir essa aresta e. Logo, B ´e o ´unico corte minimal de G.

S

e

G

T

T- e

(G)+ e

(G)- e

e

e

e

T

T

S

Figura 19 [S, S] = T (G) + e.

Observa¸c˜ao 7.1.7. Observe que existe uma analogia entre ciclos x ´arvores e corte minimais x co-´arvores, a saber:

ciclos x ´arvores cortes minimais x co-´arvores T n˜ao cont´em ciclos. T (G) n˜ao cont´em cortes minimais

T + e cont´em um ´unico ciclo. T (G) + e cont´em um ´unico corte minimal de G.

Teorema 7.1.8. Em uma ´arvore T , n˜ao trivial, um v´ertice v ∈ V (T ) ´e articula¸c˜ao se e somente se v n˜ao ´e uma folha de T .

Prova: Seja T uma ´arvore n˜ao trivial. Seja v ∈ V (T ) uma articula¸c˜ao. Ent˜ao existem dois v´ertices u e w de T , tal que todo caminho entre os v´ertices u e w cont´em o v´ertice v. Logo, d(v) > 1. Ent˜ao, v n˜ao ´e uma folha de T .

(24)

Corol´ario 7.1.9. Todo grafo conexo G, n˜ao trivial, possui pelo menos dois v´ertices que n˜ao s˜ao artic-ula¸c˜oes.

Prova: Seja G um grafo conexo. Pelo Corol´ario 7.1.2, G possui uma ´arvore geradora T . E sabemos que T tem pelo menos duas folhas. Sejam v1 e v2 essas folhas. Pelo Teorema 7.1.8, v1 n˜ao ´e uma articula¸c˜ao.

Logo, ω(T − v1) = ω(T ) = 1. Mas T − v1 ´e uma ´arvore geradora de G − v1 e ω(G − v1) 6 ω(T − v1) = 1.

Logo, ω(G − v1) = ω(G) = 1, ou seja, v1 n˜ao ´e articula¸c˜ao de G. De maneira an´aloga, v2 n˜ao ´e articula¸c˜ao

de G. Logo, vale o Corol´ario.

8. Codificac¸˜ao e Decodificac¸˜ao de ´Arvores

8.1. Introdu¸c˜ao. Neste par´agrafo apresentamos conceitos te´oricos sobre codifica¸c˜ao e decodifica¸c˜ao de ´arvores. Apresentamos o C´odigo de Pr¨uffer e mostramos sua utiliza¸c˜ao na codifica¸c˜ao e decodifica¸c˜ao em ´arvores, as formas de armazenamento de ´arvores na mem´oria do computador e a seguir mostramos como as ´arvores podem ser usadas para decompor e sistematizar a an´alise de v´arios problemas de busca. 8.2. Os problemas de Gera¸c˜ao e Contagem de Grafos.

Como dissemos no Par´agrafo 2, o estudo de propriedades dos grafos de forma segmentada por diferentes fam´ılias ganha importˆancia na Teoria dos Grafos e tˆem proporcionado avan¸cos significativos na solu¸c˜ao de diferentes problemas reais que tomam elementos particulares dessas fam´ılias como modelos de estudo.

Diferentes problemas de natureza combinat´oria s˜ao levantados sobre uma particular fam´ılia de grafos. Dentre esses, aqueles que tratam:

I) da contagem do n´umero de elementos da fam´ılia, ou seja: o de determinar qual o n´umero total de grafos distintos de uma fam´ılia claramente definida que podem ser constru´ıdos com um n´umero finito n de v´ertices.

De grande importˆancia tamb´em para estudos de car´ater combinat´orio ´e o de verificar dentre todos os grafos contados numa fam´ılia com n´umero finito de elementos quantos s˜ao e quantos n˜ao s˜ao isomorfos entre si, procurando subdividi-los em subclasses n˜ao isomorfas. ´E claro que, tamb´em para fam´ılias de quantidades infinitas de grafos, essa subdivis˜ao em subclasses respeitando-se o isomorfismo ´e de grande importˆancia para caracterizar propriedades.

II) o problema de criar condi¸c˜oes que permitam (conhecido o n´umero finito de v´ertices), a gera¸c˜ao de grafos de uma dada fam´ılia atendendo `as seguintes situa¸c˜oes:

a) a gera¸c˜ao aleat´oria uniforme de qualquer grafo da fam´ılia com a propriedade de que qualquer grafo da fam´ılia possui igual probabilidade de ser gerado. Desse modo, a gera¸c˜ao dos grafos cria uma distribui¸c˜ao uniforme de elementos;

b) a gera¸c˜ao de todos os grafos da fam´ılia, um a seguir do outro, de modo ´unico e de forma sistem´atica atrav´es de uma lei de forma¸c˜ao que pode ser ´unica ou n˜ao, para todos os elementos, ou seja, enumerando seus elementos.

(25)

com um n´umero finito de v´ertices ´e bastante simplificada. Igualmente interessantes seriam os problemas que levantassem a possibilidade de inferir se, na gera¸c˜ao (aleat´oria ou por enumera¸c˜ao) os grafos gerados estariam ou n˜ao livres de serem isomorfos, ou seja, s´o gerar um novo grafo da fam´ılia que n˜ao tenha um grafo isomorfo a ele em alguma sub-fam´ılia, caso contr´ario seria descartado por j´a conter um representante com caracter´ısticas idˆenticas (a menos da rotula¸c˜ao de v´ertices). Portanto, s´o seriam considerados os grafos a menos de isomorfismo.

Exemplos:

1. Seja V = {1, 2, 3, 4} um conjunto de 4 v´ertices. Vamos avaliar o problema da contagem de ´arvores em V .

• Se o isomorfismo n˜ao ´e levado em conta, temos 44−2

= 16 ´arvores distintas;

• Do contr´ario, h´a apenas duas ´arvores distintas n˜ao isomorfas com quatro v´ertices, conforme indicadas na figura abaixo.

1

2

4

3

1

2

4

3

1

2

4

3

1

2

4

3

1

2

4

3

1

2

4

3

1

2

4

3

1

2

4

3

1

2

4

3

1

2

4

3

1

2

4

3

1

2

4

3

1

2

4

3

1

2

4

3

1

2

4

3

1

2

4

3

Figura 20. Enumera¸c˜ao das ´arvores com 4 v´ertices

2. Consideremos a seguinte quest˜ao: quantas ´arvores h´a com V = {v1, v2, v3, v4, v5} como conjunto de seus

v´ertices, e quais s˜ao elas?

Se o isomorfismo entre essas ´arvores ´e irrelevante, h´a 55−2

= 53 = 125 ´arvores distintas que se pode construir com os v´ertices conhecidos.

Vamos considerar as seguintes sub-classes de ´arvores com 5 v´ertices:

• C1 = {´arvores que tˆem um v´ertice de grau 4 e os demais grau 1}. H´a um total de 5 ´arvores, conforme a

escolha do v´ertice raiz seja v1 ou v2 ou v3 ou v4 ou v5.

• C2 = {´arvores que tˆem um v´ertice de grau 3, um v´ertice de grau 2 e trˆes v´ertices de grau 1}. H´a um

(26)

Figura 21

h´a C4,3 modos de escolher os trˆes v´ertices adjacentes ao v´ertice de grau 3 e, finalmente, h´a 3 modos de

escolher um desses v´ertices que ter´a grau 2. Assim, o total de ´arvores ´e: 5.C4,3.3 = 5.4.3 = 60 ´arvores,

todas isomorfas entre si.

Figura 22

• C3 = {´arvores que tˆem trˆes v´ertices de grau 2 e dois v´ertices de grau 1}. H´a um total de 60 ´arvores,

pois: h´a 5 modos de escolher um v´ertice de grau 1 e 4 modos de escolher o outro v´ertice de grau 1. Como estes podem trocar de posi¸c˜ao entre si, devemos dividir o resultado por 2. Os outros 3 v´ertices podem permutar entre si, totalizando P3 modos poss´ıveis. Assim, o total de ´arvores ´e: 5 · 4 · P3/2 = 5 · 4 · 6/2 = 60

´arvores, todas isomorfas entre si.

Figura 23

8.3. Algoritmo de Huffman.

Para analisarmos mais uma aplica¸c˜ao de ´arvores bin´arias vamos considerar o problema de codificar uma mensagem composta de uma seq¨uˆencia de s´ımbolos de um alfabeto de n s´ımbolos. Esta mensagem ser´a transformada em uma seq¨uˆencia de bits, depois que, a cada s´ımbolo, for atribu´ıdo um c´odigo bin´ario e os c´odigos dos s´ımbolos da mensagem forem concatenados.

(27)

S´ımbolo C´odigo

A 00

B 01

C 10

D 11

A mensagem ABCADCA seria codificada da seguinte maneira: 00011000111000, tendo comprimento de 14 bits. O objetivo do algoritmo ´e criar um c´odigo que minimize o comprimento da mensagem. Para criar este c´odigo vamos levar em conta a freq¨uˆencia de cada s´ımbolo na mensagem.

A Tabela a seguir mostra a freq¨uˆencia de cada s´ımbolo na mensagem:

S´ımbolo Freq¨uˆencia

A 3

B 1

C 2

D 1

Desta tabela podemos verificar que se atribuirmos ao s´ımbolo A um c´odigo bin´ario mais curto que os atribu´ıdos aos s´ımbolos B e D ter´ıamos uma mensagem menor. Isto prov´em do fato que o s´ımbolo A aparece mais vezes do que os s´ımbolos B e D. Suponha que os seguintes c´odigos sejam atribu´ıdos aos s´ımbolos: S´ımbolo C´odigo A 0 B 110 C 10 D 111

Usando este c´odigo, a mensagem ABCADCA ficaria 0110100111100 que requer 13 bits. Em mensagens longas com mais s´ımbolos n˜ao freq¨uentes, o ganho pode ser ainda maior. Um dos requerimentos deste c´odigo ´e que nenhum c´odigo seja prefixo de outro, caso a decodifica¸c˜ao seja feita da esquerda para direita. Para decodificar a mensagem vamos come¸car da esquerda para a direita, caso o primeiro bit seja 0 o c´odigo corresponde ao s´ımbolo A. No caso contr´ario devemos continuar a examinar os bits restantes. Se o segundo bit for 0 o s´ımbolo ´e um C, caso contr´ario examinamos o terceiro bit. Se o terceiro bit for um 0 indica um B e se for 1 indica o D.

Resumindo, para encontrar o algoritmo ´otimo, a partir do c´odigo acima, deve-se seguir os seguintes passos:

1o

) Encontre os dois s´ımbolos que aparecem com menor freq¨uˆencia, no nosso caso B e D. 2o

(28)

3o

) Combine estes dois s´ımbolos em um ´unico s´ımbolo BD. Este novo s´ımbolo ter´a freq¨uˆencia igual `a soma das freq¨uˆencias de B e D, no caso 2. Temos agora os seguintes s´ımbolos: A (3), C (2) e BD (2) (os n´umeros entre parˆenteses s˜ao as freq¨uˆencias).

4o

) Novamente, escolha os s´ımbolos de menor freq¨uˆencia, que s˜ao C e BD. 5o

) Atribua o c´odigo 0 ao s´ımbolo C e 1 ao BD. Isto significa adicionar 1 aos c´odigos de B e D, que passam a valer 10 e 11, respectivamente.

6o

) Combine os dois s´ımbolos no s´ımbolo ´unico CBD, de freq¨uˆencia 4. Temos agora dois s´ımbolos: A(3) e CBD (4).

7o

) Atribua 0 ao s´ımbolo A e 1 ao s´ımbolo CBD. O s´ımbolo ACBD ´e o ´unico s´ımbolo restante e recebe o c´odigo N U LL de comprimento 0. A Figura 24 mostra a ´arvore bin´aria que pode ser constru´ıda a partir deste exemplo. Cada v´ertice est´a representado pelo s´ımbolo e sua respectiva freq¨uˆencia.

A,3 ACBD,7 CBD,4 C,2 BD,2 B,1 D,1 Figura 24

8.4. Enumera¸c˜ao e busca com ´Arvores.

8.4.1. Introdu¸c˜ao.

Um primeiro trabalho que se utilizou implicitamente de ´arvores foi feito por Kirchoff em 1847 em problemas de circuitos el´etricos. Cayley foi o primeiro a se utilizar do termo ´arvore, em 1857, num trabalho sobre cortes ordenados em ´arvores, usando fun¸c˜oes geradoras.

Os m´etodos de busca come¸caram a ser vistos por volta desse ano, mas seu desenvolvimento de modo sistem´atico s´o foi poss´ıvel ocorrer a alguns anos atr´as atrav´es do amplo desenvolvimento da Ciˆencia da Computa¸c˜ao. H´a muitos bons livros que tratam de busca.

(29)

operacional, uma vez que a maioria dos problemas de enumera¸c˜ao nesta ´area envolvem ´arvores muito grandes e utilizam algoritmos especiais de ”poda”, fugindo dos objetivos deste trabalho.

8.4.2. Enumera¸c˜ao com ´Arvores.

As ´arvores fornecem uma estrutura natural para encontrar solu¸c˜oes para problemas que envolvem uma seq¨uˆencia (finita) de escolhas. Para encontrar a sa´ıda de um labirinto, ´otimas estrat´egias em um jogo ou o menor percurso em um problema de rotas s˜ao tais exemplos de usos das ´arvores. A maioria dos problemas de isomorfismo, circuitos hamiltonianos, de colora¸c˜ao m´ınima e outros, requerem busca baseada em ´arvores para solu¸c˜oes atrav´es de programas computacionais.

Se queremos encontrar: uma solu¸c˜ao, todas as solu¸c˜oes ou uma solu¸c˜ao ´otima para um problema, o primeiro e mais importante desafio ´e ter certeza de que s˜ao checadas todas as maneiras poss´ıveis de gerar uma solu¸c˜ao, isto ´e: a enumera¸c˜ao tem que ser completa. Considerando as escolhas seq¨uenciais como sendo os v´ertices internos em uma ´arvore enraizada e as solu¸c˜oes e os becos sem sa´ıda como sendo as folhas (como no problema da pesagem das moedas, visto anteriormente), podemos organizar a enumera¸c˜ao de poss´ıveis solu¸c˜oes. As ´arvores tamb´em tornam mais f´acil discernir e implementar atalhos, tais como ”podar” sub´arvores que demonstram n˜ao levar a uma solu¸c˜ao (ou n˜ao levar a uma solu¸c˜ao ´otima).

8.4.3. Enumera¸c˜ao por backtracking ou por largura. H´a duas abordagens b´asicas para a enumera¸c˜ao de ´arvores:

• Primeiramente o m´etodo chamado backtracking (tamb´em conhecido como de busca em profundidade), que constr´oi um caminho da raiz at´e o mais longe poss´ıvel na ´arvore, isto ´e, at´e alguma folha. Se a folha n˜ao for uma solu¸c˜ao ou se precisamos prosseguir para encontrar todas as outras solu¸c˜oes, seguimos a trilha de volta um n´ıvel at´e o pai da folha ( a escolha anterior) e depois ramificamos ao longo de uma aresta diferente construindo um caminho para uma nova folha. No backtracking se todas as arestas do v´ertice anterior (escolha) j´a tiverem sido tentadas, ent˜ao seguimos a trilha de volta a um n´ıvel acima at´e um n´ıvel mais alto, e assim por diante. No final, este m´etodo vai gerar caminhos para todas as folhas, isto ´e, enumerar uma ´arvore inteira de poss´ıveis seq¨uˆencias de escolhas. Se precisamos de apenas uma solu¸c˜ao, o m´etodo do backtracking vai terminar assim que for encontrada uma folha que seja a solu¸c˜ao. Existe uma dificuldade maior contra a qual precisamos nos resguardar: andar em c´ırculos. Em jogos e em problemas de rotas do mundo real, geralmente ´e inevit´avel que haja dois ou mais caminhos diferentes (seq¨uˆencias de escolhas) que levem a uma mesma ”posi¸c˜ao”, por exemplo, o mesmo canto num labirinto. Tal redundˆancia ´e aceit´avel. Entretanto, ´e geralmente ruim visitar duas vezes a mesma posi¸c˜ao num mesmo caminho. Isso poderia levar a um caminho sem fim, que andasse em c´ırculos, dando voltas e voltas atrav´es dessa posi¸c˜ao, para sempre. Desta forma, dever´ıamos sempre checar se cada posi¸c˜ao sucessiva alcan¸cada num caminho n˜ao tenha aparecido, antes, no caminho. Se ela o fez, ent˜ao trate a posi¸c˜ao como uma folha (ou beco sem sa´ıda) e refa¸ca o caminho para tr´as.

(30)

uniformemente a partir da raiz. De novo, n˜ao haver´a um s´o caminho que repita uma determinada posi¸c˜ao (o retorno ao mesmo v´ertice). Numa busca em largura, `as vezes ´e poss´ıvel que caminhos diferentes n˜ao usem um v´ertice comum. Se a ´arvore de caminhos poss´ıveis ´e grande, ent˜ao o m´etodo de busca em largura rapidamente se torna dif´ıcil de controlar por causa de seu tamanho, peso ou forma. O m´etodo do backtracking, que tra¸ca somente um caminho de cada vez, ´e muito mais f´acil de usar `a m˜ao ou de programar. Ainda mais nos casos em que precisamos encontrar apenas uma dentre as poss´ıveis solu¸c˜oes do problema, vale mais a pena ir seguindo todo o caminho buscando uma solu¸c˜ao do que gastar um tempo longo construindo um grande n´umero de caminhos parciais, em que apenas um deles realmente ser´a usado no final. Por outro lado, quando queremos uma solu¸c˜ao envolvendo um caminho mais curto ou quando podem haver caminhos com becos sem sa´ıda muito longos, (enquanto os caminhos de solu¸c˜ao tendem a ser relativamente curtos), o m´etodo em largura ´e, ent˜ao, melhor de ser utilizado.

Exemplo 8.4.3.1 - Suponha que temos trˆes latas de ´agua, de capacidades 10 litros, 7 litros e 4 litros. Inicialmente a lata de 10 litros est´a cheia e as outras duas vazias. Podemos colocar ´agua de uma lata para outra, derramando at´e a lata que recebe estar cheia (sem entornar) e a lata que transborda estar vazia. Existe uma maneira de derramar a ´agua entre latas para obter exatamente 2 litros nas latas de 7 ou 4 litros? Se h´a, encontre uma seq¨uˆencia m´ınima de derramamentos para obter dois litros.

As posi¸c˜oes, ou v´ertices, neste problema de enumera¸c˜ao s˜ao ternos ordenados (a, b, c), ou seja: as quantidades de ´agua nas trˆes latas em ordem decrescente de suas capacidades. Na verdade, ´e suficiente gravar apenas as quantidades dos pares ordenados (b, c), ou seja, as quantidades das latas de 7 e de 4 litros, uma vez que temos sempre a igualdade a = 10 − b − c. Uma aresta direcionada corresponde ao derramamento de ´agua de uma lata para uma outra. Vamos desenhar a ´arvore de dois modos: numa rede de coordenadas b no sentido horizontal e c no sentido vertical e do modo usual com sua raiz sendo indicada como mostrado na Figura 12. A rede ´e limitada por b = 7, c = 4 e b + c = 10. O derramamento entre as latas de 10 e de 7 litros ser´a uma aresta horizontal, entre 10 e 4 litros ser´a uma aresta vertical, e entre 7 e 4 litros uma aresta diagonal com inclina¸c˜ao de −45 e +135 graus.

(31)

[0,4] [2,4] [3,4] [4,4] [6,4] 4 3 [7,3] [0,3] 2 1 [7,1] 0 [3,0] [4,0] [6,0] [7,0] 0 1 2 3 4 5 6 7 Figura 25

[0,0]

[7,0]

[0,4]

[7,3]

[3,4]

[6,4]

[4,0]

[0,3]

[3,0]

[6,0]

[4,4]

[2,4]

[7,1]

Figura 26. ´Arvore para o exemplo 2.6.2.2.1

Exemplo 8.4.3.2 - Trˆes esposas ciumentas e seus respectivos maridos chegam a um rio. O grupo tem que atravessar o rio (da margem pr´oxima `a margem distante) num barco que pode levar no m´aximo duas pessoas. Encontre uma seq¨uˆencia de viagens de barco que levar˜ao as seis pessoas ao outro lado do rio, sem jamais deixar qualquer marido sozinho (sem sua respectiva esposa) na presen¸ca de outra esposa. Sejam as esposas representadas pelas letras A, B e C, e seus respectivos maridos por a, b e c. Vamos assinalar uma posi¸c˜ao com os nomes das pessoas na margem pr´oxima acompanhado de um asterisco (*), se o barco estiver na margem pr´oxima. Uma aresta ´e rotulada com a dire¸c˜ao do barco e as pessoas no barco. A cada posi¸c˜ao, precisamos checar se as pessoas no barco n˜ao violar˜ao a condi¸c˜ao ”ciumenta”, removendo uma esposa sem seu marido (deixando-o com outra esposa) ou colocando um marido desacompanhado, em contato com outra esposa ou vice-versa. A Figura 13 mostra a ´arvore de posi¸c˜oes vi´aveis (repare que n˜ao h´a becos sem sa´ıda).

(32)

*ABCabc Aa ab BCbc ABCc A b bc *ABCbc ABC a ABCa BC Aa Bb Abab AB ab c *abc bc a b A ab* *Aa ab Aa Figura 27

Exemplo 8.4.3.3 - Encontre todas as maneiras de colocar oito rainhas em posi¸c˜oes de tal modo que uma n˜ao ”capture” a outra, num tabuleiro de xadrez 8x8. (´E bom lembrar que uma rainha pode capturar outra rainha se ambas estiverem na mesma fileira (linha horizontal) ou na mesma coluna ou numa diagonal comum).

Vamos apresentar um algoritmo usando enumera¸c˜ao de ´arvores de backtracking para listar todas as solu¸c˜oes de posicionamento das oito rainhas em posi¸c˜oes que uma n˜ao ”capture” a outra. Tentaremos todas as maneiras de posicionar as rainhas sucessivamente na coluna 1, coluna 2, e assim por diante, at´e a coluna 8. Seja ak a fileira da rainha na coluna k.

Para cada i, 1 6 i < k, ´e necess´ario que ak6= ai e |ak− ai| 6= k − i. Quando essas condi¸c˜oes se mantˆem

para ak, dizemos que” ak ´e compat´ıvel com a1, a2, · · · , ak−1”. Quando um ak compat´ıvel ´e encontrado,

descemos na ´arvore at´e o pr´oximo n´ıvel (pr´oxima coluna). Quando nenhum ak compat´ıvel ´e encontrado,

fazemos backtrack e tentamos o pr´oximo maior valor (fila) para ak− 1. O algoritmo pode ent˜ao ser

escrito como a seguir:

k ←− 1; a1 ←− 1;

DESCER: k ←− k + 1; ak ←− 1;

(33)

fa¸ca ak ←− ak+ 1;

se ak = 9 ent˜ao

se k > 1 ent˜ao fa¸ca backtrack ou v´a para o FIM; se k < 8 ent˜ao v´a para DESCER;

imprima solu¸c˜ao a1, a2, · · · , a8;

BACKTRACK: k ←− k − 1; ak←− ak+ 1; v´a para ADICIONAR RAINHA;

FIM: PARE;

Se ak = 9, ent˜ao n˜ao houve nenhum novo akcompat´ıvel com a1, a2, · · · , ak−1encontrado no procedimento

enquanto e precisamos realizar backtrack (ou se m, a busca est´a terminada).

Muito embora n˜ao seja objeto deste trabalho, enfatizamos que todos os algoritmos de otimiza¸c˜ao de rede usam buscas em largura. H´a 3(trˆes) algoritmos de otimiza¸c˜ao que implicitamente utilizam ´arvores para a busca atrav´es de grafos.

8.5. O C ´ODIGO DE PR ¨UFER.

8.5.1. Introdu¸c˜ao. A id´eia de associar um c´odigo a grafos rotulados pertencentes a uma espec´ıfica fam´ılia j´a vem de 1918, com Pr¨ufer. Ele provou a correspondˆencia biun´ıvoca entre o conjunto de (n − 2) uplas de inteiros {1, 2, ..., n} e o conjunto de todas as ´arvores rotuladas com n v´ertices. Um c´odigo deve representar de maneira un´ıvoca um determinado grafo da fam´ılia considerada e, reciprocamente, a cada grafo da fam´ılia deve ser atribu´ıdo um ´unico c´odigo.

Uma vantagem que se apresenta com a codifica¸c˜ao de um grafo ´e a possibilidade de uma representa¸c˜ao em mem´oria mais compacta. Outra, ´e a solu¸c˜ao mais eficiente de problemas algor´ıtmicos.

Al´em disso, problemas cl´assicos combinat´orios tais como: contagem de elementos, enumera¸c˜ao e gera¸c˜ao aleat´oria, s˜ao mais facilmente solucionados com o aux´ılio de um esquema de codifica¸c˜ao. Seja T = (V, E) uma ´arvore com |V | = n v´ertices, n > 2, em que seus v´ertices s˜ao rotulados de 1 a n.

O C´

odigo de Pr¨

ufer

O Código de Prüfer de T é uma seqüência com n-2

rótulos, construída com a sucessiva remoção da

folha de menor rótulo da árvore e a imediata

inclusão do rótulo de seu vértice adjacente ao

código. Esse processo de remoção de folhas é

interrompido quando restam duas folhas na árvore

e o código é, então, concluído.

(34)

Passo 1: código: <> Passo 2: código: <4> Passo 3: código: <4,7>

Folhas: {2,5,6} Folhas: {4,5,6} Folhas: {5,6,7}

Passo 4: código: <4,7,1> Passo 5: código: <4,7,1,1> Passo 6: código: <4,7,1,1,3>

Folhas: {6,7} Folhas: {1,7} Folhas: {3,7}

3 7 4 2 1 5 6 3 7 4 1 5 6 3 7 1 5 6 3 7 1 6 3 7 1 3 7

Figura 28. Um exemplo de codifica¸c˜ao de Pr¨ufer .

A figura acima mostra um exemplo de como ´e obtido o c´odigo h4, 7, 1, 1, 3i para a primeira ´arvore. Inicia-se com a ´arvore a ser codificada e com a (n − 2)-upla vazia. Como a ´arvore possui 7 v´ertices, o c´odigo ter´a 5 posi¸c˜oes ocupadas. Remove-se a folha de menor r´otulo (v´ertice de r´otulo 2) e adiciona-se o r´otulo de seu vizinho ao c´odigo, que ´e o 4, obtendo o c´odigo de Pr¨ufer inicial e parcial h4i e exibi-se a ´arvore a seguir, tendo retirado o v´ertice de r´otulo 2 e sua aresta. Agora remove-se o v´ertice de r´otulo 4 que ´e a folha de menor r´otulo e adiciona-se ao c´odigo o r´otulo 7, que ´e o r´otulo de seu vizinho. Obt´em-se o c´odigo de Pr¨ufer parcial h4, 7i e a terceira ´arvore. A seguir, s˜ao removidos os v´ertices de r´otulos 5 e 6, obtendo o c´odigo de Pr¨ufer parcial h4, 7, 1, 1i e a quarta ´arvore. O v´ertice de r´otulo 1 s´o passa a ser folha ap´os a remo¸c˜ao do v´ertice de r´otulo 6. Finalmente, remove-se o v´ertice de r´otulo 1, obtendo-se o c´odigo de Pr¨ufer h4, 7, 1, 1, 3i.

Observa¸c˜ao 8.5.1. Para que a codifica¸c˜ao de Pr¨ufer se aplique em ´arvores enraizadas, basta estabelecer que o v´ertice raiz n˜ao seja removido mesmo que em algum passo ele se torne folha.

Exemplo 8.5.2. Constru¸c˜ao do c´odigo de Pr¨ufer em uma ´arvore enraizada

Referências

Documentos relacionados

Só poderá receber o Certificado de participação o aluno que tiver permanecido no Programa de Iniciação Científica por um período mínimo de 09 (nove) meses com entrega do

Os prováveis resultados desta experiência são: na amostra de solo arenoso ou areia, a água irá se infiltrar mais rapidamente e terá maior gotejamento que na amostra de solo

Incidirei, em particular, sobre a noção de cuidado, estruturando o texto em duas partes: a primeira será uma breve explicitação da noção de cuidado em Martin Heidegger (o cuidado

resultou em uma investigação sobre a legislação vigente no que diz respeito aos direitos e garantias de homossexuais, para verificar se o país é considerado tolerante ou não e se

Engenharia de Software Características Operacionais Usuário Desenvolvedor Adaptabilidade a Novos Ambientes Habilidade de ser Alterado Corretitude Confiabilidade

2.2 A inspeção visual exigida pelo CBPMESP nas instalações elétricas prediais de baixa tensão, nos termos do objetivo e premissas desta IT, visa verificar a existência de

Brontocoris tabidus (Signoret) e Podisus nigrispinus (Dallas) (Heteroptera: Pentatomidae) foram mantidos por 12, 24, 36 ou 48 horas sem alimento, recebendo ou

No caso de falecimento do Usuário fora de seu município de residência e havendo a necessidade de um membro da família para liberação do corpo, a ASSISTÊNCIA BB SEGURO