Classificação e Pesquisa



Documentos relacionados
Árvores Binárias de Busca

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

Busca em Memória. Secundária

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

Árvores Binárias de Busca

Introdução. Árvore B. CaracterísMcas. Origem do Nome. Exemplo. Grau. Rohit Gheyi. B vem de balanceamento

Classificação e Pesquisa de Dados

Linguagem C: Árvores Binarias

INF 1007 Programação II

Exemplo Árvore Binária

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

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 Balanceadas

Árvore Binária de Busca

Busca. Pesquisa 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

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

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

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

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

Algoritmos e Estrutura de Dados III. Árvores

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

Árvores Binárias - continuação

PROGRAMAÇÃO II 4. ÁRVORE

INF 1010 Estruturas de Dados Avançadas

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

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

- 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

Estruturas de Dados I

DAS5102 Fundamentos da Estrutura da Informação

Métodos Computacionais. Árvores

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

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

PAA-DCC-UFAM. Árvores. Universidade Federal do Amazonas Departamento de Eletrônica e Computação

Árvores. Algoritmos e Estruturas de Dados 2005/2006

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

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

Árvores e Árvores Binárias

Algoritmos e Estruturas de Dados 2

Algoritmos e Estruturas de Dados: Árvore Binária

Pesquisa Sequencial e Binária. Introdução à Programação SI2

EAD Árvore árvore binária

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

2ª Lista de Exercícios

Pesquisa Sequencial e Binária

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

De uma forma ampla, o profissional egresso deverá ser capaz de desempenhar as seguintes funções:

FUNDAÇÃO EDUCACIONAL DE ITUIUTABA

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.

Unidade 5 Armazenamento e Indexação

Árvores Binárias e Busca. Jeane Melo

Estruturas de Armazenamento e Indexação. Rafael Lage Moreira Barbosa

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

Árvore B, B* e B+ Slides: Profa. Dra. CrisAna Dutra de Aguiar Ciferri. Murilo Gleyson Gazzola. ICMC- USP - Base de Dados

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

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

EAD Árvore - representação usando listas ligadas

Estruturas de Dados Árvores

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

Algoritmos de pesquisa. Tabelas de dispersão/hash

Hashing Letícia Rodrigues Bueno

Classificação e Pesquisa

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

Estruturas de Dados. Parte dos slides a seguir são adaptações, extensões e traduções para C dos originais:

Universidade Federal do Vale do São Francisco. Estruturas de Dados. Professor: Marcelo Santos Linder

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

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

Pesquisa Sequencial e Binária

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

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

DAS5102 Fundamentos da Estrutura da Informação

ESTRUTURA DE DADOS PILHA

Web site. Objetivos gerais. Introdução. Profa. Patrícia Dockhorn Costa

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

ESTRUTURAS DE DADOS E ALGORITMOS ÁRVORE BINÁRIA

Estruturas de Dados Pilhas, Filas e Deques

Prof. Yandre Maldonado - 1 PONTEIROS. Prof. Yandre Maldonado e Gomes da Costa

SUMÁRIO. Introdução... 3

Complexidade de Algoritmos

Como posso usar o HP Easy Printer Care através de USB ou conexão paralela?

Figura 1 Busca Linear

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

Algoritmos de Busca em Tabelas

Pointer Jumping. odg(v) e idg(v): graus de saída e entrada do vértice v V. um vértice r tal que. O vértice r é dita raíz de T

Algumas notas sobre PASCAL

Estruturas de Dados Aula 11: TAD Pilha 09/05/2011

Banco de Dados I Módulo V: Indexação em Banco de Dados. (Aulas 1, 2 e 3) Clodis Boscarioli

Organização de arquivos

Tabela de Símbolos. Análise Semântica A Tabela de Símbolos. Principais Operações. Estrutura da Tabela de Símbolos. Declarações 11/6/2008

Estruturas de Dados. Listas Dinâmicas Duplamente Encadeadas & Variantes. Listas Duplamente Encadeadas

ESTRUTURA DE DADOS DCC013

Algoritmos e Estrutura de Dados II

Transcrição:

Classificação e Pesquisa Árvores Prof. Rodrigo Rocha prof.rodrigorocha@yahoo.com http://www.bolinhabolinha.com Onde Estamos Ementa Pesquisa de Dados Seqüencial Binária Métodos de ordenação seleção e troca distribuição inserção Intercalação Árvores Pesquisa Binária AVL Patrícia B-Tree Tabelas hash Estática e Dinâmica 1

