Preview only show first 10 pages with watermark. For full document please download

Arvores

conteúdo: • Terminologia e caracterização das árvores. • Árvore geradora • Árvores binárias. • Métodos de percurso de árvores. • Árvores de decisão. disciplina: fundamentos de engenharia de computação I ano:2006

   EMBED


Share

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