You are on page 1of 9

Capı́tulo 2

Arvores

Definição 29. Uma Arvore é um grafo simples, conexo e aciclico.

Exemplo 9. A figura 2.1 é um exemplo duma árvore:

Figura 2.1: Árvore

Definição 30. Árvore com raiz é uma árvore com um vertice particular designado raiz.

Exemplo 10. A figura 2.2 mostra um exemplo duma árvore vom raiz:

e(raiz)

b g
d f
i
a c h
j

Figura 2.2: Árvore com raiz

26
USTM Tomé Sicuaio e Lúcia Ginger

2.1 Propriedades das arvores

Teorema 10. Seja T um grafo simples com n vertices. As quatro afirmações são equivalentes:
(a) T é uma arvore.
(b) T é conexo e não contém circuitos.
(c) T é conexo e tem n − 1 arestas.
(d) T não contém ciclos e tem n − 1 arestas.

Definição 31. Seja T uma arvore com raiz, v0 raiz de T . Suponhamos que x, y e z são vertices
pertencentes a T e que (v0 , v1 , . . . , vn ) é um caminho pertencente a T. Então
(a) vn−1 é o pai de vn .
(b) v0 , . . . , vn−1 são antepassados de vn .
(c) vn é filho de vn−1 .
(d) Se x é antepassado de y, então y é um descendente de x.
(e) Se x e y são filhos de z, então x e y são irmãos.
(f ) Se x não tem filho, x é um vertice terminal (ou folha).
(g) Se x não é um vertice terminal, x é um vertice interno.

Exemplo 11. Na árvore com raiz da figura 2.2,


(a) o pai de i é g.
(b) os antepassados de j são i, g e e.
(c) os filhos de e são b, d, f e g.
(d) os descendentes de g são h, i e j.
(e) b, d, f e g são irmãos.
(f ) a, d, f , c, j e h são vertices terminais.
(g) b, i e g são vertices internos.

Definição 32. Uma árvore binária é uma árvore com raiz na qual cada vertice tem ou um
filho a esquerda, um filho a direita, um filho a esquerda e a direita, ou nenhum filho. Uma
arvore binária completa é uma arvore binária na qual todos os vertices tem ou um filho a
direita e a esquerda ou nenhum filho.

Exemplo 12. Os grafos da figura 2.3 são exemplos de arvores binárias. A arvore binária T2 é
uma arvore binaria completa pois cada vertice tem ou um filho a direita e um filho a esquerda,
ou não tem nenhum filho. Na arvore binária T1 , os vertices b, c e d são filhos a esquerda e g,
e, h e f são filhos a direita.

27
USTM Tomé Sicuaio e Lúcia Ginger

b g

e h
c
f
d
(T1 ) (T2 )

Figura 2.3: Árvores binárias

2.2 Árvores com pesos

Definição 33. Seja T uma árvore com raiz. Se cada folha de T estiver associado com um
numero real, diremos que T é uma árvore com pesos. Cada número real associado com as
folhas de T chama-se peso. Se T tiver n folhas e n nı́veis, terá respectivamente w1 , w2 , . . . ,
wn pesos e li , (i = 1, 2, . . . , n) comprimento da raiz até a folha wi . Chama-se peso duma
arvore W (T ) ao somatorio dos produtos dos pesos da folhas pelos seus niveis, isto é:

n
X
W (T ) = wi · li .
i=1

Exemplo 13. As árvores da figura 2.4 são exemplos de grafos com pesos. As folhas da árvore

4 7

9 7 6 9 9 7 7

2 6 4 7 7 2 6

4 2
(T1 ) (T2 ) (T3 )

Figura 2.4: Árvore com pesos

T1 tem pesos 2, 4, 6, 7, 7 e 9. Assim, o peso w1 = 2, w2 = 4, w3 = 6, w4 = 7, w5 = 7 e w6 = 9.


Os nı́veis das folhas são l1 = 3, l2 = 1, l3 = 3, l4 = 2, l5 = 1 e l6 = 2. Então o peso da arvore
T1 é:
6
X
W (T1 ) = wi · li = 2 · 3 + 4 · 1 + 6 · 3 + 7 · 2 + 7 · 1 + 9 · 2 = 67.
i=1

28
USTM Tomé Sicuaio e Lúcia Ginger

Para a árvore T2 temos


6
X
W (T2 ) = wi · li = 90.
i=1

E para a árvore T3 temos


6
X
W (T3 ) = wi · li = 88.
i=1

2.2.1 Algorı́timo de Huffman

Dada uma lista L = (w1 , w2 , . . . , wn ) de pelo menos dois numeros não negativos, e queremos
construir uma arvore binária com pesos T com os membros de L como pesos, de tal maneira que
o peso W (T ) da arvore seja o mı́nimo possı́vel. Chamaremos tal arvore T de árvore binária
óptima para os pesos w1 , w2 ,. . . ,wn . O algorı́timo recurssivo seguinte resolve o problema,
produzindo uma árvore binária óptima T (L).
Huffman(List)
{Input: Uma lista L = (w1 , w2 , . . . , wn ) de numeros não negativos, n ≥ 2 }
{Output: Uma árvore binária óptima T (L) para L}
Se n = 2 então
T (L) é uma árvore com 2 folhas, de pesos w1 e w2
caso contrário
procurar dois membros (elementos) de L, diremos u e v.
Seja L0 uma lista obtida de L pela remoção de u e v e inserção de u + v.
Recur para L0 e de T (L) para Huffman(L0 ) pela substituição de uma folha de peso u + v em
Huffman(L0 ) por uma subarvore com duas folhas de pesos u e v.
return T (L).

