Introdução Métodos de Busca Parte 1

Documentos relacionados
Métodos de Busca Parte 1

O problema da busca (ou pesquisa) - Dado um conjunto de elementos, onde cada um é identificado por uma chave, o objetivo da busca é localizar, nesse

O conjunto de registros pode ser: Um vetor de registros Uma lista encadeada Uma árvore Etc.

SCC Capítulo 5 Métodos de Busca [3]

Carlos Eduardo Batista. Centro de Informática - UFPB

Carlos Eduardo Batista. Centro de Informática - UFPB

Aula T19 BCC202 Pesquisa (Parte 1) Pesquisa Binária. Túlio Toffolo

Ordenação por Seleção Métodos de Ordenação Parte 3

Métodos de Ordenação

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

Aula 15: Pesquisa em Memória Primária. Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP

Índices. SCC-503 Algoritmos e Estruturas de Dados II. Thiago A. S. Pardo Leandro C. Cintra M.C.F. de Oliveira

Aula 3 Listas Lineares Sequenciais Ordenadas. prof Leticia Winkler

Métodos de Ordenação Parte I

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

ACH2025. Laboratório de Bases de Dados Aula 8. Indexação e Hashing Parte 1. Professora: Fátima L. S. Nunes SISTEMAS DE INFORMAÇÃO

Projeto e Análise de Algoritmos

Ordenação por Intercalação Métodos de Ordenação Parte 4

Métodos de Busca Parte 2

Tabelas de hash Acabamos de estudar como implementar uma tabela hashing aberta e estudaremos agora como implementar uma tabela hashing fechada ou

Árvores. SCC-214 Projeto de Algoritmos. Thiago A. S. Pardo. Um nó após o outro, adjacentes Sem relações hierárquicas entre os nós, em geral

