Robson Godoi / Sandra Siebra

Slides:



Advertisements
Apresentações semelhantes
AULA 8 Profa. Sandra de Amo GBC053 – BCC
Advertisements

Marco Antonio Montebello Júnior
TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS ESTRUTURAS DE DADOS AVANÇADAS Aula /08/2011 Professor Leomir J. Borba-
Estruturas de Dados Árvores Binárias
Pesquisas de Dados (Parte 2)
Estrutura de Dados e Algoritmos e Programação e Computadores II
Organização e Recuperação da Informação
ESTRUTURAS DO TIPO FILA
Árvore Binária - altura máxima A: Inserção de 1, 2, 3, 4, 5, 6 e 7 Pior caso: O(n)
Árvores.

David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
David Menotti Estruturas de Dados I DECOM – UFOP
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
Árvores Introdução e Aplicações Árvores de Busca Binária Fundamentos
Árvores AVL.
Ordenação Facilitar e aumentar a eficiência das operações de pesquisa sobre esses dados Pode ser crescente ou decrescente A seqüência de entrada, normalmente,
Ordenação Facilitar e aumentar a eficiência das operações de pesquisa sobre esses dados Pode ser crescente ou decrescente A seqüência de entrada, normalmente,
Indexação e Hashing Muitas consultas referenciam apenas uma pequena porção dos registros em uma tabela. Portanto necessitamos ser capaz de localizar estes.
Árvores e Árvores Binárias
Métodos de Classificação por Seleção: HeapSort
Estruturas de Dados II Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Algoritmo e Estrutura de Dados II
Robson Godoi / Sandra Siebra
Prof. Ernesto Lindstaedt
Árvore Geradora Mínima
Fundamentos sobre Árvores
Árvore Binária de Busca
Paradigmas de programação
Ponteiros em Pascal Variáveis ponteiros são aquelas que guardam o endereço de outra, possibilitando o acesso a seu conteúdo. Declaração em Pascal:  var.
LISTAS DUPLAMENTE ENCADEADAS
Árvores binárias de pesquisa com balanceamento
Listas duplamente encadeadas Estrutura: tDado = integer; { ou real, char, etc.} tPtNo = ^tNo; tNo = record Ant: tPtNo Dado: tDado; Prox: tPtNo; end; var.
Árvores Binárias de Pesquisa
Algorítmos e estrutura de dados III
Algorítmos e estrutura de dados III Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
O Portal do Estudante de Computação
Algoritmos e Estrutura de Dados III
Introdução e Busca Cega
Árvores Balanceadas Liliane Rose Benning Salgado.
Rotação Simples e Dupla Katia Guimarães
Á R V O R E S.
© Copyright 2007 Algoritmos e Estruturas de Dados - Todos os direitos reservados Átila Valgueiro Malta Moreira Juliana Medeiros de Lucena Rafael Alberto.
Árvore Binária de Busca
Educação Profissional Técnica de Nível Médio Curso Técnico de Informática
Árvores Prof. Dr. rer. nat. Daniel Duarte Abdala DAS 5102 – Fundamentos da Estrutura da Informação 1.
Tradução Dirigida por Sintaxe

Árvores Binárias Profa. Patrícia A. Jaques Luiz Gonzaga Jr
Estruturas de Dados Aula 15: Árvores
Aula 06 – 05/04 Árvores binárias.
Árvores Vermelho-Preto
Prof. Hilton Cardoso Marins Junior ÁRVORES BINÁRIAS.
Árvores AVL Balanceadas (Árvore Binária Balanceada)
© 2011 Pearson Prentice Hall. Todos os direitos reservados.slide 1 © 2011 Pearson Prentice Hall. Todos os direitos reservados.slide 1 © 2011 Pearson Prentice.
Prof. Hilton Cardoso Marins Junior

