Algorítmos e estrutura de dados III Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.

Slides:



Advertisements
Apresentações semelhantes
LISTAS Dilvan Moreira, parcialmente baseado em material do prof. Ricardo Campello.
Advertisements

Marco Antonio Montebello Júnior
Listas Lineares Estrutura que permite representar um conjunto de dados de forma a preservar a relação de ordem linear. Uma lista linear é composta de nós,
Aula 10 Algoritmos de Busca
Estruturas de Dados Árvores Binárias
Listas encadeadas Prof. Rosana Palazon.
Listas duplamente encadeadas
Programação II Estruturas de Dados
Organização e Recuperação da Informação
Série de Exercícios.
Árvores.

David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
Pesquisa em Memória Primária
Pesquisa em Árvores Digitais
Pesquisa em Memória Primária – Árvores de Busca
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
Pesquisa em Memória Primária – Árvores de Busca
Pesquisa em Memória Primária
Árvores Introdução e Aplicações Árvores de Busca Binária Fundamentos
Métodos de Classificação por Seleção: HeapSort
Estruturas de Dados I Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Estruturas de Dados II Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Listas com Ponteiros Listas encadeadas Listas circulares.
Slides: Prof. João Fabro UTFPR - Curitiba
Slides: Prof. João Fabro UTFPR - Curitiba
Lista Encadeada Circular Lista Duplamente Encadeada
Listas Encadeadas.
Indexação de Arquivos Página de rosto.
Árvores Equilibradas Sumário Splay B-tree Vermelho-Preto AA e BB
Fundamentos sobre Árvores
Algorítmos e estrutura de dados III
Algoritmos e Estruturas de Dados
ALGORITMOS E ESTRUTURAS DE DADOS
exercícios listas encadeadas
Prof. Hilton Cardoso Marins Junior LISTA LINEAR
Listas Encadeadas Raquel O. Prates, Luiz Chaimowicz, Jussara Almeida
Algoritmos e Estruturas de Dados II
Pesquisa em Memória Primária
Árvores binárias de pesquisa com balanceamento
Denise Guliato Faculdade de Computação – UFU
Denise Guliato Faculdade de Computação – UFU
Estruturas de Dados com Jogos
INTELIGÊNCIA ARTIFICIAL
Principais operações em Listas TPA Listas Simples Inserção no Final 1.void insereNofinalDaLista(Lista *l, Elemento e){ 2.Lista paux,p; 3. p.
Árvores Binárias de Pesquisa
Implementação de FILAS com Alocação Dinâmica
Algorítmos e estrutura de dados III
Lista Encadeada Circular Lista Duplamente Encadeada
Algorítmos e estrutura de dados III
Algoritmos e Estrutura de Dados III
Árvores Balanceadas Liliane Rose Benning Salgado.
Rotação Simples e Dupla Katia Guimarães
Listas de Prioridades Em muitas aplicações, dados de uma coleção são acessados por ordem de prioridade A prioridade associada a um dado pode ser qualquer.
Á 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 Disciplina: Estrutura de Dados Professor: Cheli dos S. Mendes da Costa Listas.
Educação Profissional Técnica de Nível Médio Curso Técnico de Informática
Árvores Binárias Profa. Patrícia A. Jaques Luiz Gonzaga Jr
Estruturas de Dados Aula 15: Árvores
– Aula 20 Adaptado por Reinaldo Fortes para o curso de
Aula 10 Algoritmos de Busca
Prof. Hilton Cardoso Marins Junior ÁRVORES BINÁRIAS.
Prof. Hilton Cardoso Marins Junior
Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -
Introdução a Árvores e Árvores Binárias
Árvores de Busca Binária
1 de outubro de Árvores de Busca e Árvores AVL Parte 1 Katia Guimarães.
UNIVERSIDADE FEDERAL DE MINAS GERAIS Árvores Cristiano Arbex Valle Vinicius Fernandes dos Santos
Transcrição da apresentação:

Algorítmos e estrutura de dados III Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação

Árvores de busca binária

Problemas... Se um vetor tiver ordenado é possível obter um algoritmo de pesquisa muito eficiente denominado pesquisa binária Não é eficiente na inserção e remoção devido a necessidade de reorganização para manter a ordenação As listas ligadas resolvem esse problema com o uso de ponteiros Problema é que algoritmos de pesquisa são sequenciais Árvore binária resolve esse tipo de problema de forma eficiente

Árvore de pesquisa binária Uma árvore de pesquisa binária é uma árvore binária armazenando chaves (ou itens) em seus nós internos e satisfazendo a seguinte propriedade: Seja u, v e w três nós tais que u é nó esquerdo de v e w é o nó direito. Temos key(u) key(v) key(w) Nós externos não armazenam itens (null) Itens da esqueda menor que a raiz Itens da direita maior ou igual a raiz Cada subarvore é uma arvore Uma travessia em ordem visita as chaves em ordem crescente

Á rvore bin á ria onde os elementos são organizados de forma que: y < xz > x x Árvore de pesquisa binária

Exemplo: 50, 20, 39, 8, 79, 26, 58, 15, 88, 4, 85, 96, 71, 42, Árvore de pesquisa binária

Estrutura de dados dinâmica, com recupera ç ão em tempo logar í tmico Árvore de pesquisa binária

Representação de um Nó struct arvore{ char info; struct arvore *esq, *dir; }; typedef struct arvore *arvorePTR; Uma árvore binária de busca vazia é representada por uma variável ponteiro com conteúdo nulo

Árvore com ponteiro para raiz

Inserindo um elemento em uma árvore de busca binária 5 14 (a) Árvore depois da inserção de 5 e 14

Inserindo um elemento em uma árvore de busca binária (b) Árvore depois da inserção de 8

Inserindo um elemento em uma árvore de busca binária (c) Árvore depois da inserção de 2

Inserindo um elemento em uma árvore de busca binária (d) Árvore depois da inserção de 20

Exemplo: 50, 20, 39, 8, 79, 26, 58, 15, 88, 4, 85, 96, 71, 42, Inserindo um elemento em uma árvore de busca binária

void tInsere (arvorePTR *plist, char x) { if((*plist) == NULL){ *plist=(arvorePTR) malloc (sizeof(struct arvore)); (*plist)->info=x; (*plist)->esq=NULL; (*plist)->dir=NULL; } else{ if (x info){ tInsere (&((*plist)->esq),x); } else{ tInsere (&((*plist)->dir),x); }

Pesquisa de um elemento Se T é uma árvore nula, não há o que pesquisar; Se a raiz de T armazena o elemento x, a solução é imediata; Se x é menor que o valor da raiz de T, a busca prossegue na subarvore esquerda de T; Se x é maior ou igual a T, a busca prossegue na subarvore direita de T

Pesquisa de um elemento AVRPTR aPesq(arvorePTR *plist, char x) { if (*plist == NULL) /*elemento não encontrado*/ return (NULL); else if (x==(*plist)->info) /*elemento encontrado na raiz*/ return (*plist); else if (x info) /*procura-o numa subarvore*/ return(aPesq(&((*plist)->esq),x)); else return(aPesq(&((*plist)->dir),x)); }

Remoção de um Elemento Três cenários: 1.Se a Raiz não possuí filhos, a solução é imediata. Podemos removê-la e anular T; 2.Se a raiz possuí um único filho, podemos remover o nó raiz e o nó filho toma o seu lugar; 3.Se a raiz possuir dois filhos, não é possível que ambos assumam o lugar do pai. Qual das subarvores deve assumir o lugar do nó pai removido? O que deve ser feito com a subarvore que não foi escolhida? Seu nó ficará órfão?

Remoção de um Elemento Não pode produzir nós órfãos; Aplicação pode inserir nós com a mesma info (definição de árvore binária): Impossibilidade de existir em uma subarvore da esquerda elementos maiores ou iguais à raiz; Subarvore da direita não pode existir nenhum elemento menor que a raiz; Assim: Se identificarmos o maior elemento da subarvore da esquerda e o posicionarmos na raiz, a árvore obtida continua seguindo a definição de árvore binária; O maior elemento em uma árvore binária ordenada encontra-se no nó que ocupa a posição mais à direita; com certeza esse nó não possuirá um filho à direita; Mas poderá possuir um filho a esquerda ….

Remoção de um Elemento Detalhando uma solução: Elaborar uma função auxiliar; recebe um ponteiro para uma árvore não nula; Faz uma pesquisa para identificar o nó que armazena o seu maior elemento; Retorna o endereço deste nó; ARVPTR tMaior(TREEPTR *plist){ TREEPTR t; t=*plist; if (t->dir == NULL){ *plist = (*plist)->esq; return (t); }else return(tMaior(&((*plist)->dir))); }

Remoção de um Elemento Possíveis passos para remover um nó que tenha dois filhos: p=tMaior(&(t->esq)); /*desliga o nó com o maior valor */ t->info = p->info; /*armazena o valor na raiz da árvore */ free(p); /*libera o nó removido */