heapsort (int *x, int n) { int i, e, s, f, aux; /*fase de pré-processamento - cria heap inicial*/ for (i=1; i<n; i++) { e = x[i]; s = i; f = (s-1)/2;

Algoritmos de pesquisa. Tabelas de dispersão/hash

O Problema da Ordenação Métodos de Ordenação Parte 1

MÉTODOS DE PESQUISA DE DADOS EM MEMÓRIA PRIMÁRIA. Material da Prof. Ana Eliza

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

Algoritmos de Busca em Vetores

BUSCA EM ARRAYS. Prof. André Backes. Ato de procurar por um elemento em um conjunto de dados

Árvores binárias de busca

Busca em Arranjos. Busca em arranjos. Busca em arranjos. Programação de Computadores. Busca em Arranjos

Tabelas Hash O Que é uma Tabela Hash? O Que é uma Tabela Hash? O Que é uma Tabela Hash? Inserindo um Novo Registro. O Que é uma Tabela Hash?

Ordenação e Busca em Arquivos

Árvores binárias de busca

Árvores Genéricas de Busca

Listas Estáticas. SCC Algoritmos e Estruturas de Dados I. Prof. Fernando V. Paulovich. *Baseado no material do Prof.

Hashing Externo. SCC-503 Algoritmos e Estruturas de Dados II. Thiago A. S. Pardo M.C.F. de Oliveira Cristina Ciferri

Árvores de Pesquisa (Parte I)

ALGORITMOS DE ORDENAÇÃO

Árvores binárias de busca

Acesso Sequencial Indexado

Hashing convencional...

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

TABELAS DE DISPERSÃO/HASH

Árvores-B (Parte Ia) SCC-203 Algoritmos e Estruturas de Dados II. Graça Nunes

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

Programação de Computadores Ordenação de Arranjos

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

Pesquisa. Pesquisa. Pesquisa. O problema de procurar(pesquisar) alguma informação numa tabela ou num catálogo é muito comum Exemplo:

Índices. SCE-203 Algoritmos e Estruturas de Dados II

SCC0601 Introdução à Ciência da Computação II. Prof. Lucas Antiqueira

ESTRUTURA DE DADOS E ALGORITMOS HEAPS E LISTAS DE PRIORIDADES

Árvores B. Hashing. Estrutura de Dados II Jairo Francisco de Souza

Árvores. Thiago Martins, Fabio Gagliardi Cozman. PMR2300 / PMR3201 Escola Politécnica da Universidade de São Paulo

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

Árvores-B (Parte I) SCC-503 Algoritmos e Estruturas de Dados II. Thiago A. S. Pardo Leandro C. Cintra M.C.F. de Oliveira

Algoritmos e Estruturas de Dados I1 Prof. Eduardo 1

Listas Estáticas. Prof. Fernando V. Paulovich *Baseado no material do Prof. Gustavo Batista

Análise e Complexidade de Algoritmos

HASHING HASHING 6/10/2008

Pesquisa Linear. Adriano J. Holanda 15/3/2016

Métodos de Ordenação Parte 3

Dicionários. TAD Orientado a conteúdo

Busca em Memória Primária Estrutura de Dados II

Busca em Memória Primária Estrutura de Dados II

Prova 2 PMR2300 1o. semestre 2015 Prof. Thiago Martins

Hashing. Hashing. Hashing versus Indexação. Hashing. Hashing convencional... Exemplo de espalhamento. Revisão...

Tabelas Hash. Prof. Túlio Toffolo BCC202 Aulas 23 e 24 Algoritmos e Estruturas de Dados I

Ordenação Externa. Ordenação Externa. Ordenação Externa. Ordenação Externa

Lista de Exercícios sobre Listas Implementadas por Encadeamento

Organização de Arquivos. Thiago A. S. Pardo Leandro C. Cintra M.C.F. de Oliveira Cristina D. A. Ciferri

Edital de Seleção 055/2017 PROPESP/UFAM. Prova de Conhecimento. Caderno de Questões

Árvores. Thiago Martins, Fabio Gagliardi Cozman. PMR2300 / PMR3201 Escola Politécnica da Universidade de São Paulo

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

UNIVERSIDADE FEDERAL DO PIAUÍ COLÉGIO TÉCNICO DE TERESINA-TÉCNICO EM INFORMÁTICA DISCIPLINA: ESTRUTURA DE DADOS PROFESSOR: Valdemir Junior

Edital de Seleção 024/2017 PROPESP/UFAM. Prova de Conhecimento. Caderno de Questões

Árvores de Pesquisa (Parte II)

INF111 Programação II Aulas 11, 12, 13 Ordenação

Edital de Seleção 032/2016 PROPESP/UFAM. Prova de Conhecimento. Caderno de Questões

Lista de Exercícios 04

Organização de Arquivos

Organização de Arquivos

Conteúdo. Busca Seqüencial. Busca Binária. Algoritmos de Ordenação e Busca e sua Análise de Complexidade. Alneu de Andrade Lopes Rosane Minghim

Heapsort é um método de ordenação cujo princípio de funcionamento é o mesmo utilizado para a ordenação por seleção.

Listas Lineares. Livro Projeto de Algoritmos Nívio Ziviani Capítulo 3 Seção 3.1

Tabelas Hash. informação, a partir do conhecimento de sua chave. Hashing é uma maneira de organizar dados que:

4. Algoritmos de Busca em Vetores

Estrutura de Dados: Lista Linear. Parte I Introdução e Listas Sequenciais Estáticas

Árvores. Fabio Gagliardi Cozman. PMR2300 Escola Politécnica da Universidade de São Paulo

Árvores Binárias de Busca

Estrutura de Dados: Lista Linear. Parte I Introdução e Listas Sequenciais Estáticas

Medida do Tempo de Execução de um Programa. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR

SCC122 - Estruturas de Dados. Lista Estática Seqüencial

Árvores Binárias de Busca

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

Índice. Índices. Índice simples. Em geral, um índice fornece mecanismos para localizar informações

Classificação e Pesquisa de Dados. Aula 23 Organização de Arquivos: Arquivos Indexados, Diretos e Arquivos Invertidos

Transcrição:

Introdução Métodos de Busca Parte 1 SCC-201 Introdução à Ciência da Computação II Rosane Minghim 2009 Importância em estudar busca Busca é uma tarefa muito comum em computação? Vários métodos e estruturas de dados podem ser empregados para se fazer busca Quais estruturas de dados? Baseado no material dos Professores Rudinei Goularte e Thiago Pardo 1 Certos métodos de organização/ordenação de dados podem tornar o processo de busca mais eficiente 2 Introdução Termos Relacionados O problema da busca (ou pesquisa) Dado um conjunto de elementos, onde cada um é identificado por uma chave, o objetivo da busca é localizar, nesse conjunto, o elemento que corresponde a uma chave específica Tabela: termo genérico, pode ser qualquer estrutura de dados usada para armazenamento interno e organização dos dados Uma tabela é um conjunto de elementos, chamados registros 3 4 1

Termos Relacionados Termos Relacionados Existe uma chave associada a cada registro, usada para diferenciar os registros entre si Chave interna: chave está contida dentro do registro, em uma localização específica Chave externa: essas chaves estão contidas em uma tabela de chaves separada que inclui ponteiros para os registros Algoritmo de busca Formalmente, é o algoritmo que aceita um argumento a e tenta encontrar o registro cuja chave seja a Chave primária: para todo arquivo existe pelo menos um conjunto exclusivo de chaves Dois registros não podem ter o mesmo valor de chave Chave secundária: são as chaves não primárias Chaves que não precisam ter seus valores exclusivos Para que servem? 5 6 Termos Relacionados Operações na tabela Inserção: adicionar um novo elemento à tabela Algoritmo de busca e inserção: se não encontra o registro, insere um novo Remoção: retirar um elemento da tabela Recuperação: procurar um elemento na tabela e, se achá-lo, torná-lo disponível Tipos de Busca A tabela pode ser: Um vetor de registros Uma lista encadeada Uma árvore Etc. A tabela pode ficar: Totalmente na memória (busca interna) Totalmente no armazenamento auxiliar (busca externa) Dividida entre ambos 7 8 2

Tipos de Busca As técnicas de busca em memória interna que estudaremos serão: Busca por Interpolação Busca em Árvores Hashing A busca seqüencial é a forma mais simples de busca É aplicável a uma tabela organizada como um vetor ou como uma lista encadeada O objetivo é encontrar um dado registro com o menor custo Cada técnica possui vantagens e desvantagens 9 10 Busca mais simples que há Percorre-se registro por registro em busca da chave Busca mais simples que há Percorre-se registro por registro em busca da chave Procure por 48 1 N=8 1 N=8 11 12 3

Busca mais simples que há Percorre-se registro por registro em busca da chave Procure por 48 1 N=8 Busca mais simples que há Percorre-se registro por registro em busca da chave Procure por 48 1 N=8 13 Busca mais simples que há Percorre-se registro por registro em busca da chave Procure por 48 1 N=8 Busca mais simples que há Percorre-se registro por registro em busca da chave Procure por 48 1 N=8 15 16 4

Busca mais simples que há Percorre-se registro por registro em busca da chave Procure por 48 1 N=8 Algoritmo de busca seqüencial em um vetor A, com N posições (0 até N-1), sendo x a chave procurada for (i=0; i<n; i++) if (A[i]==x) return(i); return(-1); /*chave encontrada*/ /*chave não encontrada*/ 17 18 Uma maneira de tornar o algoritmo mais eficiente é usar um sentinela Sentinela: consiste em adicionar um elemento de valor x no final da tabela Limitações do vetor Tamanho fixo Pode desperdiçar ou faltar espaço O sentinela garante que o elemento procurado será encontrado, o que elimina uma expressão condicional, melhorando a performance do algoritmo A[N]=x; for(i=0; x!=a[i]; i++) ; if (i<n) return(i); /*chave encontrada*/ else return(-1); /*sentinela encontrado*/ 19 Alternativa Lista encadeada O que muda na busca seqüencial? 20 5

Exercício Escrever em C a sub-rotina de busca de um elemento em uma lista encadeada Complexidade Se o registro for o primeiro: 1 comparação Se o registro procurado for o último: N comparações Se for igualmente provável que o argumento apareça em qualquer posição da tabela, em média: (n+1)/2 comparações Se a busca for mal sucedida: N comparações Logo, a busca seqüencial, no pior caso, é O(n) 21 22 Arranjo não ordenado Inserção no final do arranjo Remoção Realocação dos registros acima do registro removido Para aumentar a eficiência Reordenar continuamente a tabela de modo que os registros mais acessados sejam deslocados para o início A) Método mover-para-frente: sempre que uma pesquisa obtiver êxito, o registro recuperado é colocado no início da lista B) Método da transposição: um registro recuperado com sucesso é trocado com o registro imediatamente anterior 23 Ambos se baseiam no fenômeno da recuperação recorrente de registros 24 6

