Busca em Memória. Secundária

Documentos relacionados
Busca em Memória Secundária. Busca em Memória Secundária

Classificação e Pesquisa de Dados

INF 1010 Estruturas de Dados Avançadas

EAD Árvore - representação usando listas ligadas

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

1. Arquivos Seqüenciais

EAD Árvore árvore binária

Algoritmos e Programação

Árvores B* Letícia Rodrigues Bueno

Trabalho 3: Agenda de Tarefas

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

Memória cache. Prof. Francisco Adelton

A Pilha. Aula 02. DPEE 1038 Estrutura de Dados para Automação Curso de Engenharia de Controle e Automação Universidade Federal de Santa Maria

Árvore Binária de Busca

INF 1007 Programação II

DAS5102 Fundamentos da Estrutura da Informação

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

Filas. A ordem de saída corresponde diretamente à ordem de entrada dos elementos. Fila de caixa bancário

Nível da Arquitetura do Conjunto das Instruções

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

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

Árvores Binárias de Busca

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

Linguagem C: Árvores Binarias

Filas com prioridade - Introdução (1)

armazenamento (escrita ou gravação (write)) recuperação (leitura (read))

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

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

Busca. Pesquisa sequencial

INF 1007 Programação II

Árvores Binárias de Busca

Estruturas de Dados I

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

MANUAL DE UTILIZAÇÃO DO SISTEMA HERMES

CES-11. Algoritmos e Estruturas de Dados. Carlos Alberto Alonso Sanches Juliana de Melo Bezerra

UNIVERSIDADE FEDERAL DO ESPÍRITO SANTO CENTRO UNIVERSITÁRIO NORTE DO ESPÍRITO SANTO

9 Comandos condicionais

/*(Atenção: Em se tratando de uma lista estaticamente alocada, temos utilizado a estratégia de passa o tamanho máximo do vetor.)*/

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

Programação: Estruturas de seleção

Métodos Computacionais. Fila

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

Capítulo SETE Números em Ponto Fixo e Ponto Flutuante

Laboratório de Banco de Dados II Aula 1. Stored Procedures

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

INTRODUÇÃO À LINGUAGEM C++

Relatório Trabalho Prático 2 : Colônia de Formigas para Otimização e Agrupamento

DAS5102 Fundamentos da Estrutura da Informação

Métodos Computacionais. Árvores

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

compreender a importância de cada estrutura de controle disponível na Linguagem C;

2ª Lista de Exercícios

Sistemas de Arquivos. André Luiz da Costa Carvalho

3.4 Representação física: alocação encadeada (dinâmica) Ptlista - variável ponteiro externa que indica o início da lista.

Complexidade de Algoritmos

Notas de Cálculo Numérico

Linguagem C. Programação Estruturada. Fundamentos da Linguagem. Prof. Luis Nícolas de Amorim Trigo

Filas: conceitos e implementações

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

Programação Funcional. Aula 5. Funções Recursivas. José Romildo Malaquias. Departamento de Computação Universidade Federal de Ouro Preto 2011.

Esse produto é um produto composto e tem subprodutos

Introdução à Programação. Armazenamento de Grande Quantidade de Informação Usando Vetores

CADERNOS DE INFORMÁTICA Nº 1. Fundamentos de Informática I - Word Sumário

Prof. Marcelo Nogueira

Exercícios de Revisão Java Básico

Árvores Binárias Balanceadas

AV1 - MA (b) Se o comprador preferir efetuar o pagamento à vista, qual deverá ser o valor desse pagamento único? 1 1, , , 980

Linguagem de Programação C

Sistemas Operacionais

Lista de Exercícios - Potenciação

Lista restrita onde as operações de inserção e retirada são feitas nas extremidades. Deque (fila de final duplo).

Implementando uma Classe e Criando Objetos a partir dela

Chaves. Chaves. O modelo relacional implementa dois conhecidos conceitos de chaves, como veremos a seguir:

Algoritmos de Busca em Tabelas

Agendador de Rotinas

NOTIFICANDO USUÁRIOS SOBRE UMA NOVA EDIÇÃO

Capítulo 8. CICLOS. Tabela 8.1 Programa8a.f90.

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

