Árvores Introdução e Aplicações Árvores de Busca Binária Fundamentos

Slides:



Advertisements
Apresentações semelhantes
LISTAS Dilvan Moreira, parcialmente baseado em material do prof. Ricardo Campello.
Advertisements

Árvores Passeios.
Marco Antonio Montebello Júnior
Listas Lineares Estrutura que permite representar um conjunto de dados de forma a preservar a relação de ordem linear. Uma lista linear é composta de nós,
Estruturas de Dados Árvores Binárias
Listas encadeadas Prof. Rosana Palazon.
Estrutura de Dados e Algoritmos e Programação e Computadores II
Organização e Recuperação da Informação
Série de Exercícios.
INE 5384 Estruturas de Dados Prof a. Patrícia Vilain
Árvores.

David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
David Menotti Estruturas de Dados I DECOM – UFOP
Pesquisa em Memória Primária – Árvores de Busca
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
Pesquisa em Memória Primária – Árvores de Busca
Listas lineares Listas Lineares Fila Dupla Pilha Fila Saída restrita
Listas Ligadas – Conceitos Avançados
Classificação e Pesquisa de Dados
AED – Algoritmos e Estruturas de Dados
Métodos de Classificação por Seleção: HeapSort
Estruturas de Dados I Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Estruturas de Dados II Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Listas com Ponteiros Listas encadeadas Listas circulares.
Lista Encadeada Circular Lista Duplamente Encadeada
Robson Godoi / Sandra Siebra
Listas Encadeadas.
Árvores Equilibradas Sumário Splay B-tree Vermelho-Preto AA e BB
Prof. Ernesto Lindstaedt
Fundamentos sobre Árvores
Árvore Binária de Busca
Algoritmos e Estruturas de Dados II
Pesquisa em Memória Primária
Árvores binárias de pesquisa com balanceamento
INF 1010 Estruturas de Dados Avançadas
Árvores Binárias de Pesquisa
Algorítmos e estrutura de dados III
Lista Encadeada Circular Lista Duplamente Encadeada
Algorítmos e estrutura de dados III Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Algoritmos e Estrutura de Dados III
Árvores Balanceadas Liliane Rose Benning Salgado.
Rotação Simples e Dupla Katia Guimarães
Listas de Prioridades Em muitas aplicações, dados de uma coleção são acessados por ordem de prioridade A prioridade associada a um dado pode ser qualquer.
Estruturas de Dados Aula 9: Listas (parte 1)
Á R V O R E S.
Orientação a Objetos e Java Graduação em Ciência da Computação
© Copyright 2007 Algoritmos e Estruturas de Dados - Todos os direitos reservados Átila Valgueiro Malta Moreira Juliana Medeiros de Lucena Rafael Alberto.
Estruturas de Dados PROFESSOR DIÓGENES FURLAN. Estruturas de Dados (ED) Programas operam sobre dados Dados são relacionados e possuem estrutura Como representar.
Árvore Binária de Busca
Listas Simplesmente Encadeadas
Educação Profissional Técnica de Nível Médio Curso Técnico de Informática
Transparências da profa. Renata Galante da II/UFRGS com permissão
Árvores Prof. Dr. rer. nat. Daniel Duarte Abdala DAS 5102 – Fundamentos da Estrutura da Informação 1.
Árvores Binárias Profa. Patrícia A. Jaques Luiz Gonzaga Jr
Estruturas de Dados Aula 15: Árvores
Prof. Hilton Cardoso Marins Junior ÁRVORES BINÁRIAS.
© 2011 Pearson Prentice Hall. Todos os direitos reservados.slide 1 © 2011 Pearson Prentice Hall. Todos os direitos reservados.slide 1 © 2011 Pearson Prentice.
Universidade do Vale do Rio dos Sinos - São Leopoldo -
Prof. Hilton Cardoso Marins Junior
Estruturas Avançadas de Dados UNISINOS
Introdução a Árvores e Árvores Binárias
Estrutura de Dados Aula 3 - Listas
Árvores e Árvores Binárias
Adriana Libório Fernandes Lins Arthur Cavalcanti Alem Átila Valgueiro Malta Moreira Flavio Juvenal da Silva Júnior Gustavo Cauê Silva Botelho Matheus Bispo.
BANCO DE DADOS II Árvore de Dados. FATEC - GUARATINGUETÁ Professor: Eduardo Barbosa Adiel Lemos Ana Renata Bruno Michael Jéssica Fernanda Layla Monique.
INE5408 Estruturas de Dados Árvores B - Estrutura e peculiaridades -Algoritmos de inserção, pesquisa e deleção.
UNIVERSIDADE FEDERAL DE MINAS GERAIS Árvores Cristiano Arbex Valle Vinicius Fernandes dos Santos
Árvores.
Transcrição da apresentação:

Árvores Introdução e Aplicações Árvores de Busca Binária Fundamentos Implementação

Árvores - Introdução Uma árvore é um conjunto finito de n > = 0 nós Se n = 0 temos uma árvore nula Se n > 0 temos uma árvore com as seguintes características: Existe um nó especial chamado raiz; Os demais são particionados em T1, T2, ..., Tk estruturas disjuntas de árvores As estruturas T1, T2, . . ., Tk denominam-se árvores

Árvores - Definições Grau: representa o número de subárvores de um nó. Nó folha ou terminal: é o nó que possui grau 0, ou seja, não possui subárvores. Grau de uma árvore (n-aridade): é definido como sendo igual ao máximo dos graus de todos os seus nós. Nós filhos: são as raízes das subárvores de um nó. E este nó é o pai delas Nós irmãos: são os nós filhos que apresentam o mesmo pai (existem ainda nó ancestral, descendente, descendente esquerdo ou direito) Nível: a raiz da árvore tem nível 0 (em alguns livros é considerado igual à 1). Qualquer outro nó apresenta um nível a mais que seu nó pai Altura (ou profundidade) : é o máximo dos níveis de todos os nós da árvore. Isso equivale ao tamanho do passeio mais distante da raiz até qualquer folha

Árvore - Exemplo Questões: Grau de A? Nós folhas? Grau da árvore? Filhos de H? Irmãos de B? Nível de G? Altura da árvore?

Árvores Binárias Possuem um nó especial chamado raiz Os demais nós são particionadas em T1, T2 estruturas disjuntas de árvores binárias A estrutura T1 é chamada subárvore esquerda e T2 subárvore direita da raiz Podem ser classificadas em: Estritamente binária: todo nó não folha tem 2 filhos Completa: todos os folhas estão no mesmo nível

Árvores Binárias - Classificação Exemplos de (a) arvore estritamente binária e (b) completa. (b) (a)

Árvores de Busca Binária Dado um nó n, todo elemento armazenado na subárvore esquerda é menor que n. Nenhum elemento armazenado na subárvore direita é menor que n. As subárvores esquerda e direita também são árvores de busca binária. A definição de árvore de busca binária também é recursiva.

Árvores de Busca Binária - Exemplos A figura (a) pode ser considerada uma árvore de busca binária, (b) não. (b) (a)

Árvores de Busca Binária - Exemplos Veja como ficaria uma árvore de busca binária, com valores numéricos a seguir e considerando a seguinte seqüência de entrada: 14, 15, 4, 9, 7, 18, 3, 5, 16, 4, 20, 17, 9, 14 e 5.

Árvores Binárias – Outras Aplicações Representação de uma expressão contendo operandos e operadores: A+(B*C) (A+B)*C

Árvores de Busca Binária - Implementação Uma árvore binária de busca binária vazia é representada por uma variável ponteiro nula A utilização de uma lista encadeada tem a vantagem de não necessitar nenhuma movimentação de dados quando um novo elemento precisa ser inserido Basta o ajuste adequado dos ponteiros para colocar o novo elemento na posição adequada A inserção de elementos novos é ainda mais eficiente porque eles entram sempre na condição de folhas, pois, um nó não pode entrar numa árvore e já “assumir” filhos

Árvores de Busca Binária - Implementação Abaixo está a estrutura de representação interna de uma árvore de busca binária na memória:

Árvores de Busca Binária - Implementação Devemos começar pelo elemento básico das árvores, seus nós public class Node { private int info; private Node esq, dir, pai; ... // Properties // Constructor public Node (int x, Node p) { info = x; pai = p; esq = null; dir = null; } };

Árvores de Busca Binária - Implementação Em seguida pode-se definir a classe árvore. Esta classe possuirá a raiz da árvore (ponteiro para o nó raiz) e os métodos para se inserir, remover e pesquisar elementos. public class BTree { private Node raiz; ... // Properties // Methods };

Árvores de Busca Binária - Implementação Inserção: basta verificar se o nó não está nulo; se o novo elemento é menor do que a raiz, a inserção é na subárvore esquerda, caso contrário, a inserção é na subárvore direita. private void insert(Node n, int x) { if (x < n.Info) if (n.Esq == null) n.Esq = new Node(x, n); else insert(n.Esq, x); } if (n.Dir == null) n.Dir = new Node(x, n); insert(n.Dir, x);

Árvores de Busca Binária - Implementação A função insert da classe BTree não deve ser chamada diretamente pelo usuário, pois ele não sabe que nó passar como parâmetro. Criamos então outra função na classe BTree: // Inserindo na árvore – método da classe Btree public void Insert(int x) { if (raiz == null) raiz = new Node(x, null); else insert(raiz, x); }

Árvores de Busca Binária - Implementação A pesquisa em uma árvore binária (find) pode ser definida da seguinte maneira: T é uma árvore nula: elemento não encontrado A raiz de T armazena o elemento X: a solução é imediata X é menor que o valor da raiz de T: prossegue-se com a busca na subárvore esquerda de T X é maior ou igual à T: prossegue-se com a busca na subárvore direita de T

Árvores de Busca Binária - Implementação Código para a função find // Método da classe BTree private Node find(Node n, int x) { if ((n == null) || (n.Info == x)) return n; if (x < n.Info) return find(n.Esq, x); else return find(n.Dir, x); }

Árvores de Busca Binária - Implementação Da mesma for que insert, criamos uma função para encapsular a complexidade: // Método da classe BTree public Node Find(int x) { return find(raiz, x); }

Árvores de Busca Binária - Implementação A remoção de um elemento não é tão simples quanto a inserção e pesquisa: Se o nó não possui filhos: a solução é imediata, podemos removê-lo. Se o nó possui um único filho: podemos substituí- lo pelo seu nó filho. Se o nó possui dois filhos: não é possível que os dois filhos assumam o lugar do pai; escolhemos então o nó que armazena o maior elemento na subárvore esquerda de T para substituir o pai.

Árvores de Busca Binária - Implementação Primeiro é necessário definir uma função que encontre e retire o maior elemento de uma subárvore. private Node killmax(Node n) { if (n.Dir == null) Node t = n; if (n.Pai.Dir == n) n.Pai.Dir = n.Esq; else n.Pai.Esq = n.Esq; if (n.Esq != null) n.Esq.Pai = n.Pai; return t; } return killmax(n.Dir);

Árvores de Busca Binária - Implementação Rotina remover - início public void remove(Node n, int x) { Node f = find(n,x); if (f==null) return; if (f.Esq == null) { if (f.Pai == null) raiz = f.Dir; else if (f.Pai.Dir == f) f.Pai.Dir = f.Dir; f.Pai.Esq = f.Dir; if (f.Dir != null) f.Dir.Pai = f.Pai; }

Árvores de Busca Binária - Implementação Rotina remover - final else { if (f.Dir == null) if (f.Pai == null) raiz = f.Esq; if (f.Pai.Dir == f) f.Pai.Dir = f.Esq; f.Pai.Esq = f.Esq; if (f.Esq != null) f.Esq.Pai = f.Pai; } Node p = killmax(f.Esq); f.Info = p.Info; if (raiz != null) raiz.Pai = null;

Árvores de Busca Binária - Implementação Para o usuário, a remoção pode ser chamada apenas indicando o valor a ser removido: // Método da classe Btree public void Remove(int x) { remove(raiz, x); }