É uma estrutura de dados hierárquica Exemplo chave de times em um campeonato árvore genealógica organograma funcional Componentes Árvores raiz (root) nó superior aresta linha que liga os nós folhas nós filhos floresta conjunto de árvores grau do nó - número de nós filhos grau da árvore - é o máximo entre os graus de seus nós Operações Árvores procura, predecessor, antecessor, mínimo, máximo, inserir e deletar Idealmente, temos Árvore balanceada» Red black, avl, b tree Altura: log n para n nós armazenamento Muito grande para RAM Parte em RAM, parte em méio magnético» Meio magnético + lento 2

Estrutura de dados: árvore cada nó tem no máximo duas sub árvores Operações procura, predecessor, antecessor, mínimo, máximo, inserir e deletar Tempo é proporcional a altura da árvore Estrututa Campo chave Campo esquerdo Campo direito P = pai Se algum filho ou pai estiver ausente, o campo conterá nulo O nó raiz é o único que contém o campo pai nulo Implementando em um vetor Array com 7 posições: Armazenamento por nível: posição do nó posição dos filhos do nó 1 2,3 2 4,5 3 6,7 i (2i,2i+1) 3

Implementando em uma estrutura campo do valor 2 ponteiros : para o filho da esquerda e direita Estrutura (exemplo) typedef struct sttno { tipo inf; struct sttno *esq, *dir; } tno; Procedimento para imprimir todos os elementos de uma árvore binária INORDER-TREE-WALK(x) if x NIL then INORDER-TREE-WALK(left[x]) print key[x] INORDER-TREE-WALK(right[x]) Complexidade ɵ(n) Pois, após a chamada ao procedimento inicial, o procedimento é chamado de forma recursiva duas vezes (filho da direita e filho da esquerda) 4

Árvore binária de pesquisa Árvore Binária de Pesquisa nós são distribuídos de forma a facilitar a pesquisa Para qualquer nó x elementos a esquerda são menores que o elemento pai elementos a direita são maiores que o elemento pai Pesquisando TREE-SEARCH(x, k) if x = NIL or k = key[x] then return x if k < key[x] then return TREE-SEARCH(left[x], k) else return TREE-SEARCH(right[x], k) Chamada inicial: TREE-SEARCH(root[T ], k). Para procurar a chave 13 15-6-7-13 5

Versão não recursiva do algoritmo ITERATIVE-TREE-SEARCH(x, k) 1 while x NIL and k key[x] 2 do if k < key[x] 3 then x left[x] 4 else x right[x] 5 return x Complexidade Relativa a altura da árvore O(altura) Se a árvore estiver balanceada para 1000 elementos, 10 comparações O (log n) Senão O (n) Máximo e mínimo valor TREE-MINIMUM(x) while left[x] = NIL do x left[x] return x TREE-MAXIMUM(x) while right[x] = NIL do x right[x] return x Complexidade O(h), onde h é a altura da árvore 6

Sucessor e Predecessor TREE-SUCCESSOR(x) if right[x] = NIL then return TREE-MINIMUM(right[x]) ( g [ else y p[x] while y = NIL and x = right[y] do x y y p[y] return y Atenção: Os algoritmos de sucessor, mínimo, máximo e predecessor não procuram pelos valores Inserção ache a folha que será inserido o nó conecte o nó ao pai da folha Algortimo TREE-INSERT (T, z) y NIL x root [T] while x NIL do y x if key [z] < key[x] then x left[x] else x right[x] p[z] y if y = NIL then root [T] z else if key [z] < key [y] then left [y] z else right [y] z Complexidade relativa a altura O(h) h=altura 7

Remoção nó sem filhos somente ajustamos o ponteiro do nó pai Remoção nó com um único filho mover o filho para a posição do nó pai 8

Remoção nó com dois filhos procuramos o sucessor (ou predecessor), que deverá ocupar o seu lugar nó mais a esquerda da sub-árvore da direita como ele não tem filhos a esquerda, a sua sub-árvore a direita pode ser movida Remoção Algoritmo TREE-DELETE (T, z) if left [z] = NIL.OR. right[z] = NIL then y z else y TREE-SUCCESSOR (z) if left [y] NIL then x left[y] else x right [y] if x NIL then p[x] p[y] if p[y] = NIL then root [T] x else if y = left [p[y]] then left [p[y]][ x else right [p[y]] x if y z then key [z] key [y] if y has other field, copy them, too return y Complexidade relativa a altura O(h) h=altura 9

Exercício Para a árvore abaixo representada, responda as seguintes questões: Número de elementos Altura Elemento Root (Pai) Elementos folhas - exercícios 1-) Desenhe a árvore de pesquisa binária, com os itens S,U,P,E,R,F,A,C,I,L. Onde cada nó tenha somente uma letra. 2-) )(1211C (12.1.1 Cormen): Trace as árvores de pesquisa binária ái de altura 2,3,4,5 e 6 sobre o conjunto de chaves {1,4,5,10,16,17,21} 3-) Para a árvore binária abaixo, mostre os elementos que serão mostrados, utilizando o algoritmo INORDER-TREE- WALK(x) 10