FILAS DE PRIORIDADE e HEAPS

Árvores B. Prof. Márcio Bueno. / Fonte: Material da Prof a Ana Eliza Lopes Moura

SOP - TADS Sistemas de Arquivos Cap 4 Tanenmbaum

PROGRAMAÇÃO II 3. FILA DINÂMICA

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

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

Gerência do Sistema de Arquivos. Adão de Melo Neto

Chamada Pública Procedimentos para utilização da Chamada Pública no sistema SMARam Versão 1.0

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

Algoritmos e Estruturas de Dados: Árvore Binária

Manual do Portal do Fornecedor. isupplier

Gerenciamento de memória

Códigos de barra EAN13:

Credenciamento Portaria MEC 3.613, de D.O.U ORDENAMENTO

1 Funções básicas de implementação de arquivos

Banco de Dados I Módulo V: Indexação em Banco de Dados. (Aulas 4) Clodis Boscarioli

PROGRAMAÇÃO II 4. ÁRVORE

Capítulo 13 Pastas e Arquivos

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

Transcrição:

UNIVERSIDADE ESTADUAL DE MARINGÁ DEPARTAMENTO DE INFORMÁTICA Busca em Memória Secundária e Gomes da Costa yandre@din.uem.br 1

Busca de um item em uma massa de dados que não cabe na memória principal; Procura-se reduzir ao máximo o número de acessos à memória secundária; Por que o tempo de acesso à memória secundária é tão mais lento? 2

Segundo (Drozdek, 2002), o tempo de acesso em memória secundária é dado por: T acesso = T latência + T procura + T transferência T latência : tempo decorrido até que o disco gire para que a cabeça de leitura se posicione sobre o bloco a ser lido; T procura : deslocamento da cabeça de leitura até a trilha a ser lida; T transferência : dado pela taxa de transferência (capacidade do dispositivo); 3

Um exemplo: Supondo um acesso à um dispositivo que gira a 3000 rpm em que se pretende transferir 5 kbytes; Neste caso: T latência = 10 ms (tempo de meia volta); Supondo que sejam gastos 40 ms para se localizar a trilha a ser lida: T procura = 40 ms; Considerando um dispositivo com taxa de transferência de 1000 kbytes/s: T transferência = 5 ms; Assim: T acesso = 10 ms + 40 ms + 5 ms = 55 ms 4

O exemplo mostra um tempo de acesso da ordem de ms; O tempo de execução de instruções pela CPU é da ordem de microssegundos, nanossegundos, ou mais rápido; Assim fica clara a necessidade de diminuir acessos em memória secundária; 5

Árvore B (Bayer e McCreight, 1972) Estrutura projetada para diminuir o número de acessos em uma busca; Agrupa vários itens em um só nó, formando um agrupamento conhecido como página; página 6

Observe que a ordem da árvore se altera: neste exemplo ela se torna quaternária; Diminuição do número de buscas na estrutura; Um exemplo (Ziviani, 2002): Busca em uma massa com 10 6 (1 milhão) de registros; Em uma ABB: log 2 10 6 20 Na árvore descrita anteriormente: log 4 10 6 10 Se ampliássemos o número de registros por nó para 127, qualquer elemento poderia ser encontrado com, no máximo, 3 buscas na estrutura; 7

Número de registros por página: Segundo (Drozdek, 2002), na prática o número de registros por página deve variar entre 50 e 500; De acordo com (Cormen et al., 2002), este número pode variar entre 50 e 2000; De fato, é interessante que este número seja tal que corresponda aproximadamente ao tamanho de um bloco do disco (aproveita-se melhor o tempo de acesso); 8

Exercícios: Calcule o tempo de acesso de 250 kbytes de dados em um disco que gira a 7200 rpm e que possui taxa de transferência de 2000 kbytes/s. Considere ainda que a cabeça de leitura gasta 70 ms para se deslocar de um extremo ao outro do disco e que, nesta situação, a cabeça se encontra inicialmente em um extremo do disco e a trilha a ser lida encontra-se à uma distância que equivale a 2/3 da distância máxima possível a ser percorrida; Qual é o número médio (aproximado) de buscas realizadas para se encontrar um registro em uma Árvore que possui 63 registros por página e que armazena uma massa de 10 8 registros? 9

