Estruturas de Dados I



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

Busca. Pesquisa sequencial

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

INF 1007 Programação II

Linguagem C: Árvores Binarias

Métodos Computacionais. Árvores

Árvore Binária de Busca

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

Pesquisa Sequencial e Binária

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

EAD Árvore - representação usando listas ligadas

Árvores Binárias de Busca

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

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

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

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

EAD Árvore árvore binária

INF 1010 Estruturas de Dados Avançadas

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

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

Figura 13.1: Um exemplo de árvore de diretório.

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

Árvores Binárias de Busca

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

DAINF - Departamento de Informática

2ª Lista de Exercícios

ÁRVORE BINÁRIA DE BUSCA

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

Árvores. Algoritmos e Estruturas de Dados 2005/2006

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

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

Estruturas de Dados. Módulo 17 - Busca. 2/6/2005 (c) Dept. Informática - PUC-Rio 1

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

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

ÁRVORES BINÁRIAS DE PESQUISA

ESTRUTURAS DE DADOS AVANÇADAS (INF 1010) (a) Seja um TAD definido por uma lista circular implementada em um vetor.

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

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

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

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

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

Árvores binárias de busca

Árvores Binárias - continuação

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

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

Fila de Prioridade. Siang Wun Song - Universidade de São Paulo - IME/USP. MAC Estruturas de Dados

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

Árvores Binárias e Busca. Jeane Melo

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

Árvores binárias de busca

PROGRAMAÇÃO II 4. ÁRVORE

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

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

Métodos Computacionais. Fila

Pesquisa digital. Algoritmos e Estruturas de Dados II

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

ESTRUTURAS DE DADOS II MSc. Daniele Carvalho Oliveira

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

Algoritmos e Estrutura de Dados. Prof. Tiago A. E. Ferreira

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

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

10. Listas Encadeadas

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

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

Algoritmos e Estruturas de Dados 2

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

Algoritmos e Estrutura de Dados III. Árvores

Árvores Estrutura de Dados. Universidade Federal de Juiz de Fora Departamento de Ciência da Computação

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

Árvores AVL e Árvores B. Jeane Melo

Árvores Binárias de Busca

ESTRUTURA DE DADOS DCC013

DAS5102 Fundamentos da Estrutura da Informação

Árvores B + Prof Márcio Bueno. ed2tarde@marciobueno.com / ed2noite@marciobueno.com. Material da Prof a Ana Eliza Lopes Moura

Estruturas de Dados Árvores

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

Trabalho 3: Agenda de Tarefas

/* percorreu todo o vetor e não encontrou elemento */ return -1;

Algoritmos e Estruturas de Dados: Árvore Binária

Árvores Binárias de Busca

struct LISTA item quant

Árvores & Árvores Binárias

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

INF 1007 Programação II

Busca em Memória. Secundária

Árvores Binárias de Busca

Transcrição:

UFES - Curso de verão 2011 Estruturas de Dados I Profa. Juliana Pinheiro Campos jupcampos@gmail.com

