Transcript
PCS 2214 – Fundamentos de Engenharia de Computação I 1o. Semestre 2005
PCS 2214 Fund. Eng. Comp. I 1o.Sem. / 2005
ÁRVORES
Profs: Anna H. R. Costa Jaime S. Sichman Líria M. Sato Romero Tori © 2005
Professores: Anna Helena Reali Costa Jaime Simão Sichman Liria Matsumoto Sato Romero Tori
Módulo: Àrvores
Autor: Edson S. Gomi Liria M. Sato
Versão: 1.0 Data: 12/04/05
1
Conteúdo
PCS 2214 Fund. Eng. Comp. I 1o.Sem. / 2005 Profs: Anna H. R. Costa Jaime S. Sichman Líria M. Sato Romero Tori © 2005 Módulo: Àrvores
• • • • •
Terminologia e caracterização das árvores. Árvore geradora Árvores binárias. Métodos de percurso de árvores. Árvores de decisão.
Autor: Edson S. Gomi Liria M. Sato
Versão: 1.0 Data: 12/04/05
2
1
Introdução PCS 2214 Fund. Eng. Comp. I 1o.Sem. / 2005 Profs: Anna H. R. Costa Jaime S. Sichman Líria M. Sato Romero Tori © 2005 Módulo: Àrvores
• Árvores formam uma das subclasses de grafos mais utilizadas. • Aplicações: por exemplo, na organização e relacionamento de dados em Banco de Dados.
Autor: Edson S. Gomi Liria M. Sato
Versão: 1.0 Data: 12/04/05
3
Definições PCS 2214 Fund. Eng. Comp. I
Árvore (livre) T : é um grafo simples que
1o.Sem. / 2005
satisfaz a seguinte condição:
Profs: Anna H. R. Costa Jaime S. Sichman Líria M. Sato Romero Tori © 2005
“se v e w são vértices em T, então existe um único caminho simples de v a w.” i
Módulo: Àrvores
g Autor: Edson S. Gomi Liria M. Sato
f
Versão: 1.0 Data: 12/04/05
j
h 4
2
Definições
PCS 2214 Fund. Eng. Comp. I
Árvore com raiz: é uma árvore na qual um vértice particular foi designado como raiz.
1o.Sem. / 2005 Profs: Anna H. R. Costa Jaime S. Sichman Líria M. Sato Romero Tori © 2005
v1
raiz
Módulo: Àrvores
v2
v3
Autor: Edson S. Gomi Liria M. Sato
Versão: 1.0 Data: 12/04/05
v4
v5 v6
v7
5
Definições
PCS 2214 Fund. Eng. Comp. I 1o.Sem. / 2005 Profs: Anna H. R. Costa Jaime S. Sichman Líria M. Sato Romero Tori © 2005 Módulo: Àrvores
Nível de um vértice v em uma árvore com raiz é o comprimento do caminho simples desde a raiz até o vértice v. Nível da raiz: 0 (zero). Altura de uma árvore com raiz é o número correspondente ao maior nível que ela possui, ou seja é o comprimento do caminho mais longo da raiz até um dos nós.
Autor: Edson S. Gomi Liria M. Sato
Versão: 1.0 Data: 12/04/05
6
3
Definições Exemplo de árvore PCS 2214 Fund. Eng. Comp. I
v1
1o.Sem. / 2005 Profs: Anna H. R. Costa Jaime S. Sichman Líria M. Sato Romero Tori © 2005
v2
Módulo: Àrvores
Autor: Edson S. Gomi Liria M. Sato
raiz
Nível 0 v3
v4
v5 v6
Nível 1 Nível 2
v7
Altura = 2
Versão: 1.0 Data: 12/04/05
7
Exercício PCS 2214 Fund. Eng. Comp. I 1o.Sem. / 2005
Determinar os níveis dos vértices e a altura da árvore abaixo:
Profs: Anna H. R. Costa Jaime S. Sichman Líria M. Sato Romero Tori © 2005
d a
Módulo: Àrvores
g
b
Autor: Edson S. Gomi Liria M. Sato
i
e
Versão: 1.0 Data: 12/04/05
c
j f
h
Raiz = vértice e
8
4
Código de Huffman PCS 2214 Fund. Eng. Comp. I 1o.Sem. / 2005 Profs: Anna H. R. Costa Jaime S. Sichman Líria M. Sato Romero Tori © 2005 Módulo: Àrvores
Código de Huffman é uma aplicação de árvores. • Geralmente caracteres são representados por códigos formados por um número fixo de bits (por exemplo, código ASCII). • Códigos de Huffman permitem representar caracteres através de um número variável de bits.
Autor: Edson S. Gomi Liria M. Sato
Versão: 1.0 Data: 12/04/05
9
Código de Huffman Exemplo PCS 2214 Fund. Eng. Comp. I 1o.Sem. / 2005 Profs: Anna H. R. Costa Jaime S. Sichman Líria M. Sato Romero Tori © 2005
raiz 0
1 a
Módulo: Àrvores
1 1
1
Autor: Edson S. Gomi Liria M. Sato
t
Versão: 1.0 Data: 12/04/05
0 o
0 0
Cadeia : 0101011100
r
010 1 0111 00 r a t o
s
10
5
Algoritmo para construção de Código de Huffman PCS 2214 Fund. Eng. Comp. I 1o.Sem. / 2005 Profs: Anna H. R. Costa Jaime S. Sichman Líria M. Sato Romero Tori © 2005
Construir um código de Huffman a partir de uma tabela contendo a frequência de ocorrências dos caracteres a serem representados, tal que o código construído permita representar cadeias de caracteres em
Módulo: Àrvores
espaço mínimo, desde que as frequências dos
Autor: Edson S. Gomi Liria M. Sato
caracteres de tais cadeias sejam idênticas às da tabela utilizada na construção do código.
Versão: 1.0 Data: 12/04/05
11
Algoritmo para construção de um código de Huffman otimizado PCS 2214 Fund. Eng. Comp. I 1o.Sem. / 2005 Profs: Anna H. R. Costa Jaime S. Sichman Líria M. Sato Romero Tori © 2005 Módulo: Àrvores
Entrada: sequência de n freqüências (n ≥ 2). Saída: uma árvore com raiz que define um código de Huffman(f,n) ótimo. 1 0 procedure huffman(f,n) if n = 2 then begin sejam f1 e f2 as freqüências f1 Seja T como apresentado na figura a Figure a return(T)
end Sejam fi and fj as menores freqüências, substitua fi e fj na lista por fi + fj T’ := huffman(f, n-1) substitua vértice em T’ rotulado fi + fj pela árvore apresentada na figura b para obter T fi return (T) end huffman
Autor: Edson S. Gomi Liria M. Sato
Versão: 1.0 Data: 12/04/05
f2
0
1 Figure b
fj
12
6
Código de Huffman - Exemplo Caracteres e respectivas freqüências PCS 2214 Fund. Eng. Comp. I 1o.Sem. / 2005 Profs: Anna H. R. Costa Jaime S. Sichman Líria M. Sato Romero Tori © 2005 Módulo: Àrvores
Autor: Edson S. Gomi Liria M. Sato
Versão: 1.0 Data: 12/04/05
Caracter ! @ # $ %
Freqüência 2 3 7 8 12
13
Código de Huffman - Exemplo Árvore resultante
PCS 2214 Fund. Eng. Comp. I 1o.Sem. / 2005 Profs: Anna H. R. Costa Jaime S. Sichman Líria M. Sato Romero Tori © 2005
1
1
Módulo: Àrvores
Autor: Edson S. Gomi Liria M. Sato
1
Versão: 1.0 Data: 12/04/05
!
0
0
0
1
#
$
0
%
@
14
7
Terminologia de árvores PCS 2214 Fund. Eng. Comp. I 1o.Sem. / 2005 Profs: Anna H. R. Costa Jaime S. Sichman Líria M. Sato Romero Tori © 2005 Módulo: Àrvores
Autor: Edson S. Gomi Liria M. Sato
Considere uma árvore T com raiz v0 . Suponha que x, y e z sejam vértices em T e que (v0 , v1 , ... , vn ) seja um caminho simples em T. Então: • • • •
vn-1 é o pai de vn . v0 , v1 , ... , vn-1 são os ancestrais de vn. vn é um filho de vn-1 . Se x é um ancestral de y, então y é descendente de x.
Versão: 1.0 Data: 12/04/05
cont. 15
Terminologia de árvores PCS 2214 Fund. Eng. Comp. I 1o.Sem. / 2005 Profs: Anna H. R. Costa Jaime S. Sichman Líria M. Sato Romero Tori © 2005 Módulo: Àrvores
• Se x e y são filhos de z, então x e y são irmãos. • Se x não tem filho, então x é um vértice terminal (ou uma folha). • Se x não é um vértice terminal, então x é vértice interno.
Autor: Edson S. Gomi Liria M. Sato
cont.
Versão: 1.0 Data: 12/04/05
16
8
Terminologia de árvores
PCS 2214 Fund. Eng. Comp. I
Exemplo - Família dos Deuses Gregos
1o.Sem. / 2005 Profs: Anna H. R. Costa Jaime S. Sichman Líria M. Sato Romero Tori © 2005 Módulo: Àrvores
Uranus Aphrodite Eros
Kronos Atlas
Prometheus
Zeus Poseidon Hades Ares
Autor: Edson S. Gomi Liria M. Sato
Apollo Athena HermesHeracles
Versão: 1.0 Data: 12/04/05
17
Terminologia de árvores
PCS 2214 Fund. Eng. Comp. I 1o.Sem. / 2005 Profs: Anna H. R. Costa Jaime S. Sichman Líria M. Sato Romero Tori © 2005 Módulo: Àrvores
Sub-árvore de T com raiz em x: é o grafo com conjunto de vértices V e conjunto de arestas E, onde V é composto por x e todos seus descendentes e E = { e | e é uma aresta pertencente a um caminho simples de x a um vértice em V }. Kronos
Autor: Edson S. Gomi Liria M. Sato
Apollo
Versão: 1.0 Data: 12/04/05
18
Zeus
Poseidon
Hades
Athena
Hermes
Heracles
Ares
Uma sub-árvore da família dos deuses gregos
9
Terminologia de árvores
PCS 2214 Fund. Eng. Comp. I 1o.Sem. / 2005 Profs: Anna H. R. Costa Jaime S. Sichman Líria M. Sato Romero Tori © 2005 Módulo: Àrvores
Autor: Edson S. Gomi Liria M. Sato
Teorema: Seja T um grafo com n vértices. As afirmações seguintes são equivalentes: • T é uma árvore. • T é conectado e acíclico. • T é conectado e tem n –1 arestas. • T é acíclico e tem n –1 arestas.
Versão: 1.0 Data: 12/04/05
19
Árvore geradora
PCS 2214 Fund. Eng. Comp. I 1o.Sem. / 2005 Profs: Anna H. R. Costa Jaime S. Sichman Líria M. Sato Romero Tori © 2005 Módulo: Àrvores
Árvore geradora (“Spanning Tree”): é um subgrafo T de um grafo G tal que T é uma árvore que contém todos os vértices de G. Um grafo pode conter várias árvores geradoras.
Autor: Edson S. Gomi Liria M. Sato
Versão: 1.0 Data: 12/04/05
20
10
Árvore geradora
PCS 2214 Fund. Eng. Comp. I
Exemplo: a
1o.Sem. / 2005 Profs: Anna H. R. Costa Jaime S. Sichman Líria M. Sato Romero Tori © 2005 Módulo: Àrvores
e12 e9
b
c e d 7
e3
e8 e11
g
Grafo
Versão: 1.0 Data: 12/04/05
e1
a
e12
c
e4 e e 6 f
e10
Autor: Edson S. Gomi Liria M. Sato
e1
e5
e2
e9
b
e3
d
e8
e4 e
h
f
e5
h
g
Uma árvore geradora
21
Árvore geradora
PCS 2214 Fund. Eng. Comp. I 1o.Sem. / 2005 Profs: Anna H. R. Costa Jaime S. Sichman Líria M. Sato Romero Tori © 2005
Teorema: Um grafo G tem uma árvore geradora se e somente se G é conectado (conexo).
Módulo: Àrvores
Autor: Edson S. Gomi Liria M. Sato
Versão: 1.0 Data: 12/04/05
22
11
Um algoritmo para encontrar árvore geradora • busca em largura PCS 2214 Fund. Eng. Comp. I 1o.Sem. / 2005 Profs: Anna H. R. Costa Jaime S. Sichman Líria M. Sato Romero Tori © 2005 Módulo: Àrvores
Autor: Edson S. Gomi Liria M. Sato
Versão: 1.0 Data: 12/04/05
Entrada: um grafo conectado G com vértices ordenados v1,v2,... , vn e E= aresta Saída: uma árvore geradora T. procedure bfs(V, E) // V’ = vértices da árvore geradora T // E’ = arestas da árvore geradora T // v1 é a raiz da árvore geradora //S é uma lista ordenada S := (v1 ) V’:= {v1 } E’:= ∅
cont.
23
Um algoritmo para encontrar árvore geradora PCS 2214 Fund. Eng. Comp. I 1o.Sem. / 2005 Profs: Anna H. R. Costa Jaime S. Sichman Líria M. Sato Romero Tori © 2005 Módulo: Àrvores
Autor: Edson S. Gomi Liria M. Sato
Versão: 1.0 Data: 12/04/05
while true do begin for cada x∈S, em ordem, do for cada y ∈V-V´, em ordem, do if (x,y) é uma aresta em E then adicione a aresta (x,y) a E´e y a V´ if nenhuma aresta foi adicionada then return (T) S:= filhos de S ordenados consistentemente, com a ordenação de vértices original end end bfs
24
12
Árvore geradora - Busca em largura PCS 2214 Fund. Eng. Comp. I 1o.Sem. / 2005 Profs: Anna H. R. Costa Jaime S. Sichman Líria M. Sato Romero Tori © 2005
Exercício Encontre uma árvore geradora para o grafo G abaixo, utilizando o vértice a como raiz: a
e12
Módulo: Àrvores
e1
b d
c
e9
Autor: Edson S. Gomi Liria M. Sato
e8
e e6 f
e11
e10
Versão: 1.0 Data: 12/04/05
e7
e3 e4
e2 h
e5
g 25
Árvore geradora - Busca em largura
PCS 2214 Fund. Eng. Comp. I
Árvore resultante
1o.Sem. / 2005
e1
a
Profs: Anna H. R. Costa Jaime S. Sichman Líria M. Sato Romero Tori © 2005
e1 2
Módulo: Àrvores
e 9
Autor: Edson S. Gomi Liria M. Sato
c
d
e 3
e
e
8
e g
b
f
4
e
h
5
Versão: 1.0 Data: 12/04/05
26
13
Outro algoritmo para encontrar árvore geradora • busca em profundidade PCS 2214 Fund. Eng. Comp. I 1o.Sem. / 2005 Profs: Anna H. R. Costa Jaime S. Sichman Líria M. Sato Romero Tori © 2005 Módulo: Àrvores
Autor: Edson S. Gomi Liria M. Sato
Versão: 1.0 Data: 12/04/05
Entrada: um grafo conectado G com vértices ordenados v1 , v2 , ... , vn e E= arestas Saída: uma árvore geradora T procedure dfs(V, E) // V´= vértices da árvore geradora T //E´= arestas da árvore geradora T // v1é a raiz da árvore geradora V’ := {v1 } E’ := ∅ w := v1
cont.
27
Outro algoritmo para encontrar árvore geradora PCS 2214 Fund. Eng. Comp. I 1o.Sem. / 2005 Profs: Anna H. R. Costa Jaime S. Sichman Líria M. Sato Romero Tori © 2005 Módulo: Àrvores
Autor: Edson S. Gomi Liria M. Sato
Versão: 1.0 Data: 12/04/05
28
while true do begin while existe uma aresta (w, v) que quando adicionada não cria um ciclo em T do begin escolha a aresta (w, vk )com menor k que quando adicionada a T não cria um ciclo em T adicione (w, vk ) a E’; adicione vk a V’; w := vk end if w = v1 then return (T) w := pai de w emT // retrocesso end end dfs
14
Árvore geradora - Busca em profundidade Exercício PCS 2214 Fund. Eng. Comp. I 1o.Sem. / 2005 Profs: Anna H. R. Costa Jaime S. Sichman Líria M. Sato Romero Tori © 2005
Encontre uma árvore geradora para o grafo G abaixo, utilizando o vértice a como raiz: e1
b
c e d 7
e3
a
e12
Módulo: Àrvores
e8
e9
Autor: Edson S. Gomi Liria M. Sato
e e6 f
e11
e10
Versão: 1.0 Data: 12/04/05
e4 e5
e2 h
g 29
Árvore geradora - Busca em profundidade PCS 2214 Fund. Eng. Comp. I
Árvore resultante
1o.Sem. / 2005 Profs: Anna H. R. Costa Jaime S. Sichman Líria M. Sato Romero Tori © 2005
e1
a c
Módulo: Àrvores
e7d
b
e3
e8 e e6 f
Autor: Edson S. Gomi Liria M. Sato
e11
e5
h
g
Versão: 1.0 Data: 12/04/05
30
15
Árvore Geradora
PCS 2214 Fund. Eng. Comp. I 1o.Sem. / 2005 Profs: Anna H. R. Costa Jaime S. Sichman Líria M. Sato Romero Tori © 2005
Ambos os métodos (busca em largura e busca em profundidade) podem ser utilizados para testar se um grafo G arbitrário é conectado (conexo).c d b a
a
Módulo: Àrvores
b
Autor: Edson S. Gomi Liria M. Sato
e G1
Versão: 1.0 Data: 12/04/05
f
c
d
e
G2
G1 e G2 são grafos conectados? 31
Árvore Geradora Mínima
PCS 2214 Fund. Eng. Comp. I 1o.Sem. / 2005 Profs: Anna H. R. Costa Jaime S. Sichman Líria M. Sato Romero Tori © 2005 Módulo: Àrvores
Autor: Edson S. Gomi Liria M. Sato
O grafo ponderado G v2 v1 4 representa 6 cidades e os custos de construção de 2 5 estradas que interligam v3 1 3 duas cidades. Deseja-se v4 construir um sistema de 6 3 6 estradas que interligue v6 todas as cidades e que v5 2 seja o mais barato. G
Versão: 1.0 Data: 12/04/05
32
16
Árvore Geradora Mínima PCS 2214 Fund. Eng. Comp. I 1o.Sem. / 2005 Profs: Anna H. R. Costa Jaime S. Sichman Líria M. Sato Romero Tori © 2005
A solução pode ser representada por um subgrafo que deve ser uma árvore geradora, cuja soma dos pesos de suas arestas é minima. Esse tipo de árvore é denominado de árvore geradora mínima.
Módulo: Àrvores
Definição: Seja G um grafo ponderado. Uma árvore geradora mínima de G é uma árvore geradora de G com peso (somatória dos pesos das arestas de G) mínimo.
Autor: Edson S. Gomi Liria M. Sato
Versão: 1.0 Data: 12/04/05
33
Árvore Geradora Mínima
PCS 2214 Fund. Eng. Comp. I 1o.Sem. / 2005
v1
Profs: Anna H. R. Costa Jaime S. Sichman Líria M. Sato Romero Tori © 2005
4 2
Módulo: Àrvores
3 v5
2
Grafo
Versão: 1.0 Data: 12/04/05
v1
5 v3 1
3
Autor: Edson S. Gomi Liria M. Sato
v2
4
v2
2 v3 1
3
v4
v4
6 v6
v5
2
v6
Árvore geradora mínima
34
17
Árvore Geradora Mínima Algoritmo de Prim PCS 2214 Fund. Eng. Comp. I 1o.Sem. / 2005 Profs: Anna H. R. Costa Jaime S. Sichman Líria M. Sato Romero Tori © 2005 Módulo: Àrvores
Constrói uma árvore adicionando arestas iterativamente, até que uma árvore geradora mínima seja gerada. A cada iteração é adicionada uma aresta de menor peso que não completa um ciclo para a árvore corrente. Entrada: um grafo ponderado conectado, com vértices 1, ..., n e vértice inicial s. Se (i,j) é uma aresta, w(i,j) é igual ao peso de (i,j). Se (i,j) não é uma aresta, w(i,j) é igual a ∞ (um valor maior que qualquer peso existente). Saída: o conjunto de arestas E de uma árvore geradora mínima.
Autor: Edson S. Gomi Liria M. Sato
Versão: 1.0 Data: 12/04/05
35
Árvore Geradora Mínima
PCS 2214 Fund. Eng. Comp. I 1o.Sem. / 2005 Profs: Anna H. R. Costa Jaime S. Sichman Líria M. Sato Romero Tori © 2005 Módulo: Àrvores
Autor: Edson S. Gomi Liria M. Sato
Versão: 1.0 Data: 12/04/05
36
procedure prim(w, n, s) // v(i) = 1 se vértice 1 já foi adicionado à árvore geradora(mst). Caso contrário v(i) = 0 for i := 1 to n do v(i) := 0 v(s) := 1 // adiciona vértice 1 à mst. E := ∅ // inicia com o conjunto de arestas vazio. for i := 1 to n - 1 do // coloque n - 1 arestas na árvore geradora mínima (mst) begin // adiciona a aresta de peso mínimo com um vértice na mst e um vértice que não está na mst min := ∞ cont.
18
Árvore Geradora Mínima
PCS 2214 Fund. Eng. Comp. I 1o.Sem. / 2005 Profs: Anna H. R. Costa Jaime S. Sichman Líria M. Sato Romero Tori © 2005 Módulo: Àrvores
Autor: Edson S. Gomi Liria M. Sato
Versão: 1.0 Data: 12/04/05
for j := 1 to n do if v(j) = 1 then // j é um vértice da mst for k = 1 to n do if v(k) = 0 and w(j,k) < min then begin add_vertex := k e := (j,k) min := w(j,k) end; v(add_vertex) := 1 //adiciona vértice e aresta na mst E := E ∪ {e} end return (E) end prim
37
Árvore Geradora Mínima Exercício - algoritmo de Prim PCS 2214 Fund. Eng. Comp. I 1o.Sem. / 2005 Profs: Anna H. R. Costa Jaime S. Sichman Líria M. Sato Romero Tori © 2005
Mostre como o algoritmo de Prim encontra uma árvore geradora mínima para o grafo apresentado abaixo. Assuma que o vértice inicial é o vértice 1. 1
Módulo: Àrvores
2
4 2
Autor: Edson S. Gomi Liria M. Sato
3
3
3
6
Versão: 1.0 Data: 12/04/05
5
2
5
1
4 6 6
38
19
Árvore Geradora Mínima Árvore resultante PCS 2214 Fund. Eng. Comp. I 1o.Sem. / 2005
1
Profs: Anna H. R. Costa Jaime S. Sichman Líria M. Sato Romero Tori © 2005
Autor: Edson S. Gomi Liria M. Sato
5
2
2 3 1
3
Módulo: Àrvores
4
4 6
2
Versão: 1.0 Data: 12/04/05
39
Árvores binárias
PCS 2214 Fund. Eng. Comp. I 1o.Sem. / 2005 Profs: Anna H. R. Costa Jaime S. Sichman Líria M. Sato Romero Tori © 2005 Módulo: Àrvores
Árvore binária: é uma árvore com raiz na qual cada vértice possui um filho, dois filhos ou nenhum filho. Cada filho é denominado filho direito (right child) ou filho esquerdo (left child).
a
b
Autor: Edson S. Gomi Liria M. Sato
c d
Versão: 1.0 Data: 12/04/05
c é o filho direito de a
f
b é o filho esquerdo de a
e g
Exemplo de árvore binária
40
20
Árvores binárias
PCS 2214 Fund. Eng. Comp. I 1o.Sem. / 2005 Profs: Anna H. R. Costa Jaime S. Sichman Líria M. Sato Romero Tori © 2005 Módulo: Àrvores
Autor: Edson S. Gomi Liria M. Sato
Árvore binária completa: é uma árvore binária cujos vértices possuem dois filhos ou nenhum filho. Teorema: Se T é uma árvore binária completa, com i vértices internos, então T possui i+1 vértices terminais e um total de 2i+1 vértices.
Versão: 1.0 Data: 12/04/05
41
Árvores binárias
PCS 2214 Fund. Eng. Comp. I
Teorema:
1o.Sem. / 2005 Profs: Anna H. R. Costa Jaime S. Sichman Líria M. Sato Romero Tori © 2005 Módulo: Àrvores
Se uma árvore binária de altura h possui t vértices terminais, então: log2 t ≤ h
Autor: Edson S. Gomi Liria M. Sato
Versão: 1.0 Data: 12/04/05
42
21
Árvore de busca binária
PCS 2214 Fund. Eng. Comp. I 1o.Sem. / 2005 Profs: Anna H. R. Costa Jaime S. Sichman Líria M. Sato Romero Tori © 2005 Módulo: Àrvores
Autor: Edson S. Gomi Liria M. Sato
Árvore de busca binária: é uma árvore T na qual dados são associados aos vértices. Para cada vértice v em T, cada item de dado na sub-árvore à esquerda de v é menor que o item de dado em v e cada item de dado na sub-árvore à direita de v é maior do que o item de dado em v.
Versão: 1.0 Data: 12/04/05
43
Árvore de busca binária Exemplo : PCS 2214 Fund. Eng. Comp. I 1o.Sem. / 2005 Profs: Anna H. R. Costa Jaime S. Sichman Líria M. Sato Romero Tori © 2005
As palavras “old, programmers, never, die, they, just, lose, their, memories” podem ser colocadas numa árvore de busca binária da seguinte forma:
never
Módulo: Àrvores
programmers
just
Autor: Edson S. Gomi Liria M. Sato
die
Versão: 1.0 Data: 12/04/05
lose
old
memories
their they
44
22
Algoritmo para construção de uma árvore de busca binária (1) PCS 2214 Fund. Eng. Comp. I 1o.Sem. / 2005 Profs: Anna H. R. Costa Jaime S. Sichman Líria M. Sato Romero Tori © 2005 Módulo: Àrvores
Autor: Edson S. Gomi Liria M. Sato
Versão: 1.0 Data: 12/04/05
Entrada: uma sequência w1 , ... , wn , de palavras distintas e o comprimen n da sequência. Saída: uma árvore de busca binária T. procedure make_bin_search_tree(w, n) Seja T uma árvore com um vértice (raiz), coloque w1 na raiz; for i := 2 to n do begin v := raiz ; busca := true ; // encontra posição na árvore para wi while busca do ver bloco expandido end ; return (T) ; end make_bin_search_tree.
45
Algoritmo para construção de uma árvore de busca binária (2) PCS 2214 Fund. Eng. Comp. I 1o.Sem. / 2005 Profs: Anna H. R. Costa Jaime S. Sichman Líria M. Sato Romero Tori © 2005 Módulo: Àrvores
Autor: Edson S. Gomi Liria M. Sato
begin else s := palavra em v if v não tem filho direito then if wi < s then begin if v não tem filho esquerdo then adicione um filho direito r à v begin coloque wi in r adicione um filho esquerdo l à v busca := false //fim da busca coloque wi em l end busca := false // fim da busca else end v := filho direito de v else end v := filho esquerdo de v
Versão: 1.0 Data: 12/04/05
Bloco expandido 46
23
Árvore de busca binária PCS 2214 Fund. Eng. Comp. I 1o.Sem. / 2005 Profs: Anna H. R. Costa Jaime S. Sichman Líria M. Sato Romero Tori © 2005 Módulo: Àrvores
Autor: Edson S. Gomi Liria M. Sato
• Árvores de busca binária são úteis para localizar dados. • O tempo gasto na busca por um item de dado é maior quando o item não está contido na árvore de busca binária. Nesse caso, o procedimento de busca percorre o caminho mais longo, iniciando-se pela raiz. Assim o tempo de pior caso é aproximadamente proporcional à altura da árvore.
Versão: 1.0 Data: 12/04/05
47
Métodos de percurso de árvores binárias PCS 2214 Fund. Eng. Comp. I 1o.Sem. / 2005 Profs: Anna H. R. Costa Jaime S. Sichman Líria M. Sato Romero Tori © 2005
Serão considerados três métodos de percurso para árvores binárias: pré-ordem (“preorder”), ordem simétrica (“inorder”) e pós-ordem
Módulo: Àrvores
(“postorder”). Autor: Edson S. Gomi Liria M. Sato
Versão: 1.0 Data: 12/04/05
48
24
Percurso em pré-ordem Entrada: PT, a raiz de uma árvore binária. Saída: depende de como o comando process é interpretado. Se é equivalente a print, a saída é a sequência de vértices visitados.
PCS 2214 Fund. Eng. Comp. I 1o.Sem. / 2005 Profs: Anna H. R. Costa Jaime S. Sichman Líria M. Sato Romero Tori © 2005
procedure pre_ordem(PT) if PT is empty then return process PT l := filho esquerdo de PT pre_ordem(l) r := filho direito de PT pre_ordem(r) end pre_ordem
Módulo: Àrvores
Autor: Edson S. Gomi Liria M. Sato
Versão: 1.0 Data: 12/04/05
49
Percurso em pré-ordem Exemplo:
PCS 2214 Fund. Eng. Comp. I
1
1o.Sem. / 2005 Profs: Anna H. R. Costa Jaime S. Sichman Líria M. Sato Romero Tori © 2005
2 b 3 c
Módulo: Àrvores
Autor: Edson S. Gomi Liria M. Sato
4
6
f
a b c d e f g h i j g 7
d 5
e 9 i
Versão: 1.0 Data: 12/04/05
Seqüência a ser impressa:
a
h
8 j
10
50
25
Percurso em ordem simétrica PCS 2214 Fund. Eng. Comp. I 1o.Sem. / 2005 Profs: Anna H. R. Costa Jaime S. Sichman Líria M. Sato Romero Tori © 2005 Módulo: Àrvores
Autor: Edson S. Gomi Liria M. Sato
Versão: 1.0 Data: 12/04/05
Entrada: PT, a raiz de uma árvore binária. Saída: depende de como o comando process é interpretado. Se é equivalente a print a saída é a sequência de vértices visitados. procedure ordem_simetrica (PT) if PT está vazio then return l := filho esquerdo de PT ordem_simetrica(l) process PT r := filho direito de PT ordem_simetrica(r) end ordem_simetrica
51
Percurso em ordem simétrica PCS 2214 Fund. Eng. Comp. I
Exemplo:
1o.Sem. / 2005 Profs: Anna H. R. Costa Jaime S. Sichman Líria M. Sato Romero Tori © 2005
5 a 2 b
Módulo: Àrvores
1 c
Autor: Edson S. Gomi Liria M. Sato
Seqüência a ser impressa: f
g 10
3 d 4 e
Versão: 1.0 Data: 12/04/05
c b d e a f i h j g
6
7
h i
8 j
9
52
26
Percurso em pós-ordem PCS 2214 Fund. Eng. Comp. I 1o.Sem. / 2005 Profs: Anna H. R. Costa Jaime S. Sichman Líria M. Sato Romero Tori © 2005 Módulo: Àrvores
Autor: Edson S. Gomi Liria M. Sato
Versão: 1.0 Data: 12/04/05
Entrada: PT, a raíz de uma árvore binária Saída: depende de como o comando process é nterpretado. Se é equivalente a print, a saída é a sequência de vértices visitados. procedure pos_ordem(PT) if PT está vazio then return l := filho esquerdo de PT pos_ordem(l) r := filho direito de PT pos_ordem(r) process PT end pos_ordem
53
Percurso em pós-ordem PCS 2214 Fund. Eng. Comp. I
Exemplo:
1o.Sem. / 2005
Módulo: Àrvores
1
f
c e d b i j h g f a
9
3 d 2
g 8 e 5
Versão: 1.0 Data: 12/04/05
Seqüência a ser impressa:
4 b c
Autor: Edson S. Gomi Liria M. Sato
10
a
Profs: Anna H. R. Costa Jaime S. Sichman Líria M. Sato Romero Tori © 2005
h i
7 j
6
54
27
Percurso em árvores de busca binária
PCS 2214 Fund. Eng. Comp. I 1o.Sem. / 2005 Profs: Anna H. R. Costa Jaime S. Sichman Líria M. Sato Romero Tori © 2005
Se os dados estiverem armazenados numa árvore de busca binária, o percurso em ordem simétrica irá processar os dados “em ordem”,
Módulo: Àrvores
uma vez que a seqüência filho Autor: Edson S. Gomi Liria M. Sato
esquerdo/raiz/filho direito coincide com a ordenação dos dados na árvore.
Versão: 1.0 Data: 12/04/05
55
Percurso em árvores de busca binária Exemplo: percurso em ordem simétrica PCS 2214 Fund. Eng. Comp. I 1o.Sem. / 2005 Profs: Anna H. R. Costa Jaime S. Sichman Líria M. Sato Romero Tori © 2005 Módulo: Àrvores
2 b 1 a
Autor: Edson S. Gomi Liria M. Sato
Seqüência a ser impressa:
5 e
3 c
10
j
4 d
8 h
7 g
Versão: 1.0 Data: 12/04/05
a b c d e f g h i j
6 f
i
9
56
28
Representação de expressões aritméticas
PCS 2214 Fund. Eng. Comp. I 1o.Sem. / 2005 Profs: Anna H. R. Costa Jaime S. Sichman Líria M. Sato Romero Tori © 2005
Expressões aritméticas podem ser representadas na forma de árvore binária. Exemplo: (a+b)*c-d/e Os vértices terminais correspondem aos operandos e os vértices internos correspondem aos operadores. -
Módulo: Àrvores
/
* Autor: Edson S. Gomi Liria M. Sato
+
Versão: 1.0 Data: 12/04/05
a
c
d
e
b
57
Notação infixa PCS 2214 Fund. Eng. Comp. I 1o.Sem. / 2005 Profs: Anna H. R. Costa Jaime S. Sichman Líria M. Sato Romero Tori © 2005
Se for feito o percurso em ordem simétrica na árvore binária que representa uma expressão aritmética, e for inserido um par de parênteses para cada operação, obtém-se a chamada notação infixa. 6 -
Módulo: Àrvores
Sequência a ser impressa: / 8
4 * 2 +
Autor: Edson S. Gomi Liria M. Sato
1 a
Versão: 1.0 Data: 12/04/05
5 c
( ( (a+b) * c ) - (d / e ) )
d
e
7
9
3 b
58
29
Notação pós-fixa PCS 2214 Fund. Eng. Comp. I 1o.Sem. / 2005 Profs: Anna H. R. Costa Jaime S. Sichman Líria M. Sato Romero Tori © 2005
Se for feito o percurso em pós-ordem na árvore binária que representa uma expressão aritmética, obtém-se a chamada expressão em notação polonesa reversa, ou notação pósfixa . - 9
Módulo: Àrvores
5 3
Autor: Edson S. Gomi Liria M. Sato
1 a
Versão: 1.0 Data: 12/04/05
+
/
* c
4
8
Sequência a ser impressa:
d
e
6
7
2 b
ab+c*de/-
59
Notação prefixa
PCS 2214 Fund. Eng. Comp. I 1o.Sem. / 2005 Profs: Anna H. R. Costa Jaime S. Sichman Líria M. Sato Romero Tori © 2005
Se for feito o percurso em pré-ordem na árvore binária que representa uma expressão aritmética, obtém-se a chamada expressão em notação polonesa, ou notação prefixa . 1 2
Módulo: Àrvores
3
Autor: Edson S. Gomi Liria M. Sato
4
Versão: 1.0 Data: 12/04/05
a
+
Sequência a ser impressa: /
* 6 c 5 b
7
-*+abc/de
d
e
8
9
60
30
Árvores de Decisão
PCS 2214 Fund. Eng. Comp. I 1o.Sem. / 2005 Profs: Anna H. R. Costa Jaime S. Sichman Líria M. Sato Romero Tori © 2005 Módulo: Àrvores
Autor: Edson S. Gomi Liria M. Sato
Versão: 1.0 Data: 12/04/05
A árvore binária ao lado fornece um procedimento para escolher um restaurante: inicia-se na raiz, respondendo a cada questão e seguindo a aresta propriada, até chegar a um vértice terminal, 3 stars? que representa a escolha de um no yes restaurante. Esse tipo de Jimmy’s Place Cheap? árvore é chamada de no yes árvore de decisão. Afghan? Polish? no yes yes Helmand no Spanish? yes no On the Tao
Café BaBa-Reeba!
Aurelio’s Pizza
61
Árvores de Decisão
PCS 2214 Fund. Eng. Comp. I 1o.Sem. / 2005 Profs: Anna H. R. Costa Jaime S. Sichman Líria M. Sato Romero Tori © 2005 Módulo: Àrvores
Outro exemplo: um algoritmo para resolver o jogo das cinco moedas. Cinco moedas são idênticas na aparência, mas uma das moedas considerada como a moeda “ruim” é mais pesada ou mais leve do que as demais. Todas as demais moedas têm o mesmo peso. Problema: identificar a moeda ruim e determinar se é mais pesada ou mais leve do que as outras, utilizando apenas uma balança de pêndulo, que compara os pesos de dois conjuntos de moedas.
Autor: Edson S. Gomi Liria M. Sato
Versão: 1.0 Data: 12/04/05
62
cont.
31
Árvores de Decisão
PCS 2214 Fund. Eng. Comp. I 1o.Sem. / 2005 Profs: Anna H. R. Costa Jaime S. Sichman Líria M. Sato Romero Tori © 2005 Módulo: Àrvores
Autor: Edson S. Gomi Liria M. Sato
Versão: 1.0 Data: 12/04/05
Um algoritmo para solucionar o problema é apresentado a seguir como uma árvore de decisão. Consideramos que: • As moedas são rotuladas C1, C2, C3, C4, C5. • aresta do lado esquerdo do vértice rotulada com : significa que o lado esquerdo da balança é mais pesado que o lado direito. • aresta do lado direito do vértice rotulada com : significa que o lado direito da balança é mais pesado que o lado esquerdo. • aresta rotulada com :significa que há um equilíbrio entre os dois lados. cont.
63
Árvores de Decisão C1:C2
PCS 2214 Fund. Eng. Comp. I 1o.Sem. / 2005 Profs: Anna H. R. Costa Jaime S. Sichman Líria M. Sato Romero Tori © 2005
C1:C5
C1,H
Módulo: Àrvores
C3:C4
C2,L
C2,H C3:C5
Autor: Edson S. Gomi Liria M. Sato
C3,H
Versão: 1.0 Data: 12/04/05
C1:C5
C4,L
C1:C5 C5,L
C1,L
C3:C5 C5,H
C4,H
C3,L
Um algoritmo para resolver o jogo das cinco moedas 64
32
Árvores de Decisão Tempo mínimo para ordenação PCS 2214 Fund. Eng. Comp. I 1o.Sem. / 2005 Profs: Anna H. R. Costa Jaime S. Sichman Líria M. Sato Romero Tori © 2005 Módulo: Àrvores
Autor: Edson S. Gomi Liria M. Sato
Versão: 1.0 Data: 12/04/05
• Pode-se utilizar árvores de decisão para estimar o tempo do pior caso para ordenação. • Problema de ordenação : dados n itens x1 , ..., xn , colocá-los em ordem crescente (ou decrescente). • A análise será restrita aos algoritmos de ordenação que comparam repetidamente dois elementos e que, com base no resultado da comparação, modificam a lista original.
cont.
65
Árvores de Decisão PCS 2214 Fund. Eng. Comp. I 1o.Sem. / 2005 Profs: Anna H. R. Costa Jaime S. Sichman Líria M. Sato Romero Tori © 2005 Módulo: Àrvores
Autor: Edson S. Gomi Liria M. Sato
Tempo mínimo para ordenação Um algoritmo para ordenar a1, a2, a3, é dado pela árvore binária de decisão abaixo. Cada aresta é rotulada com o arranjo da lista com base na resposta da pergunta do vértice interno. Os vértices terminais apresentam a lista ordenada. yes no a1 < a2 ? a2, a1, a3 a1, a2, a3 no a1 < a3 ? a , a , a a2 < a3 ? no 2 3 1 a1, a3, a2 yes yes a1, a2, a3
Versão: 1.0 Data: 12/04/05
66
a1 < a3 ?
yes a1, a3, a2
a2, a1, a3
no a3, a1, a2
a2 < a3 ?
yes a2, a3, a1
no a3, a2, a1 cont.
33
Árvores de Decisão Tempo mínimo para ordenação PCS 2214 Fund. Eng. Comp. I 1o.Sem. / 2005 Profs: Anna H. R. Costa Jaime S. Sichman Líria M. Sato Romero Tori © 2005 Módulo: Àrvores
Definindo o tempo de pior caso para ordenação como sendo o número de comparações no pior caso, segue que a altura da árvore binária de decisão que resolve o problema de ordenação é igual ao tempo de pior caso. Demonstra-se que esse algoritmo é o caso ótimo, ou seja, nenhum algoritmo que ordena três itens, comparando dois a dois, tem um desempenho melhor que 3 comparações.
Autor: Edson S. Gomi Liria M. Sato
Versão: 1.0 Data: 12/04/05
67
Árvores de Decisão
PCS 2214 Fund. Eng. Comp. I 1o.Sem. / 2005 Profs: Anna H. R. Costa Jaime S. Sichman Líria M. Sato Romero Tori © 2005 Módulo: Àrvores
Autor: Edson S. Gomi Liria M. Sato
Teorema
Se f(n) é o número de comparações necessárias para ordenar n itens no pior caso por um algoritmo de ordenação, então: f(n) = Ω ( n log2 n )
Versão: 1.0 Data: 12/04/05
68
34
Bibliografia
PCS 2214 Fund. Eng. Comp. I 1o.Sem. / 2005 Profs: Anna H. R. Costa Jaime S. Sichman Líria M. Sato Romero Tori © 2005
[1] Johnsonbaugh, R. Discrete Mathematics. Prentice Hall International, London, UK, 4th. Ed. 1997. Cap. 7. [2] Cormem, T. H., Leiserson, C. E., and Rivest, R. L. Introduction to Algorithms, MIT Press, Cambridge, Mass., 1990.
Módulo: Àrvores
Autor: Edson S. Gomi Liria M. Sato
Versão: 1.0 Data: 12/04/05
69
35