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



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

Estruturas de Dados I

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

EAD Árvore árvore binária

Árvores Binárias de Busca

Busca. Pesquisa sequencial

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

EAD Árvore - representação usando listas ligadas

Árvore Binária de Busca

Métodos Computacionais. Árvores

Pesquisa Sequencial e Binária

2ª Lista de Exercícios

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

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

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

Linguagem C: Árvores Binarias

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

INF 1007 Programação II

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

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

Árvores Binárias de Busca

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

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

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

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

Pesquisa digital. Algoritmos e Estruturas de Dados II

Árvores Binárias de Pesquisa Com Balanceamento

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

Árvores Binárias - continuação

PROGRAMAÇÃO II 4. ÁRVORE

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

Programas operam sobre dados. Dados são relacionados e possuem estrutura. Como representar e manipular dados em um computador

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

Organizam dados de forma hierárquica. Acontecem com frequência na natureza. Fáceis de representar e manipular com computadores

DAINF - Departamento de Informática

ÁRVORES ABB (ÁRVORES BINÁRIAS DE BUSCAS) Sérgio Carlos Portari Júnior

Sumário. 5COP096 Teoria da Computação Aula 8 Pesquisa em Memória Primária

Árvores Binárias e Busca. Jeane Melo

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

Árvores Binárias Balanceadas

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

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

Árvore Binária de Busca. Prof. César Melo

Árvores Binárias de Busca (ABB) 18/11

Árvores binárias de busca

Algoritmos e Estrutura de Dados II. Árvore AVL. Prof a Karina Oliveira. Fonte: Prof a Ana Eliza

Árvores & Árvores Binárias

Algoritmos e Estruturas de Dados

Algoritmos e Estrutura de Dados II. Árvore AVL. Prof Márcio Bueno. / Material da Prof a Ana Eliza

Árvores Binária de Busca. Prof. César Melo DCC/ICE/UFAM

ÁRVORES BINÁRIAS DE BUSCA. Vanessa Braganholo Estruturas de Dados e Seus Algoritmos

Pesquisa em Memória Primária Árvores de Busca. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR

Universidade Federal de Mato Grosso Estrutura de Dados II

Árvores. Algoritmos e Estruturas de Dados 2005/2006

Programação II. Árvores Binárias (Binary Trees) Bruno Feijó Dept. de Informática, PUC-Rio

INF 1010 Estruturas de Dados Avançadas

Estrutura de Dados. Carlos Eduardo Batista. Centro de Informática - UFPB

Árvores & Árvores Binárias

Árvores de Pesquisa. A árvore de pesquisa é uma estrutura de dados muito eficiente para armazenar informação.

AED2 - Aula 04 Vetores ordenados e árvores de busca

ÁRVORES BINÁRIAS DE PESQUISA

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

Árvores binárias de busca

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

Aula T19 BCC202 Pesquisa (Parte 1) Pesquisa Binária. Túlio Toffolo

Algoritmos e Estruturas de Dados: Árvore Binária

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

INF 1010 Estruturas de Dados Avançadas. Árvores binárias

Algoritmos e Estrutura de Dados II. Árvore. Prof a Karina Oliveira.

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

Copiar para o ficheiro ArvoreBinaria.h e adaptar as funções associadas às operações sobre árvores binárias (3.1 a 3.12)

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

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

ESTRUTURAS DE DADOS I. Notas de Aula. Prof. Dr. Gilberto Nakamiti

ESTRUTURAS DE DADOS II MSc. Daniele Carvalho Oliveira

Listas (Parte 2) Túlio Toffolo BCC202 Aula 10 Algoritmos e Estruturas de Dados I

Listas Duplamente Encadeadas

struct arv { char info; struct arv* esq; struct arv* dir; };

Árvores Binárias de Busca (ABB) 18/11

AED2 - Aulas 06 e 07 Árvores AVL e rubro-negras

DAS5102 Fundamentos da Estrutura da Informação

ESTRUTURA DE DADOS E ALGORITMOS. Árvores Binárias de Busca. Cristina Boeres

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

DAS5102 Fundamentos da Estrutura da Informação

Árvores Binárias de Busca

Árvores - Introdução (1)

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

Introdução a AVL: teoria e prática. 22/11, 25/11 e 30/11

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

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

Árvores binárias de busca

Árvores. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR

Estruturas (Registros)