Desvantagens do método mover-para-frente Uma única recuperação não implica que o registro será freqüentemente recuperado Perda de eficiência para os outros registros O método é mais caro em vetores do que em listas Por quê? Vantagens do método mover-para frente Possui resultados melhores para quantidades pequena e média de buscas 25 Busca seqüencial em tabela ordenada A eficiência da operação de busca melhora se as chaves dos registros estiverem ordenadas No pior caso (caso em que a chave não é encontrada), são necessárias N comparações quando as chaves estão desordenadas No caso médio, N/2 comparações se as chaves estiverem ordenadas, pois se para a busca assim que uma chave maior do que a procurada é encontrada Dificuldade do método? 26 Busca seqüencial indexada Existe uma tabela auxiliar, chamada tabela de índices, além do próprio arquivo ordenado Cada elemento na tabela de índices contém uma chave () e um indicador do registro no arquivo que corresponde a Faz-se a busca a partir do ponto indicado na tabela, sendo que a busca não precisa ser feita desde o começo Pode ser implementada como um vetor ou como uma lista encadeada O indicador da posição na tabela pode ser um ponteiro Tabela de índices ou uma variável inteira 27 28 Chave 7 512 583 Registro 7

Busca seqüencial indexada Se a tabela for muito grande, pode-se ainda usar a tabela de índices secundária O índice secundário é um índice para o índice primário Índice secundário Índice primário Chave 7 512 583 Registro 29 30 Vantagem Os itens na tabela poderão ser examinados seqüencialmente sem que todos os registros precisem ser acessados O tempo de busca diminui consideravelmente Desvantagens A tabela tem que estar ordenada Exige espaço adicional para armazenar a(s) tabela(s) de índices Algo mais? Remoção Remove-se o elemento e rearranja-se a tabela inteira e o(s) índice(s) Marca-se a posição do elemento removido, indicando que ela pode ser ocupada por um outro elemento futuramente A posição da tabela fica vazia 31 32 8