Exercícios 4-) Escreva o algortimo tree-predecessor. 5-) )Qual a complexidade d dos algortimos de sucessor e predecessor? Explique como você chegou nesta complexidade. Exercícios 6-) Para a seguinte árvore binária, responda as questões a-) Mostre os nós que são percorridos para achar o nó com valor 9. O que o algoritmo retornou? ) q p p q g b-) Mostre os nós que são percorridos para achar o nó com valor 8. O que o algoritmo retornou? c-) Ache o sucessor de 15. (Mostre os nós que o algoritmo percorreu) d-) Ache o sucessor de 6. (Mostre os nós que o algoritmo percorreu) e-) Ache o sucessor de 4. (Mostre os nós que o algoritmo percorreu) f-) Ache o predecessor de 6. (Mostre os nós que o algoritmo percorreu) g-) Insira o valor 19. (Mostre os nós que o algoritmo percorreu) h-) Insira o valor 1. (Mostre os nós que o algoritmo percorreu) i-) Remova o nó com valor 13. Desenhe o novo layout da árvore j-) Remova o nó com valor 6. Desenhe o novo layout da árvore 11

Exercícios 7-) (12.2.1 Cormen) Suponha que você tenha os números de 1 a 1000 em uma árvore binária de busca, e quer localizar o número 363. Qual seqüência abaixo não pode ser a seqüência de nós examinados? a-) 2, 252, 401, 398, 330, 344, 397, 363. b-) 924, 220, 911, 244, 898, 258, 362, 363. c-) 925, 202, 911, 240, 912, 245, 363. d-) 2, 399, 387, 219, 266, 382, 381, 278, 363. e-) 935, 278, 347, 621, 299, 392, 358, 363. 8-) Escreva um algoritmo que traga a soma de todos os valores de uma árvore. Qual a sua complexidade? Justifique. Animações na web Demo http://www.engin.umd.umich.edu/cis/course.des/ cis350/treetool/ http://www.cosc.canterbury.ac.nz/mukundan/dsal/ BSTNew.html htt // t b / k d /d l/ http://www.cosc.canterbury.ac.nz/mukundan/dsal/ BST.html 12

Árvore binária de pesquisa Balanceadas pela altura Árvores Balanceadas (AVL) Para cada nó na árvore, a altura das sub-árvores da direita e esquerda diferem em no máximo 1 Animações na WEB http://webpages.ull.es/users/jriera/docencia/a VL/AVL%20tree%20applet.htm http://www strille net/works/media technology http://www.strille.net/works/media_technology _projects/avl-tree_2001/ 13