Árvores Binárias Balanceadas Estrutura de Dados I

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

Árvores Binárias de Busca

Árvores AVL e Árvores B. Jeane Melo

Prof. Jesus José de Oliveira Neto

Transcrição:

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

Árvores binárias de pesquisa Pior caso para uma busca é O(n) 1 3 Ordem de inserção: 1 3 2 4 5 6 2 4 5 6 2

Árvore completamente balanceada Nós folha (externos) aparecem em no máximo dois níveis diferentes Minimiza o tempo médio de pesquisa Assumindo distribuição uniforme das chaves Problema: manter árvore completamente balanceada após cada inserção é muito caro 3

Árvore completamente balanceada Para inserir a chave 1 na árvore à esquerda e manter a árvore completamente balanceada precisamos movimentar todos os nós 4

Árvores quase balanceadas Objetivo: Funções para pesquisar, inserir e retirar eficientes O(lg(n)) Solução intermediária que mantém a árvore quase balanceada, em vez de tentar manter a árvore completamente balanceada 5

Árvores quase balanceadas Várias formas de definir e construir uma árvore quase balanceada Exemplos de restrições aplicadas a árvores para fazê-las quase balanceadas Fazer que todas as folhas aparecem no mesmo nível Restringir a diferença entre as alturas das subárvores de cada nó Minimizar o comprimento do caminho interno da árvore 8 = 0 + 1 + 1 + 2 + 2 + 2 6

Árvores SBB Uma árvore SBB é uma árvore binária com apontadores verticais e horizontais, tal que: Todos os caminhos da raiz até cada nó externo possuem o mesmo número de apontadores verticais Não podem existir dois apontadores horizontais sucessivos 7

Árvores SBB estrutura #define SBB_VERTICAL 0 #define SBB_HORIZONTAL 1 struct sbb { struct registro reg; struct sbb *esq; struct sbb *dir; int esqtipo; int dirtipo; } 8

Pesquisa em árvore SBB Idêntica à pesquisa em uma árvore de busca binária não balanceada Ignoramos a direção dos apontadores 9

Inserção numa árvore SBB A chave a ser inserida é sempre inserida após o apontador vertical mais baixo na árvore Dependendo da situação anterior à inserção podem aparecer dois apontadores horizontais Inserção do 4, 6, 8, 11? Transformação local para manter as propriedades da árvore SBB 10

Transformações para manter propriedadas da árvore SBB Métodos para reorganizar casos onde aparecem dois ponteiros horizontais consecutivos Esquerda-esquerda (e direita-direita) Esquerda-direita (e direita-esquerda) 11

Transformações para manter propriedadas da árvore SBB - código void ee(struct sbb **ptr) { struct sbb *no = *ptr; struct sbb *esq = no->esq; no->esq = esq->dir; esq->dir = no; esq->esqtipo = SBB_VERTICAL; no->esqtipo = SBB_VERTICAL; *ptr = esq; } esq ptr no 12

Transformações para manter propriedadas da árvore SBB - código void ed(struct sbb **ptr) { struct sbb *no = *ptr; struct sbb *esq = no->esq; struct sbb *dir = esq->dir; esq->dir = dir->esq; no->esq = dir->dir; dir->esq = esq; dir->dir = no; esq->dirtipo = SBB_VERTICAL; no->esqtipo = SBB_VERTICAL; *ptr = dir; } ptr esq dir no 13

Exemplo de inserção em árvore SBB Inserir chaves 7, 10, 5, 2, 4, 9, 3, 6, 5.5 14

Inserção em árvores SBB void iinsere(struct registro reg, struct sbb **ptr, int *incli, int *fim) { if(*ptr == NULL) { iinsere_aqui(reg, ptr, incli, fim); } else if(reg.chave < *ptr->reg.chave) { iinsere(reg, &(*ptr->esq), &(*ptr->esqtipo), fim); if(*fim) return; if(*ptr->esqtipo == SBB_VERTICAL) { *fim = TRUE; } else if(*ptr->esq->esqtipo == SBB_HORIZONTAL) { ee(ptr); *incli = SBB_HORIZONTAL; } else if(*ptr->esq->dirtipo == SBB_HORIZONTAL) { ed(ptr); *incli = SBB_HORIZONTAL; } } else if(reg.chave > (*ptr)->reg.chave) { /* igual acima, só inverte o lado */ } else { printf( erro: chave já está na árvore.\n ); *fim = TRUE; } } 15