Inserção Se houver espaço vago na tabela, rearranjam-se os elementos localmente Se não houver espaço vago Inserção do elemento 512 com espaço vago e 583 descem 512 é inserido Chave 7 583 Registro Rearranjar a tabela a partir do ponto apropriado e reconstruir o(s) índice(s) 33 34 Inserção do elemento 512 com espaço vago e 583 descem 512 é inserido Chave 7 512 583 Registro Inserção do elemento 512 sem espaço vago Elementos a partir de descem 512 é inserido Índice é reconstruído Chave 7 583 585 Registro 35 36 9

Inserção do elemento 512 sem espaço vago Elementos a partir de descem 512 é inserido Índice é reconstruído Chave 7 512 583 585 Registro Como montar o índice primário Se a tabela não estiver ordenada, ordene-a Divide-se o número de elementos da tabela pelo tamanho do índice desejado: n/tamanho-índice Para montar o índice, recuperam-se da tabela os elementos 0, 0+n/tamanho-índice, 0+2*n/tamanho-índice, etc. Cada elemento do índice representa n/tamanho-índice elementos da tabela 37 Exemplo Divide-se o número de elementos da tabela pelo tamanho do índice desejado Se a tabela tem 1.000 elementos e deseja-se um índice primário de 10 elementos, faz-se 1.000/10=100 Para montar o índice, recuperam-se da tabela os elementos 0, 0+n/tamanho-índice, 0+2*n/tamanho-índice, etc. O índice primário é montado com os elementos das posições 0, 100, 200, etc. da tabela Cada elemento do índice representa n/tamanho-índice elementos da tabela Cada elemento do índice primário aponta para o começo de um grupo de 100 elementos da tabela 39 Para montar um índice secundário, aplica-se raciocínio similar sobre o índice primário Em geral, não são necessários mais do que 2 índices 40 10