Definição de Árvore B: Segundo (Ziviani, 2002), uma Árvore B de ordem m * é tal que: Cada página possui, no mínimo m registros (e m+1 descendentes) e no máximo 2m registros (e 2m+1 descendentes), exceto a página raiz, que pode conter entre 1 e 2m registros; Todas as páginas folha aparecem no mesmo nível. * Diverge de outras definições. 10

Relação entre as páginas e suas páginas filhas: chave 1 chave 2... chave 2m pág 1 pág 2 pág 3 pág 2m pág 2m+1 Registros armazenados na página i são menores do que a chave i e maiores do que a chave i-1; 11

Exemplo de Árvore B: 30 10 20 40 50 3 4 8 9 11 13 17 25 28 33 36 43 45 48 52 55 Ordem m=2 com 3 níveis; Todas as páginas contêm 2, 3 ou 4 registros, exceto a raiz; 12

Particularidades de Árvore B: Depois de uma série de inserções e remoções a árvore apresenta taxa de ocupação de 69% (Drozdek, 2002); Crescimento das folhas para a raiz; Inserção de registros: Caso trivial: inserir o registro em uma página com menos de 2m registros; Caso a página já tenha 2m registros, deve-se criar uma nova página; 13

Exemplos de inserção: Seqüência a inserir: 50, 20, 30, 37, 42, 47, 41 e 60; Árvore de ordem m=2; a b c 50 20 50 20 30 50 d 20 30 37 50 14

Criação de nova página: Transfere-se o elemento central da seqüência que provocou o estouro para a página do nível superior e cria-se duas páginas com os demais elementos; Note que, isto também pode provocar estouro na página do nível superior; Ainda resta inserir: 42, 47, 41 e 60; d 20 30 37 50 15

Continuando a inserção: Próximo registro: chave 42; d 20 30 37 50 Seqüência ordenada das 2m+1 chaves: 20, 30, 37, 42, 50; A chave central (37) é transferida para o nível superior e cria-se duas páginas com as demais; e 37 20 30 42 50 16

Continuando a inserção: f 37 Inserindo 47 Inserindo 41 20 30 42 47 50 g 37 20 30 41 42 47 50 17

Continuando a inserção: Inserindo 60 h 37 47 Exercício: 20 30 41 42 50 60 A partir desta árvore descreva a inserção de uma seqüência de registros com chaves 31, 32, 43, 44, 61 e 62. 18

Árvore obtida: i 37 47 Exercício: 20 30 31 32 41 42 43 44 50 60 61 62 Agora, faça a inserção dos registros com chaves 33 e 45. 19

Árvore obtida: j 31 37 43 47 20 30 Exercício: 32 33 41 42 44 45 50 60 61 62 Agora, faça a inserção dos registro com chave 63. 20

Árvore obtida: 43 k 31 37 47 61 20 30 32 33 41 42 44 45 50 60 62 63 21

Operação de remoção: Caso trivial 1: Quando o registro a ser removido estiver em uma página folha com pelo menos m+1 registros; Quando o registro a ser removido não estiver numa página folha: Substitui-se o registro por um que contenha uma chave adjacente (antecessora ou sucessora); Caso trivial 2: Quando o substituo estiver originalmente em uma página com, pelo menos, m+1 registros; 22

Exemplo (caso trivial 1) Remover o registro com chave 38 da seguinte árvore: 43 31 37 47 61 20 30 32 33 38 40 41 42 44 45 50 60 62 63 23

Exemplo (caso trivial 2) Remover o registro com chave 43 da seguinte árvore: 43 31 37 47 61 20 30 32 33 40 41 42 44 45 50 60 62 63 24

42 31 37 47 61 20 30 32 33 40 41 44 45 50 60 62 63 25

E quando, após uma remoção, uma página fica com menos de m registros? Neste caso uma propriedade da Árvore B é violada; Com isto, é necessário tomar emprestado um registro da página vizinha; Nesta situação, duas coisas podem ocorrer: O número de registros da página vizinha é maior que m. Assim, basta tomar um registro emprestado e trazê-lo para a página em questão via página pai. 26