Universidade do Vale do Rio dos Sinos - São Leopoldo -
Faculdade Pernambucana - FAPE Setembro/2007
AVL Árvores Equilibradas Sumário AVL Splay B Vermelho-Preto AA e BB Multidimensionais quaternárias k-d [Pesquisa Lexicográfica tries multivia tries binárias.
Introdução a Árvores e Árvores Binárias
1 de outubro de Árvores de Busca e Árvores AVL Parte 1 Katia Guimarães.
Prof. Daniel Morais dos Reis
Árvores (introdução) Anjolina Grisi de Oliveira Obs: vários slides foram cedidos por Adolfo Almeida Duran (UFBA)
Á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 Introdução a Árvores - Conceitos - Árvores Binárias - Métodos e algoritmos de percurso - Métodos e algoritmos de balanceamento.
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
Transcrição da apresentação:

Robson Godoi / Sandra Siebra Estrutura de Dados I Robson Godoi / Sandra Siebra

Árvore

Árvore - Definição Representam um conjunto de elementos (nós) preservando a relação hierárquica entre eles. Formalmente, uma árvore é um conjunto finito T de nós, tais que: Existe um nó que não é subordinado a nenhum outro nó denominado raiz da árvore. Os demais nós (ligados à raiz por arcos/arestas) formam m >= 0 conjuntos disjuntos S1 , S2 , ... , Sm , onde cada um destes conjuntos é uma sub-árvore.

Árvore - Utilidade Árvores são úteis na descrição de qualquer estrutura que envolve hierarquia, como os exemplos: Hierarquia de cargos numa empresa; Precedência de operações em expressões; Análise sintática de textos, Ontologias, etc.

Árvore (Conceitos) RAIZ FOLHAS Os nós subordinados a um nó e ligados a ele por um arco são denominados os filhos daquele nó (pai). Os nós subordinados a um nó são irmãos entre si. O número de filhos (sub-árvores) de um nó é o grau daquele nó. Um nó de grau zero é chamado folha ou nó terminal (nó sem filhos). O nível de um nó é a distância daquele nó até a raiz (número de arcos que devem ser percorridos). O nível da raiz é ZERO. A altura ou profundidade de uma arvore é definida pelo nível mais alto da árvore acrescido de um ou o número de nós do maior ramo. Os ancestrais de um nó são os nós existentes entre a raiz e o próprio nó. RAIZ FOLHAS

Árvore (Exemplo) a d b c e f h j i k g l m Na árvore abaixo: A: raiz da árvores; B, C, D, E, H: raízes de sub-árvores F, G, I, J, K, L, M: folhas B, C, D: irmãos, filhos de A E, F: irmãos, filhos de B e k j a d b f l c g i h m

Árvore Binária (Conceitos) São estruturas do tipo Árvore, onde há um conceito de ordem e o grau de cada nó é menor ou igual a dois, ou seja, cada nó tem, no máximo, dois filhos. As sub-árvores são identificadas como a da Esquerda e a da Direita. Árvore binária é um tipo de árvore. A B A) Duas árvores iguais B) Duas árvores binárias diferentes

Árvore Binária (Conceitos) As árvores binárias podem ser: Árvore estritamente binária: é uma árvore binária em que cada nó possui 0 ou 2 filhos. Árvore binária completa: é uma árvore binária cujo o maior nível é o d e onde cada folha da árvore deve estar neste nível (d) ou no nível d-1. Árvore binária cheia: é uma árvore estritamente binária com profundidade d em que todas as folhas estão no nível d.

Árvore Binária (Conceitos) Exemplos dos casos anteriores (A) (B) (C)

Árvore Binária (Percurso ou Caminhamento) Uma operação comum é percorrer uma árvore binária, seja simplesmente para imprimir o valor de seus elementos ou para localizar um determinado elemento. No entanto não existe uma ordem natural de percurso em uma árvore. Sendo assim, são definidos três métodos de percurso: Pré-Ordem (pré-fixado) Em Ordem (central) Pós-Ordem (pós-fixado) Sendo esses métodos normalmente definidos recursivamente.

Pré-ordem (Pré-fixada) Percurso em Pré-Ordem Se árvore estiver vazia então fim. Visitar o nó raiz. Percorrer a sub-árvore esquerda, em pré-ordem Percorrer a sub-árvore direita, em pré-ordem. Procedure PreOrdem(N:pont); Begin If (N <> nil) then begin Processa (N); {Ex:imprimir} PreOrdem (N^.esq); PreOrdem (N^.dir); end;

Em Ordem (Central) Percurso Em Ordem Se árvore estiver vazia então fim. Percorrer a sub-árvore esquerda, em ordem simétrica Visitar o nó raiz. Percorrer a sub-árvore direita, em ordem simétrica. Procedure EmOrdem(N:pont); Begin If (N <> nil) then begin EmOrdem (N^.esq); Processa (N); {Ex:imprimir} EmOrdem (N^.dir); end;

