- UNIVERSIDADE DO VALE DO RIO DOS SINOS CENTRO DE CIÊNCIAS EXATAS E TECNOLÓGICAS (C6/6) Curso: Informática



Documentos relacionados
- UNIVERSIDADE DO VALE DO RIO DOS SINOS CIÊNCIAS EXATAS E TECNOLÓGICAS Curso: Informática / Ciência da Computação

- UNIVERSIDADE DO VALE DO RIO DOS SINOS CIÊNCIAS EXATAS E TECNOLÓGICAS Curso: Informática / Ciência da Computação

Árvores AVL. Prof. Othon M. N. Batista Estrutura de Dados

Árvores Binárias Balanceadas

Árvores Balanceadas. Árvore binária completamente balanceada. Ocorre quando a árvore está cheia ou quase cheia com o nível n-1 completo

- UNIVERSIDADE DO VALE DO RIO DOS SINOS CENTRO DE CIÊNCIAS EXATAS E TECNOLÓGICAS (C6) Curso: Informática

Árvore Binária de Busca

Algoritmos e Estruturas de Dados: Árvore Binária de Busca

Pesquisa em Memória Primária. Prof. Jonas Potros

PROGRAMAÇÃO II 4. ÁRVORE

Aula T20 BCC202 Pesquisa (Parte 2) Árvores de Pesquisa. Túlio Toffolo

1. Introdução Definição Conceitos relacionados... 2

- UNIVERSIDADE DO VALE DO RIO DOS SINOS CIÊNCIAS EXATAS E TECNOLÓGICAS Curso: Informática / Ciência da Computação

Árvores Binárias de Busca

EAD Árvore - representação usando listas ligadas

INF1007: Programação 2 10 Árvores Binárias. (c) Dept. Informática - PUC-Rio 1

Árvores Binárias de Busca

Árvore Binária de Busca. Algoritmos e Estrutura de Dados II. Operações Busca e Sucessor. Árvore Binária de Busca. Árvores Rubro-Negras

EAD Árvore árvore binária

Estruturas de Dados. Árvores AVL. Cesar Tadeu Pozzer. Curso de Ciência da Computação UFSM (12/12/2007)

Árvores Binárias e Busca. Jeane Melo

INF 1007 Programação II

Pesquisa em Memória Primária. Prof. Jonas Potros

Classificação e Pesquisa de Dados

Estrutura de Dados. Introdução a Ponteiros. Prof. Gerson Borges Estrutura de Dados I 1

Árvores e Árvores Binárias

Mo:vação. Árvore AVL. Caracterís:cas. Origem. Exemplo. Exercício 1 Qual é a altura dos nodos 50 e 44?

INF PROGRAMAÇÃO II LISTA DE EXERCÍCIOS 15

PROGRAMAÇÃO II 3. PILHA DINÂMICA

Árvores binárias de pesquisa com balanceamento. Algoritmos e Estruturas de Dados II

1: unit ArvAVL; 2: { Unit que implementa uma arvore AVL } 3: interface 4: 5: type 6: Tipo_da_Chave = longint; 7: Tipo_do_Dado = record 8: Chave :

Algoritmos e Estruturas de Dados 2

Busca. Pesquisa sequencial

Linguagem C: Árvores Binarias

CT-234. Análise de Algoritmos e Complexidade Estrutural. Carlos Alberto Alonso Sanches

BC1424 Algoritmos e Estruturas de Dados I. Aula 16: Árvores (introdução) Prof. Jesús P. Mena-Chalco. jesus.mena@ufabc.edu.br

ALGORITMOS E ESTRUTURAS DE DADOS CES-11 CES-11 CES-11

Estruturas de Dados. Prof. Gustavo Willam Pereira Créditos: Profa. Juliana Pinheiro Campos

Métodos Computacionais. Árvores

Estrutura de Dados Pilha (Stack)

ÁRVORES BINÁRIAS DE PESQUISA

ESTRUTURAS DE DADOS. prof. Alexandre César Muniz de Oliveira. 1. Introdução 2. Pilhas 3. Filas 4. Listas 5. Árvores 6. Ordenação 7. Busca 8.

Filas. A ordem de saída corresponde diretamente à ordem de entrada dos elementos. Fila de caixa bancário

Programando Jogos com Delphi (LÓGICA, ANIMAÇÃO, CONTROLE) Autor: Antônio Sérgio de Sousa Vieira

Pesquisa Sequencial e Binária

Estruturas de Dados I

Algoritmos e Estruturas de Dados: Árvore Binária

Podemos agora ver no IDE do Morfik os objetos que já incorporamos ao nosso projeto :