Inserção em árvores SBB void iinsere_aqui(struct registro reg, struct sbb **ptr, int *incli, int *fim) { struct sbb *no = malloc(sizeof(struct sbb)); if(!no) { perror(null); exit(exit_failure); } no->reg = reg; no->esq = NULL; no->dir = NULL; no->esqtipo = SBB_VERTICAL; no->dirtipo = SBB_VERTICAL; *ptr = no; *incli = SBB_HORIZONTAL; *fim = FALSE; } 16

Inserção em árvores SBB void insere(struct registro reg, struct sbb **raiz) { int fim = FALSE; int inclinacao = SBB_VERTICAL; iinsere(reg, raiz, &inclinacao, &fim); } void inicializa(struct sbb **raiz) { *raiz = NULL; } 17

Retirada numa árvore SBB Usaremos três procedimentos auxiliares EsqCurto: chamado quando o nó é retirado à esquerda e diminui a altura da árvore DirCurto: chamado quando um nó é retirado à direita e diminui a altura da árvore Antecessor: chamado quando um nó possui dois filhos 18

Retirada em árvore SBB exemplos Retirando 7, 4 e 9: 19

Retirada em árvore SBB exemplos 20

Retirada em árvore SBB exemplos 21

Retirada em árvore SBB exemplos 22

Retirada em árvore SBB exemplos 23

Retirada de árvore SBB código void iretira(struct registro reg, struct sbb **ptr, int *fim) { if(*ptr == NULL) { *fim = TRUE; return; } if(reg.chave < *ptr->reg.chave) { iretira(reg, &(*ptr->esq), fim); if(!(*fim)) { EsqCurto(ptr, fim); } else if(reg.chave > *ptr->reg.chave) { /* igual acima, só inverte o lado. */ } else { /* achou o registro: */ *fim = FALSE; struct sbb *no = *ptr; if(no->dir == NULL) { *ptr = no->esq; free(no); if(*ptr!= NULL) { *fim = TRUE; } } else if(no->esq == NULL) { /* igual acima. */ } } else { antecessor(ptr, &(*ptr->esq), fim); if(!(*fim)) EsqCurto(ptr, fim); } }} 24

Retirada de árvore SBB código void EsqCurto(struct sbb **ptr, int *fim) { if(*ptr->esqtipo == SBB_HORIZONTAL) { *ptr->esqtipo = SBB_VERTICAL; *fim = TRUE; } else if(*ptr->dirtipo == SBB_HORIZONTAL) { struct sbb *dir = *ptr->dir; *ptr->dir = dir->esq; dir->esq = *ptr; *ptr = dir; if(*ptr->esq->dir->esqtipo == SBB_HORIZONTAL) { de(&(*ptr->esq)); *ptr->esqtipo = SBB_HORIZONTAL; } else if(*ptr->esq->dir->dirtipo == SBB_HORIZONTAL) { dd(&(*ptr->esq)); *ptr->esqtipo = SBB_HORIZONTAL; } *fim = TRUE; } else { *ptr->dirtipo = SBB_HORIZONTAL; if(*ptr->dir->esqtipo == SBB_HORIZONTAL) { de(ptr); *fim = TRUE; } else if(/* checa outro lado */) {... } }}} 25

SBBs análise Dois tipos de altura Altura vertical h: conta o número de apontadores verticais da raiz até as folhas Altura k: o número de ponteiros atravessados (comparações realizadas) da raiz até uma folha A altura k é maior que a altura h sempre que existirem apontadores horizontais na árvore Para qualquer árvore SBB temos h k 2h 26

SBBs análise Bayer (1972) mostrou que lg( n + 1) k 2lg( n + 2) 2 Custo para manter a propriedade SBB depende da altura da árvore O(lg(n)) Número de comparações em uma pesquisa com sucesso numa árvore SBB Melhor caso: C(n) = O(1) Pior caso: C(n) = O(lg(n)) Caso médio: C(n) = O(lg(n)) 27

Exercícios Desenhe a árvore SBB resultante da inserção das chaves Q U E S T A O F C I L em uma árvore vazia. Qual o maior número de nós que pode ser armazenado numa árvore SBB com altura h? Dê a lista de inserções que gera a árvore SBB abaixo: 4 6 2 5 8 28