INE5408 Estruturas de Dados Árvores Binárias de Busca - Características - Algoritmos - Inserção, deleção e pesquisa.

Slides:



Advertisements
Apresentações semelhantes
TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS ESTRUTURAS DE DADOS AVANÇADAS Aula /08/2011 Professor Leomir J. Borba-
Advertisements


+ Java Web XIV Jornada de Cursos. Você pode: copiar, distribuir, exibir e executar a obra criar obras derivadas fazer uso comercial da obra Sob as seguintes.
Pesquisa em Memória Primária
Algorítmos e estrutura de dados III Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Curso de C/C++ Aula 9 Instrutor: Luiz Felipe Sotero
Árvores Balanceadas Liliane Rose Benning Salgado.
Rotação Simples e Dupla Katia Guimarães
Cc C. G. v. Wangenheim E, se tem pessoas complicadas? [R. Brinkman & R. Kirschner. Dealing With People You Can't Stand. McGrawHill, 1994]
Esquemas L-atribuídos
Centro Educacional Pioneiro
Árvores Binárias Profa. Patrícia A. Jaques Luiz Gonzaga Jr
Estruturas de Dados Aula 15: Árvores
Prof. Hilton Cardoso Marins Junior
Malubarni Apresenta Morrer de Amor Morrer de amor Junto ao teu calor.
Sou de Você E. Book Formatação S ☼ LuNaMaRoSa Textos:
Adriana Libório Fernandes Lins Arthur Cavalcanti Alem Átila Valgueiro Malta Moreira Flavio Juvenal da Silva Júnior Gustavo Cauê Silva.
O Método da Bissecção Prof. Marco Antonio Porto de Alvarenga.
Busca Sequencial Int pseq(int x, int n, int v[]){ for(i=0; i
INE5408 Estruturas de Dados Gerência de Arquivos -Propriedades de Árvores k-D.
Programação para Internet Aula 10 Introdução (Características do BD Relacional e Implementação)
Aula 5 Bioestatística. Estatísticas para uma variável.
José Antônio da cunha IFRN Administração de Banco de Dados.
Introdução POO Thiago Medeiros Sistemas de Informação Definição: Sistemas de Informação é uma combinação de pessoas, dados, processos, redes de.
Investigando o Saber. Profª Renata Lopes  O que é afinal conhecer? Conforme analisa o filósofo norte-americano contemporâneo, Richard Rorty, na concepção.
SECRETARIA DE ESTADO DA EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DIRETORIA DE DESENVOLVIMENTO HUMANO GERÊNCIA DE TECNOLOGIA DE INFORMAÇÕES EDUCACIONAIS E ADMINISTRATIVAS.
J. Rawls Teoria da Justiça (1971). Propõe uma teoria da justiça baseada no conceito duma sociedade ordenada racionalmente com base em princípios de justiça.
INDICADORES SECRETARIA MUNICIPAL DE GESTÃO DE PESSOAS E POLÍTICAS DE RECURSOS HUMANOS Departamento de Desenvolvimento Pessoal e Capacitação Funcional 05/08/2010.
Cálculo Numérico Computacional Prof. Linder Cândido da Silva.
INE5408 Estruturas de Dados Passagem por Referência.
Lazy Evaluation (Avaliação Preguiçosa) Leonardo Lucena – IFRN, 2011 Adaptação das Transparências de Graham Hutton (
4 DE JUNHO DE 2016 A vontade do Filho do Homem Assim também vós, quando fizerdes tudo o que vos for mandado, dizei: Somos servos inúteis, porque fizemos.
INE5408 Estruturas de Dados Complexidade de Algoritmos - Complexidade de tempo - Interpretação da complexidade de tempo - Cálculo da complexidade de tempo.
EMPRESARIAL III Aula 10- Nota Promissória. DIREITO EMPRESARIAL AULA 10 NOTA PROMISSÓRIA – AULA 10 EMPRESARIAL III CORRE, GENTE... VAI COMEÇAR A AULA DE.
Gestão da Segurança da Informação e Série ISO/IEC 27000
Prof. Ricardo Lima Filosofia
Introdução ao Terraview AULA com Flávia Feitosa
CURSO BÁSICO DE INFORMÁTICA INSTRUTORA: JOSILENE BRAGA
Campus Pau dos Ferros Disciplina de Algoritmos Prof. Demétrios Coutinho INFORMÁTICA BÁSICA Algoritmos de Ordenação.
INE5408 Estruturas de Dados Introdução a Árvores - Conceitos - Árvores Binárias - Métodos e algoritmos de percurso - Métodos e algoritmos de balanceamento.
TÍTULO IV Administração Tributária CAPÍTULO I Fiscalização (...) CAPÍTULO II Dívida Ativa Art A omissão de quaisquer dos requisitos previstos no.
Programação para Internet Aula 12 SQL (Comandos de Consulta ao BD)
Alessandro D. R. Fazenda
Jean Carlo Mendes
Como identificar direitos autorais e licença Creative Commons para disponibilizar artigos de PI no Lume.
Sistemas de Produção Sistema Kanban Prof. Alberto Possetti, Dd
CICLO BÁSICO GEOMETRIA OBJETIVOS Espera-se que o aluno:
Normalização (4FN) Na literatura aparecem outras formas normais, como a forma normal de Boyce/Codd, a 4FN e a 5FN. Destas a única que tem importância na.
EMPRESARIAL III Aula 7- Aval.
INE5408 Estruturas de Dados Árvores B - Estrutura e peculiaridades -Algoritmos de inserção, pesquisa e deleção.
INE5408 Estruturas de Dados Árvores Rubro- Características Algoritmos.
INE5408 Estruturas de Dados Estruturas de Dados básicas utilizando Vetores - Listas.
Lógica de programação Estruturas de seleção Estruturas de repetição Sub-Rotinas 1.
Agenda 1. O Problema das 8 Rainhas 2. Hill Climbing
© 2000 Paulo Adeodato Avaliação de Desempenho de Sistemas Geração de Valores Aleatórios Paulo Adeodato Departamento de Informática Universidade Federal.
PARTE 2 O PROCESSO ESTRATÉGICO: FORMULAÇÃO Título: Administração Estratégica – da competência empreendedora à avaliação de desempenho Autores: Bruno H.
Diagramas de Sequência e Comunicação
Curso de Jornalismo Investigativo: uma capacitação para organizações e ativistas locais Análise e filtro de dados: oficina prática Apresentação baseada.
1 1 Slide Programação Dinâmica Prof. Dr. Alexandre Pereira Salgado Junior.
CONFIABILIDADE NA MANUTENÇÃO Eng° José Wagner Braidotti Junior JWB Engenharia e Consultoria S/C Ltda. Outubro de 2010.
Algoritmos Grupos de Slides No 6. Prof. SIMÃO Estrutura de Repetição “faça até” do until Feito por Prof. Jean Marcelo SIMÃO e revisado por Prof. Luis Alberto.
Aula 5 Prof. Ricardo Teixeira Tecnologia em Mecatrônica Industrial SENAI.
INE5408 Estruturas de Dados Listas Encadeadas - Pilhas encadeadas - Filas encadeadas - Listas duplamente encadeadas.
ORÇAMENTO BASE ZERO.
Árvores Binárias Estruturas de Dados Melissa Marchiani Palone Zanatta.
Métodos de Pesquisa: Seqüencial e Binária
Árvores Binárias de Pesquisa e Balanceamento usando Árvores AVL
INE5408 Estruturas de Dados
Transcrição da apresentação:

INE5408 Estruturas de Dados Árvores Binárias de Busca - Características - Algoritmos - Inserção, deleção e pesquisa

Introdução Árvores (binárias) são muito utilizadas para se representar um grande conjunto de dados onde se deseja encontrar um elemento de acordo com a sua chave. Definição - Árvore Binária de Busca (Niklaus Wirth): “Uma árvore que se encontra organizada de tal forma que, para cada nodo t i, todas as chaves (info) da subárvore à esquerda de t i são menores que (ou iguais a) t i e à direita são maiores que t i ”. Termo em Inglês: Search Tree.

Características Em uma árvore binária de busca é possível encontrar-se qualquer chave existente descendo-se pela árvore: –sempre à esquerda toda vez que a chave procurada for menor do que a chave do nodo visitado; –sempre à direita toda vez que for maior.

Características A escolha da direção de busca só depende da chave que se procura e da chave que o nodo atual possui. A busca de um elemento em uma árvore balanceada com n elementos toma tempo médio < log(n), sendo a busca então O(log n). Graças à estrutura de árvore a busca poderá ser feita com apenas log(n) comparações de elementos.

Exemplo de árvore binária de busca

Algoritmo de busca tNodo* FUNÇÃO busca (chave: tInfo, ptr: *tNodo) início enquanto (ptr ~= NULO E ptr->info ~= chave) faça // Esquerda ou direita. se (ptr->info < chave) então ptr filhoÀDireita senão ptr filhoÀEsquerda; fim se fim enquanto retorne ptr; fim

Algoritmo de inserção tNodo* FUNÇÃO inserção (raiz: *tNodo, info: tInfo) oNovo: *tNodo; início se (info info) então // Inserção à esquerda. se (raiz->filhoÀEsquerda = NULO) então oNovo <- aloque(tNodo); oNovo->info <- info; oNovo->filhoÀEsquerda <- NULO; oNovo->filhoÀDireita <- NULO; raiz->filhoÀEsquerda <- oNovo; senão raiz filhoÀEsquerda, info); fim se senão // Inserção à direita. se (raiz->filhoÀDireita = NULO) então oNovo <- aloque(tNodo); oNovo->info <- info; oNovo->filhoÀEsquerda <- NULO; oNovo->filhoÀDireita <- NULO; raiz->filhoÀDireita <- oNovo; senão raiz filhoÀDireita, info); fim se fim

Algoritmo de inserção tNodo* FUNÇÃO inserção (raiz: *tNodo, info: tInfo) oNovo: *tNodo; início se (info info) então // Inserção à esquerda. se (raiz->filhoÀEsquerda = NULO) então oNovo <- aloque(tNodo); oNovo->info <- info; oNovo->filhoÀEsquerda <- NULO; oNovo->filhoÀDireita <- NULO; raiz->filhoÀEsquerda <- oNovo; senão raiz filhoÀEsquerda, info); fim se senão // Inserção à direita. se (raiz->filhoÀDireita = NULO) então oNovo <- aloque(tNodo); oNovo->info <- info; oNovo->filhoÀEsquerda <- NULO; oNovo->filhoÀDireita <- NULO; raiz->filhoÀDireita <- oNovo; senão raiz filhoÀDireita, info); fim se fim

Algoritmo de inserção tNodo* FUNÇÃO inserção (raiz: *tNodo, info: tInfo) oNovo: *tNodo; início se (info info) então // Inserção à esquerda. se (raiz->filhoÀEsquerda = NULO) então oNovo <- aloque(tNodo); oNovo->info <- info; oNovo->filhoÀEsquerda <- NULO; oNovo->filhoÀDireita <- NULO; raiz->filhoÀEsquerda <- oNovo; senão raiz filhoÀEsquerda, info); fim se senão // Inserção à direita. se (raiz->filhoÀDireita = NULO) então oNovo <- aloque(tNodo); oNovo->info <- info; oNovo->filhoÀEsquerda <- NULO; oNovo->filhoÀDireita <- NULO; raiz->filhoÀDireita <- oNovo; senão raiz filhoÀDireita, info); fim se fim

Algoritmo de inserção tNodo* FUNÇÃO inserção (raiz: *tNodo, info: tInfo) oNovo: *tNodo; início se (info info) então // Inserção à esquerda. se (raiz->filhoÀEsquerda = NULO) então oNovo <- aloque(tNodo); oNovo->info <- info; oNovo->filhoÀEsquerda <- NULO; oNovo->filhoÀDireita <- NULO; raiz->filhoÀEsquerda <- oNovo; senão raiz filhoÀEsquerda, info); fim se senão // Inserção à direita. se (raiz->filhoÀDireita = NULO) então oNovo <- aloque(tNodo); oNovo->info <- info; oNovo->filhoÀEsquerda <- NULO; oNovo->filhoÀDireita <- NULO; raiz->filhoÀDireita <- oNovo; senão raiz filhoÀDireita, info); fim se fim

Algoritmo de inserção tNodo* FUNÇÃO inserção (raiz: *tNodo, info: tInfo) oNovo: *tNodo; início se (info info) então // Inserção à esquerda. se (raiz->filhoÀEsquerda = NULO) então oNovo <- aloque(tNodo); oNovo->info <- info; oNovo->filhoÀEsquerda <- NULO; oNovo->filhoÀDireita <- NULO; raiz->filhoÀEsquerda <- oNovo; senão raiz filhoÀEsquerda, info); fim se senão // Inserção à direita. se (raiz->filhoÀDireita = NULO) então oNovo <- aloque(tNodo); oNovo->info <- info; oNovo->filhoÀEsquerda <- NULO; oNovo->filhoÀDireita <- NULO; raiz->filhoÀDireita <- oNovo; senão raiz filhoÀDireita, info); fim se fim

Algoritmo de inserção tNodo* FUNÇÃO inserção (raiz: *tNodo, info: tInfo) oNovo: *tNodo; início se (info info) então // Inserção à esquerda. se (raiz->filhoÀEsquerda = NULO) então oNovo <- aloque(tNodo); oNovo->info <- info; oNovo->filhoÀEsquerda <- NULO; oNovo->filhoÀDireita <- NULO; raiz->filhoÀEsquerda <- oNovo; senão raiz filhoÀEsquerda, info); fim se senão // Inserção à direita. se (raiz->filhoÀDireita = NULO) então oNovo <- aloque(tNodo); oNovo->info <- info; oNovo->filhoÀEsquerda <- NULO; oNovo->filhoÀDireita <- NULO; raiz->filhoÀDireita <- oNovo; senão raiz filhoÀDireita, info); fim se fim

Algoritmo de inserção tNodo* FUNÇÃO inserção (raiz: *tNodo, info: tInfo) oNovo: *tNodo; início se (info info) então // Inserção à esquerda. se (raiz->filhoÀEsquerda = NULO) então oNovo <- aloque(tNodo); oNovo->info <- info; oNovo->filhoÀEsquerda <- NULO; oNovo->filhoÀDireita <- NULO; raiz->filhoÀEsquerda <- oNovo; senão raiz filhoÀEsquerda, info); fim se senão // Inserção à direita. se (raiz->filhoÀDireita = NULO) então oNovo <- aloque(tNodo); oNovo->info <- info; oNovo->filhoÀEsquerda <- NULO; oNovo->filhoÀDireita <- NULO; raiz->filhoÀDireita <- oNovo; senão raiz filhoÀDireita, info); fim se fim

Exemplo: inserção de um elemento com chave = chave = > 8

Exemplo: inserção de um elemento com chave = chave = > 8 14 < 15

Exemplo: inserção de um elemento com chave = chave = > 8 14 < > 11

Exemplo: inserção de um elemento com chave = chave = > 8 14 < > > 13

Exemplo: inserção de um elemento com chave = chave = > 8 14 < > > 13 ptr = nulo

Exemplo: inserção de um elemento com chave = chave = > 8 14 < > > 13 14

Algoritmo de deleção A deleção é mais complexa do que a inserção. A razão básica é que a característica organizacional da árvore não deve ser quebrada: –a subárvore da direita de um nodo não deve possuir chaves menores do que o pai do nodo eliminado; –a subárvore da esquerda de um nodo não deve possuir chaves maiores do que o pai do nodo eliminado. Para garantir isso, o algoritmo de deleção deve remanejar os nodos.

Exemplo: deleção do nodo com chave =

Exemplo: deleção do nodo com chave =

Deleção em uma árvore de busca binária Se o nodo possuir somente uma subárvore filha: –podemos simplesmente mover esta subárvore toda para cima; –o único sucessor do nodo a ser excluído será um dos sucessores diretos do pai do nodo a ser eliminado; –se o nodo a ser excluído é filho esquerdo de seu pai, o seu filho será o novo filho esquerdo deste e vice-versa.

Exemplo: deleção do nodo com chave =

Exemplo: deleção do nodo com chave =

Exemplo: deleção do nodo com chave =

Deleção em uma árvore de busca binária Se o nodo possuir duas subárvores filhas: –se o filho à direita não possui subárvore esquerda, é ele quem ocupa o seu lugar; –se possuir uma subárvore esquerda, a raiz desta será movida para cima e assim por diante; –a estratégia geral (Mark Allen Weiss) é sempre substituir a chave retirada pela menor chave da subárvore direita.

Exemplo: deleção do nodo com chave =

Exemplo: deleção do nodo com chave =

Exemplo: deleção do nodo com chave =

Algoritmo de deleção tNodo* FUNÇÃO delete(info: tInfo, arv: *tNodo) tmp, filho: *tNodo; início se (arv = NULO) então retorne arv senão se (info info) // Vá à esquerda. arv->filhoÀEsquerda filhoÀEsquerda); retorne arv; senão se (info > arv->info) // Vá à direita. arv->filhoÀDireita filhoÀDireita); retorne arv; senão // Encontrei elemento que quero deletar. (CONTINUA)

Algoritmo de deleção (CONTINUAÇÃO) se (arv->filhoÀDireita ~= NULO E arv->filhoÀEsquerda ~= NULO) // 2 filhos. tmp filhoÀDireita); arv->info info; arv->filhoÀDireita info, arv->filhoÀDireita); retorne arv; senão // 1 filho. tmp <- arv; se (arv->filhoÀDireita ~= NULO) então // Filho à direita. filho filhoÀDireita; retorne filho; senão se (arv->filhoÀEsquerda ~= NULO) então // Filho à esquerda. filho filhoÀEsquerda; retorne filho; senão // Folha. libere arv; retorne NULO; fim se fim

Problemas com árvores binárias de busca Deterioração: –quando inserimos utilizando a inserção simples, dependendo da distribuição de dados, pode haver deterioração; –árvores deterioradas perdem a característica de eficiência de busca.

Problemas com árvores binárias de busca

Exemplo: inserção de uma série de nomes parcialmente ordenados em uma árvore binária de busca Alberto Aarão Ana Antonio Beatriz Babette Carlos Claudia Clóvis Cesar Davi Denise Daltro Eva Everson Gerson Giovana Josi Jaci Xisto Xênia Zenaide

Alberto Aarão Ana Beatriz Babette Claudia César Davi Daltro Denise Eva Everson Gerson Giovana Clóvis Carlos …e assim por diante...

Exercícios Uma árvore é uma estrutura tipicamente recursiva. Nós vimos um algoritmo iterativo para realizar busca. Porque não utilizar um algoritmo recursivo para a busca em uma árvore binária de busca? Elabore um algoritmo recursivo para efetuar uma busca em uma árvore binária de busca pressupondo as estruturas de dados do exemplo anterior. Existe alguma razão para evitarmos algoritmos de busca em árvore recursivos (memória, complexidade, etc)? Justifique.

Exercícios O algoritmo recursivo de inserção em árvore binária de busca apresentado é bastante simples e reflete bem a estrutura da própria árvore. Não será possível também realizar a função deste algoritmo com um algoritmo iterativo? Crie um algoritmo iterativo para a inserção simples em uma árvore binária de busca.

Exercícios Elimine os nodos 3 e 12 da árvore do exemplo de deleção em árvore binária de busca anterior, nesta ordem, a partir da árvore anterior utilizando o algoritmo dado. Mostre o stack a cada chamada recursiva.

Atribuição-Uso Não-Comercial-Compartilhamento pela Licença 2.5 Brasil Você pode: - copiar, distribuir, exibir e executar a obra - criar obras derivadas Sob as seguintes condições: Atribuição — Você deve dar crédito ao autor original, da forma especificada pelo autor ou licenciante. Uso Não-Comercial — Você não pode utilizar esta obra com finalidades comerciais. Compartilhamento pela mesma Licença — Se você alterar, transformar, ou criar outra obra com base nesta, você somente poderá distribuir a obra resultante sob uma licença idêntica a esta. Para ver uma cópia desta licença, visite ou mande uma carta para Creative Commons, 171 Second Street, Suite 300, San Francisco, California, 94105, USA.