Árvores binárias de busca (ou São árvores projetadas para dar suporte a operações de busca de forma eficiente. Árvores binárias de busca combinam as vantagens de 2 estruturas: Vetor ordenado (busca eficiente); Lista encadeada (inserir e remover elementos de forma eficiente). Armazena elementos que tem uma relação de ordem (>, <, =) entre si.

Árvores binárias de busca (ou As árvores binárias de busca possuem uma propriedade fundamental: O valor associado à raiz é sempre maior do que o valor associado a qualquer nó da subárvore à esquerda (sae) e é sempre menor do que o valor associado a qualquer nó da subárvore à direita (sad). Essa propriedade garante que, quando a árvore é percorrida em ordem simétrica (sae, raiz, sad), os valores são encontrados em ordem crescente.

Árvores binárias de busca (ou 6 2 8 Mostre a impressão dos valores da arvore caso fosse utilizada a ordem simétrica. 1 4 1 2 3 4 6 8 3

Árvores binárias de busca (ou Uma variação possível permite que haja repetição de valores na árvore: o valor associado à raiz é sempre maior que o valor associado a qualquer nó da sae, e é sempre menor ou igual ao valor associado a qualquer nó da sad.

Árvores binárias de busca (ou 6 1 2 8 4 Como a busca de um valor pode ser feito nessa árvore? Comparamos o valor buscado com a raiz. Se for igual, encontramos o valor buscado. Se for menor, a busca continua na sae; caso contrario, a busca continua na sad.. 3

Árvores binárias de busca (ou Procedimento Pesquisa para uma árvore binária de busca : Para encontrar um valor x, primeiro compareo com o valor que está na raiz. Se x é menor do que o valor que está na raiz, vá para a sae; se x é maior, vá para a sad. Repita o processo recursivamente, até que o valor procurado seja encontrado ou então um nó folha seja atingido.

Consideramos o caso em que a informação associada a um no é um número inteiro. struct arvore { int info; struct arvore* esq; struct arvore* dir; }; typedef struct arvore Arvore;

As funções que vamos analisar são: Busca: busca um elemento na árvore; Insere: insere um novo elemento na árvore na posição correta para que a propriedade fundamental seja mantida; Retira: retira um elemento da árvore mantendo a propriedade fundamental; As outras funções de árvores são análogas às funções vistas para árvores binárias comuns.

Busca: Arvore* busca(arvore* a, int v){ if(!estavazia(a)) { if (v < a->info) return busca(a->esq, v); else if(v > a->info) return busca(a->dir, v); else return a; } return NULL; }

Inserção: uma subárvore vazia atingida indica o ponto de inserção. Se a árvore for vazia, deve ser substituída por uma árvore cujo único nó contém o valor v; Se a árvore não for vazia, compara v com a raiz e inserimos v na sae ou na sad, conforme o resultado da comparação. É necessário atualizar os ponteiros para as subarvores à esquerda ou à direita, pois a função pode alterar o valor do ponteiro para a raiz da (sub) árvore.

Arvore* insere(arvore* a, int v){ if(a==null){ a = malloc(sizeof(arvore)); a->info = v; a->esq = a->dir = NULL; } else if (v < a->info) a->esq = insere(a->esq, v); else if(v > a->info) a->dir = insere(a->dir, v); } return a;

Remoção: Se a árvore for vazia, nada deve ser feito; Se a árvore não for vazia, compara v com a raiz e retiramos v na sae ou na sad, conforme o resultado da comparação. Ou retira elemento se for encontrado. Existem 3 situações possíveis: Retirar elemento que é folha Quando elemento possui um único filho Quando o elemento a ser retirado possui 2 filhos

ESTRUTURAS DE DADOS Remoção: Retirar elemento que é folha 6 2 8 Como fazer para retirar o nó 3? Basta retirar o elemento da árvore e atualizar o pai. 1 4 X3

Remoção: Quando elemento possui um único filho 6 1 2 8 X4 Como fazer para retirar o nó 4? É necessário acertar o ponteiro do pai, fazendo o único neto ser seu filho direto. Em seguida, retira-se o elemento da árvore. 3

Remoção: Quando o elemento a ser retirado possui 2 filhos. 6 2 8 Como fazer para retirar o nó 6? 1 4 3

Remoção: quando elemento possui 2 filhos Encontramos o elemento que precede o elemento a ser retirado na ordenação (o elemento mais à direita da subárvore a esquerda); Trocamos a informação com o nó encontrado; Retiramos da subárvore à esquerda (recursivamente) o nó encontrado (que agora contém o valor que se quer retirar). 6 2 8 4 2 8 4 2 8 1 4 1 6 1 6 X 3 3 3

Remoção: quando elemento possui 2 filhos O elemento pode ser substituído pelo elemento que o precede na ordenação (o elemento mais à direita da subárvore a esquerda); OU O elemento pode ser substituído pelo elemento que o sucede na ordenação (o elemento mais à esquerda da subárvore a direita);

Operações em árvores binárias de busca Arvore* retira(arvore* a, int v){ if(a==null){ return NULL; } else if (v < a->info) a->esq = retira(a->esq, v); else if(v > a->info) a->dir = retira(a->dir, v); else{ // Achou o elemento que quer remover if(a->esq == NULL && a->dir == NULL){ free(a); a = NULL; } else if(a->esq == NULL){ Arvore *t = a; a = a->dir; free(t); }...

Arvore* retira(arvore* a, int v){... else if(a->dir == NULL){ Arvore *t = a; a = a->esq; free(t); } else{ // Arvore tem os dois filhos Arvore *f = a->esq; while(f->dir!= NULL) f = f->dir; a->info = f->info; f->info = v; a->esq = retira(a->esq, v); } } return a; }

Análise de complexidade da operação de busca O número de comparações em função do número n de elementos na árvore em uma pesquisa com sucesso é: Melhor caso: Pior caso: Caso médio: C(n) = O(1) C(n) = O(n) C(n) = O(log n) Quando o elemento procurado se encontra na raiz. Quando os elementos estão em ordem crescente ou decrescente. Quando o número de elementos na sae e na sad é equilibrado. O tempo de execução dos algoritmos para árvores binárias de pesquisa dependem muito do formato das árvores.

É importante manter as árvores com altura pequena (próximo da altura mínima log n), isto é, manter as árvores com uma distribuição dos nós próxima à da árvore cheia. Escreva um programa que utilize as funções de árvore binária de busca estudadas.