Pós-ordem (Pós-fixada) Percurso em Pós-Ordem Se árvore estiver vazia então fim. Percorrer a sub-árvore esquerda, em pós-ordem. Percorrer a sub-árvore direita, em pós-ordem. Visitar o nó raiz. Procedure PosOrdem (N:pont); Begin If (N <> nil) then begin PosOrdem (N^.esq); PosOrdem (N^.dir); Processa(N); {Ex:imprimir} end;

Árvore Binária - Exercício Qual o arranjo dos nó da árvore ao lado, obtido ao percorrê-la em: Pré-ordem Ordem simétrica Pós-ordem Responda e justifique sua resposta: A árvore acima é uma árvore estritamente binária? A árvore acima é uma árvore binária completa? A árvore acima é uma árvore binária cheia? Quais os nós folhas? Qual o nível de cada nó? Qual a profundidade da árvore? Liste os ancestrais dos nós B, H e F.

Árvore Binária de Busca (ABB) Árvores binárias organizadas para facilitar a busca de elementos Característica: chaveEsq < chaveRaiz < chaveDir D F E G B A C

Árvore Binária de Busca (ABB) Definição da Estrutura de Dados type ponteiro = ^no; registro = record nome : string [40]; idade : integer; salario : real; end; no = record dado : registro; dir, esq : ponteiro; TArvore = record raiz : ponteiro; var A : TArvore;

Árvore Binária de Busca (ABB) Operações sobre ABB Criar arvore vazia Destruir a arvore Verificar se a arvore está vazia Inserir Pesquisar Alterar Excluir Percurso ou Caminhamento

AAB - Criar / Destruir procedure Criar (var a:TArvore); begin a.raiz :=NIL; end; procedure Destruir (var a:TArvore); if (a <> nil) then Destruir (a^.esq); Destruir (a^.dir); Dispose (a); a := nil;

AAB - Vazia function Vazia (a:TArvore):boolean; begin if (a.raiz=NIL) then Vazia := TRUE else Vazia := FALSE; end; OU Vazia := (a.raiz = nil);

AAB - Inserir function Inserir (var raiz: ponteiro; dadoaux : registro): ponteiro; begin Inserir := nil; if raiz = nil then new (raiz); raiz^.dado := dadoaux; raiz^.esq := nil; raiz^.dir := nil; Inserir := raiz; end else begin if dadoaux.nome < raiz^.dado.nome then Inserir := Inserir (raiz^.esq, dadoaux); if dadoaux.nome > raiz^.dado.nome then Inserir := Inserir (raiz^.dir, dadoaux) end;

AAB - Pesquisar function Pesquisar ( raiz: ponteiro; dadoaux : registro): ponteiro; begin if raiz = nil then Pesquisar := nil else if raiz^.dado.nome = dadoaux.nome then Pesquisar := raiz if raiz^.dado.nome < dadoaux.nome then Pesquisar := Pesquisar(raiz^.dir,dadoaux) Pesquisar := Pesquisar(raiz^.esq,dadoaux); end;

AAB - Alterar function Alterar (var raiz: ponteiro; dadoaux : registro): ponteiro; begin if raiz = nil then Alterar := nil else if raiz^.dado.nome = dadoaux.nome then raiz^.dado := dadosaux; Alterar := raiz; end else begin if raiz^.dado.nome < dadoaux.nome then Alterar := Alterar(raiz^.dir,dadoaux) Alterar := Alterar(raiz^.esq,dadoaux); end;

AAB – Alterar (Alternativa) function Alterar (var raiz: ponteiro; dadoaux : registro): ponteiro; var no : ponteiro; begin no := Pesquisar (raiz, dadoaux); if no <> nil then no^.dado := dadosaux; end; Alterar := no;

AAB – Excluir Para excluir um nó de uma árvore deve-se levar em consideração que seus filhos devem continuar na árvore e esta deverá continuar ordenada (menor a esquerda e maior a direita). Então temos três possibilidades que devem ser tratadas separadamente, afim de manter intacta a estrutura da árvore binária de busca. Excluir nó que: Não tenha filhos (folha): Exclui o nó. Tenha somente um dos filhos (esquerdo ou direito): Substitui o nó por seu filho. Tenha dois filhos: Substitui o nó por outro escolhido, seguindo um dos critérios: O menor dos maiores. O maior dos menores.

AAB – Excluir procedure Remover (var raiz : ponteiro; dadoaux : integer); var ptr : ponteiro; begin if raiz <> nil then begin if raiz^.dado = dadoaux then if raiz^.esq = nil then ptr := raiz; raiz := raiz^.dir; dispose(ptr); end else if raiz^.dir = nil then ptr := raiz; raiz := raiz^.esq; else Substituir(raiz,raiz^.dir); if raiz^.dado < dadoaux then RemoveRaiz(raiz^.dir,dado) RemoveRaiz(raiz^.esq,dado); end;