B-Tree Árvores balanceadas trabalham com dispositivos secundários de armazenamento (ex. disco rígido) quando o acesso é feito em meio físico a velocidade é prejudicada devemos tentar minimizar estes acessos Cada nó tem um número variável de chaves e filhos As chaves são armazenadas em ordem crescente Cada chave tem um filho associado que é o root da sub-árvore contendo todos os nós com chave menor ou igual a chave,mas maior que a chave predecessora Um nó também tem o filho mais a direita sendo o root da subárvore contendo todas as chaves maiores que qualquer chave no nó B-Tree Fator de minimização Uma b-tree tem um número mínimo de filhos para cada nó, conhecido como fator de minimização. Se t é o fator de mínimização, cada nó deve ter pelo menos t-1 chaves Em algumas circustâncias, o nó root poderá violar esta propriedade tendo menos que t-1 chaves Cada nó pode ter no máximo 2t-1 chaves, ou, 2t filhos Quando cada nó tem um alto fator de crescimento (muitos filhos), e necessário atravessar vários nós antes de localizar a chave procurada Se o acesso ao nó requer acesso ao disco, a b-tree deverá minimizar i i estes acessos O fator de minimização é normalmente escolhido de forma que o tamanho total de cada nó corresponda a um múltiplo do tamanho do bloco no dispositivo de armazenamento Esta escolha simplifica e otimiza o acesso a disco 14

B-Tree Exemplo B-tree com fator de minimização 3 (t=3) mínimo de chaves (t-1) = 2 máximo de chaves (2t-1) = 5 máximo de filhos (2t) = 6 B-Tree B-Tree é uma estrutura de dados ideal: Situações onde todos os dados não podem residir em um único meio de armazenamento, e acessa um segundo meio de armazenamento, que são mais custosos (ou consomem mais tempo) 15

Criação A operação de criação, cria uma árvore B alocando um nó root sem valores e sendo também folha Complexidade O(1) B-Tree-Create(T) x <- Allocate-Node() leaf[x] <- TRUE n[x] <- 0 Disk-Write(x) root[t] <- x B-Tree B-Tree Pesquisa Semelhante a pesquisa em árvore binária. O filho correto é escolhido realizando uma busca linear nos valores do nó. (esquerda os menores, a direita os maiores) Depois de achado o valor maior ou igual ao valor desejado, seguimos o filho a esquerda e realizamos novamente a pesquisa Se todos os valores são menores que o procurado, o maior filho a direita e seguido Complexidade depende do tamanho da árvore. logo O(log n) B-Tree-Search(x, k) i <- 1 while i <= n[x] and k > keyi[x] do i <- i + 1 if i <= n[x] and k = keyi[x] then return (x, i) if leaf[x] then return NIL else Disk-Read(ci[x]) return B-Tree-Search(ci[x], k) Supomos que no segundo estágio, todos os nós estão armazenados em disco 16

Exemplo Pesquisando o valor 21 B-Tree B-Tree Inserção O nó apropriado para a inserção é localizado (algoritmo similar ao B- Tree-Search) A chave é inserida no nó Se o nó não está cheio, a chave é inserida sem nenhuma outra operação caso contrário, o nó deverá ser dividido para acomodar a nova chave a operação de divisão consistem em mover uma das chaves para o nó PAI, este não pode estar cheio também, caso isso ocorra, outra operação de divisão deverá ser realizada. Se cada acesso ao nó pode custar um acesso ao disco, e recomendado que o pai nunca esteja cheio. Para satisfazer essa situação, o algoritmo divide qualquer nó que estiver er cheio quando estiver er percorrendo a árvore para efetuar a inserção. As operações de divisão aumentam, mas você garante que o Pai nunca estará lotado Complexidade, desde que a operação de divisão rode em O(n), a inserção rodará em O(t log n) 17

B-Tree B-Tree-Insert(T, k) r< <- root[t] if n[r] = 2t - 1 then s <- Allocate-Node() root[t] <- s leaf[s] <- FALSE n[s] <- 0 c1 <- r B-Tree-Split-Child(s, 1, r) B-Tree-Insert-Nonfull(s, k) else B-Tree-Insert-Nonfull(r, k) B-Tree-Insert-Nonfull(x, k) i<- n[x] if leaf[x] then while i >= 1 and k < keyi[x] do keyi+1[x] <- keyi[x] i <- i - 1 keyi+1[x] <- k n[x] <- n[x] + 1 Disk-Write(x) else while i >= and k < keyi[x] do i <- i - 1 i <- i + 1 Disk-Read(ci[x]) if n[ci[x]] = 2t - 1 then B-Tree-Split-Child(x, i, ci[x]) if k > keyi[x] then i <- i + 1 B-Tree-Insert-Nonfull(ci[x], k) Divisão do nó (split) Se o nó está cheio, é necessário dividí-lo. Movemos a chave média do nó x para seu pai y Um novo nó z, torná-se o filho imediatamente a direita da chave média x que foi deslocada para o pai y e o nó original x, torná-se o filho imediatamente a esquerda da chave média que foi deslocada para y Esta operação transforma o nó com 2t-1 chaves em dois nós com t-1 chaves cada. Atenção: Somente uma chave foi movida para o pai. Complexidade d O(t), onde t é constante t B-Tree-Split-Child(x, i, y) z <- Allocate-Node() leaf[z] <- leaf[y] n[z] <- t - 1 for j <- 1 to t - 1 do keyj[z] <- keyj+t[y] if not leaf[y] then for j <- 1 to t do cj[z] <- cj+t[y] n[y] <- t - 1 for j <- n[x] + 1 downto i + 1 do cj+1[x] <- cj[x] ci+1 <- z for j <- n[x] downto i do keyj+1[x] <- keyj[x] keyi[x] <- keyt[y] n[x] <- n[x] + 1 Disk-Write(y) Disk-Write(z) Disk-Write(x) B-Tree 18