IFTO TÉCNICO EM INFORMÁTICA DESENVOLVIMENTO DE SISTEMAS AULA 01

FUNDAÇÃO EDUCACIONAL DE ITUIUTABA

PROGRAMAÇÃO II 3. FILA DINÂMICA

Conjunto (set) O tipo estruturado set representa, em Pascal, um conjunto de objectos de um dado tipo;

Algoritmos e Estrutura de Dados III. Árvores

Árvores AVL e Árvores B. Jeane Melo

Árvores Binárias. Observação: Material elaborado a partir do material do Professor Marcos Costa.

Algoritmos e Estruturas de Dados

Árvores Trie e Patricia. Márcio Bueno ed2tarde@marciobueno.com / ed2noite@marciobueno.com

Gerenciador de Congressos de Iniciação Científica Manual de Instruções

;(define conta-folhas ; (lambda ( ) ; (cond ; ( ( ) ) ; ( (and ) ) ; ( else ; ) ) ))

1. Estrutura de seleção. Seleção: algumas etapas (passos) do algoritmo são executadas dependendo do resultado de uma condição

Display de 7. PdP. Autor: Tiago Lone Nível: Básico Criação: 16/12/2005 Última versão: 18/12/2006. Pesquisa e Desenvolvimento de Produtos

2ª Lista de Exercícios

TRABALHO PRÁTICO Nro. 02 (Atualizado em 29/10/2008)

Algoritmos e Estrutura de Dados. Aula 13 Estrutura de Dados: Árvores de Pesquisa Binária Prof. Tiago A. E. Ferreira

BUSCA EM LISTAS LISTAS SEQÜENCIAIS, LISTAS SIMPLESMENTE E DUPLAMENTE ENCADEADAS E LISTAS CIRCULARES

7. ESTRUTURAS DE DADOS ESTÁTICAS E DINÂMICAS

Satélite. Manual de instalação e configuração. CENPECT Informática cenpect@cenpect.com.br

Árvores - Introdução (1)

FACULDADE CAMPO LIMPO PAULISTA MESTRADO EM CIÊNCIA DA COMPUTAÇÃO. Projeto e Análise de Algoritmos II Lista de Exercícios 2

{ fazer Pós-Ordem sem recursividade. Poderá cair na prova!!! }

Complexidade de Algoritmos

AMBIENTE. FORMULÁRIO: é a janela do aplicativo apresentada ao usuário. Considere o formulário como a sua prancheta de trabalho.

Visualizando relatórios pelo NeoNews Player. Documentação para Usuário Final

Arquivos. Em relação ao Scilab, existem alguns tipos de arquivos que podem ser lidos, criados ou modificados.

MANUAL DO USUÁRIO WEB SIGAP - SISTEMA GESTOR DE ATENDIMENTOS E PROCESSOS

Geração de código intermediário. Novembro 2006

Árvores Binárias - continuação

QUALIFICAÇÃO TÉCNICA EM DESENVOLVIMENTO DE SISTEMAS