AAB – Excluir Substitui o nó a ser excluído por outro escolhido seguindo um critérios do Menor dos Maiores. procedure Substituir ( raiz : ponteiro; var sucessor : ponteiro); var ptr : ponteiro; begin if sucessor^.esq = nil then raiz^.dado := sucessor^.dado; ptr := sucessor; sucessor := sucessor^.dir; dispose(ptr); end else Substituir(raiz,sucessor^.esq); end;

Degeneração (ABB) Diferenças muito grande de alturas entre sub-àrvores de um nó causando a perda de eficiência. D B F G I M

Árvore Balanceada É perfeitamente balanceada, quando para qualquer nó, as suas sub-árvores tem a mesma altura. Nem sempre é possível esta precisão, permitindo um nível de diferença. D D B F B F A C E G A C E G H

Técnicas de Balanceamento Estático : Baseia-se na reorganização total dos elementos da árvore em um momento apropriado. Dinâmico : À medida que os elementos são inseridos, a árvore vai sendo balanceada, obrigando uma reorganização de seus elementos.

Balanceamento Estático Construção de um array com todos os elementos da árvore através de um percurso em ordem simétrica. Leitura do array de forma semelhante a pesquisa binária para a construção de uma nova árvore balanceada. D F G B I M

Balanceamento Estático procedure CarregaArray (raiz: ponteriro; arr : ArrayNo; ind : Integer); begin if (raiz <> nil) then CarregaArray (raiz^.esq, arr, ind); Inc (ind); arr [ind] := raiz^.dado; CarregaArray (raiz^.dir, arr, ind); end;

Balanceamento Estático procedure CarregaArvore (raiz : ponteiro; arr : ArrayNo; Ini, Fim : integer); var Med : integer; No : ponteiro; begin if (Ini > Fim) then Exit; end else Med := ((Fim - Ini) div 2) + Ini; No := Insere (raiz, arr [Med]); No^.Esq := CarregaArvore (No, arr, Ini,(Med-1)); No^.Dir := CarregaArvore (No, arr, (Med+1), Fim); end;

Balanceamento Dinâmico (AVL) Conceito menos rigoroso sobre o balanceamento, introduzido em 1962 por dois matemáticos russos (Adelson e Landis). Uma árvore é considerada balanceada se para qualquer nó da árvore, as alturas das sub-árvores à esquerda e à direita diferem de no máximo de 1. Esta diferença é chamada de fator de balanceamento: FatBal(n) <= -1, significa que a altura da árvore à esquerda de n é maior que à da direita FatBal(n) >= +1, significa que a altura da árvore à esquerda de n é menor que à da direita FatBal(n) = 0, significa que a altura da árvore à esquerda de n é igual à da direita -1 +1 -1 +1

Balanceamento Dinâmico (AVL) Após a inserção de um novo nó deve-se recalcular os fatores de balanceamento. Se houve para um dado nó |FatBal(n)| > 1 então deve-se rebalancear a árvores através do roteamento dos nós. Neste processo temos dois nós muitos importantes: A: Nó ancestral mais próximo do nó inserido com FatBal (n) <> 0 antes da inserção. B: Filho de A na sub-árvore onde ocorreu a inserção Exemplo : Inserindo 20 e 10. 20 -1 10

Balanceamento Dinâmico (AVL) Exemplo : Inserindo 5. 20 20 -1 10 -2 A 10 10 5 20 -1 B 5 Exemplo : Inserindo 30. 10 10 +1 5 20 5 20 +1 30

Balanceamento Dinâmico (AVL) Exemplo : Inserindo 25. 10 +2 10 +1 5 20 +2 A 5 20 +1 A 30 -1 B 30 0 B 25 10 +2 10 +1 5 20 +2 A 5 25 25 +1 B 20 30 30

Balanceamento Dinâmico (AVL) Exemplo : Inserindo 27. 10 +2 A 10 +1 5 25 +1 B 5 25 20 30 -1 20 30 27 25 +1 10 -1 30 5 20 27

Balanceamento Dinâmico (AVL) Exemplo : Inserindo 28. 25 +1 25 +1 10 30 -2 A 10 30 -1 5 20 27 +1 B 5 20 27 28 25 10 28 5 20 27 30