Pesquisa Sequencial e Binária



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

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

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

Busca. Pesquisa sequencial

Estruturas de Dados I

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

Métodos de Pesquisa em Memória Primária

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

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

Árvores Binárias de Busca

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

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

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

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

Árvores Binárias de Busca

INF 1007 Programação II

Linguagem C: Árvores Binarias

Árvore Binária de Busca

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

EAD Árvore árvore binária

Pesquisa em Memória Primária Árvores de Busca. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR

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

2ª Lista de Exercícios

Árvores de Pesquisa (Parte I)

Hashing. Rafael Nunes LABSCI-UFMG

Tabela de símbolos: tabelas de espalhamento

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

Filas. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR

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

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

INF 1010 Estruturas de Dados Avançadas

Pesquisa digital. Algoritmos e Estruturas de Dados II

Pesquisa: localização de um Registo num Ficheiro (para aceder ao registo: ler/alterar informação) R. P. António Viera, 23. R. Carlos Seixas, 9, 6º

CIÊNCIA DA COMPUTAÇÃO PROVA PARA TRANSFERÊNCIA

Métodos Computacionais. Árvores

Métodos de Pesquisa 472

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

Aula 16: Pesquisa em Memória Primária - Árvores de Busca. Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP

DAS5102 Fundamentos da Estrutura da Informação

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

struct LISTA item quant

Carlos Eduardo Batista. Centro de Informática - UFPB

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

Árvores Binárias e Busca. Jeane Melo

Algoritmos de pesquisa. Tabelas de dispersão/hash

BCC202 - Estrutura de Dados I

Análise de complexidade

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

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

Métodos Computacionais. Fila

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

Filas. Prof. Túlio Toffolo BCC202 Aula 12 Algoritmos e Estruturas de Dados I

Árvores de Pesquisa (Parte I)

Hashing (Tabela de Dispersão)

Aula 13: Ordenação - Heapsort. Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP

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

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

ias.php

Algoritmos de Busca em Tabelas

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

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

Árvores de Pesquisa. A árvore de pesquisa é uma estrutura de dados muito eficiente para armazenar informação.

Tipos de Dados, Tipos Abstratos de Dados Estruturas de Dados

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

BCC202 - Estrutura de Dados I

Árvores Binárias - continuação

Hashing Letícia Rodrigues Bueno

-Estrutura linear de acesso seqüencial que ordena seus elementos pela seqüência cronológica de sua entrada;

ÁRVORES ABB (ÁRVORES BINÁRIAS DE BUSCAS) Sérgio Carlos Portari Júnior

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

ALGORITMOS E ESTRUTURAS DE DADOS Terceiro Trabalho Prático Recursividade e Pilhas

Algoritmos de Pesquisa e Ordenação em Vectores

EAD Árvore - representação usando listas ligadas

Tabelas Hash. Prof. Túlio Toffolo BCC202 Aula 21 Algoritmos e Estruturas de Dados I

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

DAINF - Departamento de Informática

Possui como idéia central a divisão de um universo de dados a ser organizado em subconjuntos mais gerenciáveis.

struct arv { char info; struct arv* esq; struct arv* dir; };

Árvores Binárias. SCC Algoritmos e Estruturas de Dados I. Prof. Fernando V. Paulovich

INF 1007 Programação II

Aula T20 BCC202 Pesquisa (Parte 2) Árvores de Pesquisa. Túlio Toffolo

Trabalho Prático 1 Revisão de Programação, Tipos Abstratos de Dados e Combinação de Alocação Estática e Dinâmica de Memória

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

Algoritmos e Estruturas de Dados II. Trabalho Prático 2

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

10. Listas Encadeadas

Algoritmos e Estrutura de Dados II

Árvores & Árvores Binárias

O que é um algoritmo? O que é um programa? Algoritmos. Programas. Aula 1 Tipo Abstrato de Dados

Árvores Binárias de Busca

HeapSort Filas de Prioridade Heap. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR

Tabelas de Espalhamento

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

Listas Duplamente Encadeadas

Ordenação: QuickSort. Prof. Túlio Toffolo BCC202 Aula 15 Algoritmos e Estruturas de Dados I

Algoritmos e Estruturas de Dados: Árvore Binária

Transcrição:

Pesquisa Sequencial e Binária Prof. Túlio Toffolo http://www.toffolo.com.br BCC202 Aula 20 Algoritmos e Estruturas de Dados I

Pesquisa em Memória Primária Introdução - Conceitos Básicos Pesquisa Sequencial Pesquisa Binária Árvores de Pesquisa Árvores Binárias de Pesquisa Árvores AVL ( Hashing ) Transformação de Chave Listas Encadeadas Endereçamento Aberto Hashing Perfeito

Introdução Conceitos Básicos Estudo de como recuperar informação a partir de uma grande massa de informação previamente armazenada. A informação é dividida em registros. Cada registro possui uma chave para ser usada na pesquisa. Objetivo da pesquisa: Encontrar uma ou mais ocorrências de registros com chaves iguais à chave de pesquisa. Pesquisa com sucesso X sem sucesso.