Exemplo 14. Considere os pesos 2, 4, 6, 7, 7, 9. Primeiro o algorı́timo repetidamente combina


os dois pesos menores para obter uma nova sequencia mais curta pela substituição destes pela
sua soma. Execução do algorı́timo
Huffman(2,4,6,7,7,9) substituir 2 e 4 por 2 + 4 e
Huffman(6,6,7,7,9) substituir 6 e 6 por 6 + 6 e
Huffman(7,7,9,12) substituir 7 e 7 por 7 + 7 e
Huffman(9,12,14) substituir 9 e 12 por 9 + 12 e
Huffman(14,21) que constrói a primeira árvore na figura 2.5 que representa o

29
USTM Tomé Sicuaio e Lúcia Ginger

7 7 9

2 4

Figura 2.5: Árvore com peso mı́nimo

resultado da árvore da execução do algorı́timo de Huffman:

Exemplo 15. Vamos encontrar uma arvore binária óptima com pesos 2,3,5,7,10,13,19. Vamos
repetidamente combinar os dois menores pesos para obter as sequencias de pesos
2,3,5,7,10,13,19 → 5,5,7,10,13,19 → 7,10,10,13,19 → 10,13,17,19 → 17,19,23 → 23,36.A
figura 2.6 mostra o resultado da árvore da execução do algorı́timo de Huffman:

10 13 19

2 3

Figura 2.6: Árvore com peso mı́nimo

2.2.2 Codigos de Huffman

Definição 34. Seja T uma árvore binária. Se a cada filho a esquerda for associado um digito
zero e digito um a cada filho a direita . A cada sequencia de digitos da raiz até as folhas
denomina-se Codigo Prefixo

Exemplo 16. O conjunto {000, 0100, 0101, 110, 11100, 11101} repesenta o codigo prefixo gerado
pela arvore binária da figura 2.7.

30
USTM Tomé Sicuaio e Lúcia Ginger

0 1

1 1
0
0 0 1
0
0
0 1
0 1

Figura 2.7: Árvore binária com Codigo Prefixo

Definição 35. Seja T uma árvore binária com peso mı́nimo. O codigo prefixo formado por T
denomina-se Código de Huffman.

Exemplo 17. Consideremos um alfabeto que consiste das letras a, v, e, r, y, o, z, p que tem
frequencias correspondentes a = 30, v = 5, e = 25, r = 16, y = 4, o = 8, z = 3, p = 9. Vamos
determinar uma árvore mı́nima representada pela figura 2.8 para o alfabeto e o codigo prefixo
(código de Huffman) correspondente é: a = 11, v = 1000, e = 01, r = 101, y = 10011, o = 000,
z = 10010, e p = 001.
Podemos codificar a mensagem: ”arvore”, mapeando cada caracter pelo respectivo codigo, assim

25 30

8 9 16

3 4

Figura 2.8: Árvore binária mı́nima

temos o codigo seguinte da palavra arvore: 11101100000010101.


Para descodificar o código 001101000100011, vamos percorrer os caracteres da esquerda para
a direita comparando com os codigos prefixos das letras (alfabeto), assim para o codigo dado
teremos a seguinte mensagem: ”prova”.

31
USTM Tomé Sicuaio e Lúcia Ginger

2.3 Spanning Trees

Definição 36. Uma árvore T é uma árvore geradora dum grafo G se T é um subgrafo de
G que contém todos os vertices de G.

Exemplo 18.

Teorema 11. Um grafo G tem uma arvore geradora se e somente se G for conexo.

2.4 Minimal Spanning Trees

Definição 37. Seja G um grafo com pesos. Uma árvore geradora mı́nima de G é uma
arvore geradora de G com peso mı́nimo.

Exemplo 19.

2.4.1 Algoritmo de Prim

{input: Um grafo conexo com pesos}


{ouput: Um conjunto E de arestas de uma arvore geradora mı́nima.}
E=∅
Escolher w ∈ V (G) e V := {w}
while V 6= V (G) do
Escolher uma aresta {u, v} em E(G) de peso mı́nimo com u ∈ V e v ∈ V (G) − V.
Colocar {u, v} em E e v em V.
return E.

Exemplo 20.

2.4.2 Algoritmo de Kruskal

{input: Um grafo conexo com pesos G, com arestas listadas na ordem crescente}
{ouput: Um conjunto E de arestas de uma arvore geradora mı́nima para G.}
E=∅

32
USTM Tomé Sicuaio e Lúcia Ginger

For j = 1 to |E(G)| do
S
If (E {ej } é aciclico) then
Colocar ej em E
return E.

Exemplo 21.

2.5 Percurso de Arvores

2.5.1 Preorder

2.5.2 Inorder

2.5.3 Postorder

33
Capı́tulo 3

Automatos, Gramaticas, e
Linguagens

3.1 Circuitos sequenciais e Maquinas de estados finitos

3.2 Automatos de estados finitos

3.3 Linguagens e Gramáticas

3.4 Automatos finitos indeterminados

3.5 Relação entre automatos e Linguagens

34