Escrever em C uma sub-rotina de busca seqüencial indexada por um elemento em uma tabela com índice primário int busca(int x) { int i; //busca no índice primário for (i=0; i<tam_indice && indice[i].<=x; i++); i=indice[i-1].pos; 41 } //busca na tabela while ((i<tam_tabela) && (tabela[i].chave<x)) i++; if ((i<tam_tabela) && (tabela[i].chave==x)) return(i); else return(-1); 42 Busca seqüencial em tabela desordenada A tabela está desordenada, mas o índice é mantido ordenado. Um registro no índice para cada elemento da tabela. Eliminação: substitui na tabela, desloca o vetor de índices para manter a ordenação. Inserção: na última posição da tabela, porém deslocando o índice, que é mantido ordenado. Formação do índice: as chaves e suas posições são copiadas para o vetor de índices, que, em seguida, é ordenado. Evita o deslocamento dos registros principais (tarefa computacionalmente cara). No índice, pode ser utilizada a busca binária. Busca em índice ordenado Tabela de índices Chave Registro 7. 7 Tabela 43 11

Se os dados estiverem ordenados em um arranjo, pode-se tirar vantagens dessa ordenação Busca binária A[i]<=A[i+1], se ordem crescente A[i]>=A[i+1], se ordem decrescente O elemento buscado é comparado ao elemento do meio do arranjo Se igual, busca bem-sucedida Se menor, busca-se na metade inferior do arranjo Se maior, busca-se na metade superior do arranjo 45 46 Busca-se por 25 Busca-se por 25 inf=1 sup=n=8 inf=1 meio sup=n=8 25 < 37 47 48 12

Busca-se por 25 Busca-se por 25 inf=1 sup=3 N=8 inf=1 meio sup=3 N=8 =25 49 50 Busca-se por 25 inf=1 meio sup=3 N=8 =25 Escrever em C uma sub-rotina de busca binária por um elemento em um arranjo ordenado Em cada passo, o tamanho do arranjo em que se busca é dividido por 2 51 52 13

int busca_binaria(int A[], int x) { int inf=0, sup=tam_arranjo-1, meio; Complexidade? while (inf<=sup) { meio=(inf+sup)/2; if (x==a[meio]) return(meio); else if (x<a[meio]) sup=meio-1; else inf=meio+1; } } return(-1); 53 54 Complexidade? O(log(n)), pois cada comparação reduz o número de possíveis candidatos por um fator de 2 55 Vantagens Eficiência da busca Simplicidade da implementação Desvantagens Nem todo arranjo está ordenado Exige o uso de um arranjo para armazenar os dados Faz uso do fato de que os índices do vetor são inteiros consecutivos Inserção e remoção de elementos são ineficientes Realocação de elementos 56

A busca binária pode ser usada com a organização de tabela seqüencial indexada Em vez de pesquisar o índice seqüencialmente, pode-se usar uma busca binária Busca por Interpolação Se as chaves estiverem uniformemente distribuídas, esse método pode ser ainda mais eficiente do que a busca binária Com chaves uniformemente distribuídas, pode-se esperar que x esteja aproximadamente na posição meio = inf + (sup inf) * ((x A[inf]) / (A[sup] A[inf])) sendo que inf e sup são redefinidos iterativamente como na busca binária 57 58 Busca por Interpolação Complexidade Busca por Interpolação Desvantagem O(log(log(n))) se as chaves estiverem uniformemente distribuídas Raramente precisará de mais comparações Se as chaves não estiverem uniformemente distribuídas, a busca por interpolação pode ser tão ruim quanto uma busca seqüencial Em situações práticas, as chaves tendem a se aglomerar em torno de determinados valores e não são uniformemente distribuídas Exemplo: há uma quantidade maior de nomes começando com S do que com Q 59 60 15