Algoritmos de Pesquisa - TADs É importante considerar os algoritmos de pesquisa como tipos abstratos de dados (TADs), de tal forma que haja uma independência de implementação para as operações. Operações mais comuns: 1. Inicializar a estrutura de dados. 2. Pesquisar um ou mais registros com determinada chave. 3. Inserir um novo registro. 4. Retirar um registro específico.

Dicionário Dicionário é um TAD com as operações: 1. Inicializa 2. Pesquisa 3. Insere 4. Retira Analogia com um dicionário da língua portuguesa: Chaves palavras Registros entradas associadas com *pronúncia, definição, sinônimos, outras informações 5

MÉTODOS DE PESQUISA BUSCA SEQUENCIAL

Pesquisa Sequencial Método de pesquisa mais simples: a partir do primeiro registro, pesquise seqüencialmente até encontrar a chave procurada; então pare. Armazenamento de um conjunto de registros por meio de um array.

Pesquisa Sequencial A Busca (find): Pesquisa retorna o índice do registro que contém a chave x; Caso não esteja presente, o valor retornado é -1. A implementação não suporta mais de um registro com uma mesma chave, pois retorna o primeiro encontrado.

Pesquisa Sequencial typedef long TChave; typedef struct { TChave Chave; /* outros componentes */ } TItem; typedef struct { TItem *v; int n, tam; } TDicionario; 9

Pesquisa Sequencial /* inicializa um dicionário */ }( t * void TDicionario_Inicio(TDicionario t->n = 0; t->max = 10; t->v = (TItem*) malloc(sizeof(titem)* t->max); } /* encontra e retorna o índice da chave x no dicionário */ }( c int TDicionario_Find(TDicionario *t, TChave int i; for (i = t->n-1; i >= 0; i--) if (t->v[i].chave == c) return i; } return -1; // retorna -1 caso a chave não seja encontrada 10

Pesquisa Sequencial /* insere um registro no dicionário */ }( x * void TDicionario_Insere(TDicionario *t, TItem if (t->n == t->max) { t->max *= 2; t->v = (TItem*) realloc(t->v, sizeof(titem) * t->max); } } // n é o tamanho t->v[t->n++] = x; 11

Pesquisa Sequencial Análise: Pesquisa com sucesso: melhor caso : C(n) = 1 pior caso : C(n) = n caso médio: C(n) = (n + 1) / 2 Pesquisa sem sucesso: Ø C (n) = n + 1. O algoritmo de pesquisa sequencial é a melhor escolha para o problema de pesquisa com n < 25.

MÉTODOS DE PESQUISA BUSCA BINÁRIA

Pesquisa Binária Pesquisa em tabela pode ser mais eficiente se registros forem mantidos em ordem Para saber se uma chave está presente na tabela 1. Compare a chave com o registro que está na posição do meio da tabela. 2. Se a chave é menor então o registro procurado está na primeira metade da tabela 3. Se a chave é maior então o registro procurado está na segunda metade da tabela. 4. Repita até que a chave seja encontrada ou que se constate que a chave não existe na tabela.

Exemplo de Pesquisa Binária: G

Pesquisa Binária typedef long TChave; typedef struct { TChave Chave; /* outros componentes */ } TItem; typedef struct { TItem *v; int n, tam; } TDicionario; /* inicializa um dicionário */ }( t * void TDicionario_Inicio(TDicionario t->n = 0; t->max = 10; t->v = (TItem*) malloc(sizeof(titem)* t->max); } 16

Pesquisa Binária (Recursiva) /* encontra o índice da chave x no dicionário */ int TDicionario_Find(TDicionario *t, Tchave x) { return TDicionario_Binaria(t, 0, t->n-1, x); // t->n é o tamanho } /* encontra o índice da chave x no dicionário entre esq e dir */ int TDicionario_Binaria(TDicionario *t, int esq, int dir, Tchave x) { int meio = (esq+dir)/2; } if (t->v[meio].chave!= x && esq == dir) return -1; else if (x > t->v[meio].chave) return TDicionario_Binaria(t, meio+1, dir, x); else if (x < t->v[meio].chave) return TDicionario_Binaria(t, esq, meio-1, x); else return meio; 17

Pesquisa Binária /* encontra o índice da chave x no dicionário */ int TDicionario_Find(TDicionario *t, TChave c) { int i, esq, dir; if (t->n == 0) return -1; esq = 0; dir = t->n-1; do { i = (esq + dir) / 2; if (c > t->v[i].chave) esq = i + 1; else dir = i - 1; } while (c!= t->v[i].chave && esq <= dir); } if (c == t->v[i].chave) return i; else return -1; 18

Pesquisa Binária Análise A cada iteração do algoritmo, o tamanho da tabela é dividido ao meio. Logo: o número de vezes que o tamanho da tabela é dividido ao meio é cerca de log n. Ressalva: o custo para manter a tabela ordenada é alto: a cada inserção na posição p da tabela implica no deslocamento dos registros a partir da posição p para as posições seguintes. Conseqüentemente, a pesquisa binária não deve ser usada em aplicações muito dinâmicas.

Perguntas?