Exemplo Inserindo o valor 33, em uma árvore de faor de minimização t=3 B-Tree B-Tree Remoção 1. Se a chave não estiver numa folha, troque-a com seu sucessor imediato. 2. Elimine a chave da folha. 3. Se a folha continuar com o número mínimo de chaves, fim. 4. A folha tem uma chave a menos que o mínimo. Verifique as páginas irmãs da esquerda e direita: 4.1.se uma delas tiver mais que o número mínimo de chaves, aplique redistribuição. 4.2.senão concatene a página com uma das irmãs e a chave pai. 5. Se ocorreu concatenação, aplique passos de 3 a 6 para a página pai. 6. Se a última chave da raiz for removida, a altura da árvore diminui. Fonte: usp (http://www.icmc.sc.usp.br/manuals/sce183/btree4.html) 19

Exercícios 1-) Onde b-trees são utilizadas? Dê exemplo de aplicações que façam uso delas. 2-) (usp) Explique a seguinte sentença: "B-Trees são construídas de baixo para cima, enquanto árvores binárias são construídas de cima para baixo". 3-) Pesquise e descreva o processo de remoção. 4-) Crie uma árvore B de grau 2, com os seguintes valores {1, 2, 3, 4, 5} 5-) Para quais valores de t, a árvore B abaixo é válida.. Exercícios 6-) Para a árvore B abaixo,com t=2, responda as seguintes questões: Qual o número mínimo de itens? Qual o número máximo de itens? Quando o nó é dividido? Insira os valores 42, 8, 14 Desenhe a árvore depois da inserção 7-) Construa a b-tree com os seguintes valores. (inseridos nesta ordem) Escolha um grau para a árvore B e informe-o antes da sua construção a-) 1 12 8 2 25 5 14 28 17 7 52 16 48 68 3 26 29 53 55 45 b-) 3, 7, 9, 23, 45, 1, 5, 14, 25, 24, 13, 11, 8, 19, 4, 31, 35, 56 8-) Utilizando a árvore B criada no exercício 7a: Adicione as chaves : 2, 6,12 Remova as chaves: 4, 5, 7, 3, 14 20

Animações na web Demonstração http://slady.net/java/bt/view.php?w=600&h=450 Livro texto Bibliografia ZIVIANI, Nivio. Projeto de Algoritmos : com implementação em Pascal e C.. 2ª ed. São Paulo: Pioneira Thomson Learning, 2004. VELOSO, Paulo A. S.. Estrutura de Dados. 1ª ed. São Paulo: Campus, 1983. CORMEN, Thomas H. Algoritmos : teoria e prática. 1ª ed. Rio de Janeiro: CAMPUS, 2002. Complementar SCHILDT, Herbert. C Completo e Total. 3ª ed. São Paulo: Pearson Education, 2005. Education, 2005. CELES, Waldemar; CERQUEIRA, Renato. Introdução a Estruturas de Dados : com técnicas de programação em C. 4ª ed. Rio de Janeiro: Elsevier, 2004 WIRTH, Niklaus. Algoritmos e Estruturas de Dados. 1ª ed. Rio de Janeiro: LTC, 1989 TENENBAUM, Aaron M; SOUZA, Tereza Cristina Félix de. Estruturas de Dados usando C. 1ª ed. São Paulo: Makron Books,1995. 21