Exemplo Remover o registro com chave 33 da seguinte árvore: 43 31 37 47 61 20 30 32 33 40 41 42 44 45 50 60 62 63 27

43 31 40 47 61 20 30 32 37 41 42 44 45 50 60 62 63 28

A segunda possibilidade é a de que a página vizinha também tenha exatamente m registros (neste caso as duas juntas têm 2m-1 registros); Nesta situação as duas páginas devem ser fundidas em uma só; 29

Exemplo: remoção do registro com chave 41 da seguinte árvore: 31 40 20 30 20 30 32 37 41 42 31 32 37 40 42 30

Observe que, dependendo do contexto, o processo pode se propagar até a raiz; Exemplo: remover o registro com chave 41 da seguinte árvore: 31 40 43 47 61 20 30 32 37 41 42 44 45 50 60 62 63 31

Etapa 1: 43 31 47 61 20 30 32 37 40 42 44 45 50 60 62 63 32

Etapa 2: 31 43 47 61 20 30 32 37 40 42 44 45 50 60 62 63 33

Resultado: 31 43 47 61 20 30 32 37 40 42 44 45 50 60 62 63 34

Eliminação de uma chave em Árvore B: 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. 35

Exercício: Dada a seguinte Árvore B, descreva o estado da mesma após realizar a remoção dos registros com seguintes seqüências de chave; 45, 30 e 28; 50, 8, 10, 4, 20, 40, 55, 17, 33, 11 e 36; 3, 9 e 52. 10 20 30 40 50 3 4 8 9 11 13 17 25 28 33 36 43 45 48 52 55 36

Soluções possíveis: 10 25 40 50 3 4 8 9 11 13 17 20 33 36 43 48 52 55 13 3 9 25 43 48 52 13 25 43 48 37

Uma forma de declarar a estrutura de uma página de ordem 2: const int m = 2; typedef struct no_arvoreb arvoreb; struct no_arvoreb { int num_chaves; int chaves[2*m]; arvoreb *filhos[2*m+1]; bool folha; }; 38

Algoritmo de varredura em ordem: void em_ordem(arvoreb *raiz) { int i; if (raiz!= NULL) { for (i = 0; i < raiz->num_chaves; i++) { em_ordem(raiz->filhos[i]); printf("\n%d", raiz->chaves[i]); } em_ordem(raiz->filhos[i]); } } 39

Algoritmo de Busca (busca na página): int busca_binaria(arvoreb *no, int info) { int meio, i, f; i = 0; f = no->num_chaves-1; while (i <= f) { meio = (i + f)/2; if (no->chaves[meio] == info) return(meio); //Encontrou. Retorna a posíção em que a chave está. else if (no->chaves[meio] > info) f = meio - 1; else i = meio + 1; } return(i); //Não encontrou. Retorna a posição do ponteiro para o filho. } 40

Algoritmo de Busca (busca na árvore): bool busca(arvoreb *raiz, int info) { arvoreb *no; int pos; //posição retornada pelo busca binária. no = raiz; while (no!= NULL) { pos = busca_binaria(no, info); if (pos < no->num_chaves && no->chaves[pos] == info) return(true); else no = no->filhos[pos]; } return(false); } 41

Trabalho prático: Implementar em linguagem C as operações de inserção e remoção em uma Árvore B de ordem 2; O trabalho pode ser feito individualmente ou em dupla; A data de entrega é 02/10/2006; O código fonte deverá ser apresentado pela dupla ao professor; A nota será individual, pois dependerá inclusive do desempenho durante a apresentação; Se forem identificados trabalhos copiados, todos os envolvidos terão nota zero. 42

Referências Bibliográficas: Cormen, Thomas H. et al. Algoritmos teoria e prática. Rio de Janeiro: Elsevier, 2002; Drozdek, Adam. Estrutura de Dados e Algoritmos em C++. São Paulo: Pioneira Thomsom Learning, 2002; Ziviani, Nivio. Projeto de Algoritmos com implementações em Pascal e C. São Paulo: Pioneira Thomsom Learning, 2002; 43