10) REGISTROS : Exemplos: var N,I: integer; A,B,C: real; CHAVE: boolean; CARAC: char; V: array[1..20] of real; M: array[1..10,1..

ESTRUTURA DE DADOS PILHA

Pesquisa em Memória Primária. Algoritmos e Estruturas de Dados II

JSP - ORIENTADO A OBJETOS

Representação de Algoritmos - Linguagens de Programação

Pedro Vasconcelos DCC/FCUP. Programação Funcional 15 a Aula Árvores de pesquisa

TIPOS ABSTRATOS DE DADOS DEFINIÇÃO E EXEMPLOS. Bruno Maffeo Departamento de Informática PUC-Rio

Árvore B UNITINS ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 3º PERÍODO 43

26/08/2013. Árvore. Árvore. Árvore. Floresta :: Exemplo. Floresta ÁRVORES

Aula 16: Pesquisa em Memória Primária - Árvores AVL. Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP

Capítulo 19. Algoritmos de Ordenação e de Pesquisa. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Árvores Rubro-Negras. Árvores Rubro-Negras. (Vermelho-Preta) Estrutura da Árvore. Estrutura da Árvore

Manual do Utilizador

UNIVERSIDADE DE SÃO PAULO ICMC SCC 202 Algoritmos e Estrutura de Dados I - 2º Semestre 2010 Profa. Sandra Maria Aluísio;

Árvores AVL (Balanceadas) Profª.Drª. Roseli Ap. Francelin Romero Fonte: Profa. Patrícia Marchetti Revisão: Gedson Faria

Nesta aula serão apresentados alguns comandos de condição, repetição e gráficos.

Estruturas de Dados Árvores

UNIVERSIDADE FEDERAL DO VALE DO SÃO FRANCISCO UNIVASF SECRETARIA DE TECNOLOGIA DA INFORMAÇÃO STI COORDENAÇÃO DE DESENVOLVIMENTO DE SISTEMAS

Estruturas de Dados Aula 15: Árvores 17/05/2011

Índice. Capítulo 2 Estrutura de Dados sequencial com armazenamento sequencial

Métodos de Pesquisa em Memória Primária

Transcrição:

Laboratório I Prof. Osório Balanceamento de Árvores Binárias Pag.: - UNIVERSIDADE DO VALE DO RIO DOS SINOS CENTRO DE CIÊNCIAS EXATAS E TECNOLÓGICAS (C6/6) Curso: Informática LABORATÓRIO II AULA : Balanceamento de Árvore Binárias Disciplina: Linguagem de Programação PASCAL Professor responsável: Fernando Santos Osório Semestre: 99/ Horário: e 4 E-mail: osorio@exatas.unisinos.br Web: http://www.inf.unisinos.br/~osorio/lab.html Xerox : Pasta 4 LAB. II (Xerox do C6/6) ÁRVORES BINÁRIAS DE PESQUISA Balanceamento Árvores AVL Uma árvore binária balanceada é aquela em que dado um nodo qualquer da árvore a sua subárvore à esquerda possui uma altura igual (ou no máximo um nível superior ou inferior) em relação a sua subárvore à direita. Dois conceitos importantes são: altura de um certo nodo, e o fator de balanceamento (diferença entre a altura da subárvore esquerda em relação a subárvore direita). Exemplos: BALANCEADA NÃO BALANCEADA / DEGENERADA FB: - 8 8 7 9 9 FB (Nodo) := Altura ( Nodo^.ArvEsq ) Altura ( Nodo^.ArvDir); Se FB = 0 ou FB = ou FB = - Então este nodo está BALANCEADO Senão este nodo está DESBALANCEADO Rotina recursiva de cálculo da altura de um nodo qualquer:

Laboratório I Prof. Osório Balanceamento de Árvores Binárias Pag.: Function Altura (Nodo: Ptr_Nodo_AB):Integer; Alt_Esq, Alt_Dir : Integer; If Nodo = NIL Then Altura := - Else Alt_Esq := Altura (Nodo^.ArvEsq); Alt_Dir := Altura (Nodo^.ArvDir); If Alt_Esq > Alt_Dir Then Altura := + Alt_Esq Else Altura := + Alt_Dir; As árvores AVL, cujo nome foi obtido a partir das iniciais de seus criadores russos Adel son-vel skii e Landis, são uma implementação de um algoritmo para a criação de árvores binárias balanceadas. A inserção de nodos nas árvores AVL é realizada através de uma rotina como a que segue: Procedure Insere_AVL( Raiz: Ptr_Nodo_AB; Dado: Tipo_Dado); Pivo, Novo : Ptr_Nodo_AB; Novo := Insere_ArvBin (Raiz, Dado); Pivo := Acha_Pivo (Novo); If Pivo <> NIL Then Balancear_AVL (Raiz, Pivo); Insere_ArvBin => Inserção em árvore binária ordenada. É mesma rotina que já foi estudada anteriormente, apenas com a diferença que esta rotina devolve um ponteiro para o novo nodo que foi inserido. Acha_Pivo => Acha um nodo pivô da árvore que esteja desbalanceado, ou retorna NIL. Calcula a diferença das alturas, determinando o FB, se FB < - ou FB > + é ele! Function Acha_Pivo(Nodo: Ptr_Nodo_AB):Ptr_Nodo_AB; Ptr : Ptr_Nodo_AB; Ptr := Nodo; While (Ptr <> NIL) And (abs(altura(ptr^.arvdir) Altura(Ptr^.ArvEsq)) < ) Do Ptr := Ptr^.Pai; Acha_Pivo := Ptr; Balancear_AVL => Realiza o balanceamento da árvore que consiste basicamente em realizar rotações dos nodos da árvore (de acordo com o tipo de caso em que se encontra vide mais abaixo).

Laboratório I Prof. Osório Balanceamento de Árvores Binárias Pag.: BALANCEAMENTO DE ÁRVORES AVL: Uma vez que foi detectado o desbalanceamento da árvore após uma inserção, e que foi determinado o nodo pivô (onde o valor absoluto de FB é maior que ), passamos para a realização do procedimento de balanceamento da árvore. Este procedimento consiste primeiramente de determinar em qual dos seguintes tipos de casos nos enquadramos: Tipo I : Se a subárvore esquerda é maior que a subárvore direita (FB > ) E a subárvore esquerda desta subárvore esquerda é maior que a subárvore direita dela Então realizar uma rotação simples para a direita; FB: FB: NIL Altura: - Procedure Rot_Dir ( Raiz:Ptr_Nodo_AB; Pivo: Ptr_Nodo_AB); Tipo II : Se a subárvore esquerda é maior que a subárvore direita (FB > ) E a subárvore esquerda desta subárvore esq. é menor ou igual que a subárvore direita Então realizar uma rotação dupla para a direita; FB: FB: FB: Procedure Rot_Dupla_Dir ( Raiz: Ptr_Nodo_AB; Pivo: Ptr_Nodo_AB); Rot_Esq (Raiz, Pivo^.ArvEsq); Rot_Dir(Raiz, Pivo);

Laboratório I Prof. Osório Balanceamento de Árvores Binárias Pag.: 4 Tipo III: Se a subárvore esquerda é menor que a subárvore direita (FB < -) E a subárvore direita desta subárvore direita é maior que a subárvore esquerda dela Então realizar uma rotação simples para a esquerda; FB: - NIL Altura: - Procedure Rot_Esq ( Raiz:Ptr_Nodo_AB; Pivo: Ptr_Nodo_AB); Tipo IV: Se a subárvore esquerda é menor que a subárvore direita (FB < -) E a subárvore direita desta subárvore direita é menor que a subárvore esquerda dela Então realizar uma rotação dupla para a esquerda; FB: - 7 8 8 7 9 9 Procedure Rot_Dupla_Esq ( Raiz: Ptr_Nodo_AB; Pivo: Ptr_Nodo_AB); Rot_Dir (Raiz, Pivo^.ArvDir); Rot_Esq(Raiz, Pivo); MATERIAIS COMPLEMENTARES: http://www.inf.unisinos.br/~marcelow/ensino.html http://www.inf.unisinos.br/~anibal/ (Lab. II) (Prog. II)

Laboratório I Prof. Osório Balanceamento de Árvores Binárias Pag.: EXERCÍCIOS Árvores AVL. Faça um programa para a criação de árvores AVL (inserção ordenada/balanceada e exibição dos dados). Crie as seguintes rotinas genéricas de manipulação de dados: Definições elementares: Type Tipo_Dado Ptr_Nodo_AB Nodo_Arv_Bin Rotinas: = Integer; = ^Nodo_Arv_Bin; = Record Dado: Tipo_Dado; Pai: Ptr_Nodo_AB; ArvEsq, ArvDir: Ptr_Nodo_AB; Altura: Integer; { Opcional } { Inicializa a árvore binária ordenada do tipo AVL } Procedure Inicializa_AVL ( Raiz: Ptr_Nodo_AB); { Calcula a altura dos nodos de uma árvore } Function Altura (Raiz: Ptr_Nodo_AB): Integer; { Acha o pivô nodo desbalanceado que vai sofrer o balanceamento } Function Acha_Pivo (Nodo: Ptr_Nodo_AB): Ptr_Nodo_AB; { Insere um dado na árvore binária ordenada, retorna o ponteiro para o nodo inserido } Function Insere_ArvBin ( Raiz: Ptr_Nodo_AB; Dado: Tipo_Dado): Ptr_Nodo_AB; { Rotação simples a esquerda em um nodo pivô de uma árvore tipo AVL } Procedure Rot_Esq ( Raiz, Pivo: Ptr_Nodo_AB); { Rotação simples a direita em um nodo pivô de uma árvore tipo AVL } Procedure Rot_Dir ( Raiz, Pivo: Ptr_Nodo_AB); { Rotação dupla a esquerda em um nodo pivô de uma árvore tipo AVL } Procedure Rot_Dupla_Esq ( Raiz, Pivo: Ptr_Nodo_AB); { Rotação dupla a direita em um nodo pivô de uma árvore tipo AVL } Procedure Rot_Dupla_Dir ( Raiz, Pivo: Ptr_Nodo_AB); { Insere um dado na árvore AVL, retorna o ponteiro para o nodo inserido } Procedure Balancear_AVL ( Raiz, Pivo: Ptr_Nodo_AB); { Insere um dado na árvore AVL, realiza o balanceamento se necessário } Function Insere_AVL ( Raiz: Ptr_Nodo_AB; Dado: Tipo_Dado); { Exibe o conteúdo (dados) da árvore AVL de modo hierárquico na tela } Procedure Exibe_AVL (Raiz: Ptr_Nodo_AB);