Buscar

Métodos de Pesquisa

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 30 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 30 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 30 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Estrutura de dadosEstrutura de dados
MMéétodos de Pesquisa todos de Pesquisa 
20132013
Prof Melo
Apresentação
• Técnico em Desenvolvimento de Sistemas - Ibratec, Recife-PE
• Bacharel em Sistemas de Informação – FIR, Recife-PE
• Especialista em Docência no Ensino Superior – Faculdade 
Maurício de Nassau, Recife-PE
• Mestre em Ciência da Computação – UFPE/CIN, Recife-PE
• Currículo Lattes http://lattes.cnpq.br/0759508594425296)
• Homepage https://sites.google.com/site/hildebertomelo/
Disciplinas Lecionadas
• Desenvolvimento de Aplicações Desktop
• Programação Orientada a Objetos
• Estrutura de Dados
• Tecnologia da Informação & Sociedade
• Sistemas Operacionais
• Sistemas Distribuídos
• Introdução a Informática
• Lógica de Programação
• Informática Aplicada a Saúde
• Banco de Dados
• Projeto de Banco de Dados
• Análise de Projetos Orientado a Objetos
• Programação Cliente Servidor
• Linguagens de Programação: C, C#, Pascal, PHP, ASP, Delphi, Java, JavaScript
• Programação WEB
Conteúdo
• Definição
• Arquivos
• Registros
• Chave primária
• Métodos de pesquisa
– Seqüencial
– Seqüencial ordenado
– Seqüencial com ordenação
– Binária
– Relativa
– Hashing
Métodos de Pesquisa
• Algorítimos para manipulação de 
conjuntos de dados
•Métodos para pesquisa e localização 
de um registro ou conjunto de 
registro dentro de um arquivo ou 
tabela
Arquivo ou Tabelas
• Coleção de entradas ou registros, cada 
uma delas formada por um conjunto de 
campos ou atributos
• Armazenamento de informações sobre 
objetos de um mesmo tipo
Número Nome Data Nasc Salário
10130 Jose 25 07 50 1200
10850 Paulo 23 12 51 11000
12700 Pedro 10 06 53 7000
...
11600 Edison 05 03 47 9800
Registro ou Entrada
• Coleção de atributos ou campos que 
formam uma entrada em um arquivo
• Conjunto de informações sobre um 
objeto armazenado em uma coleção
Chave Primária
• Campo ou conjunto de campos que 
identificam unicamente cada uma das 
entradas de uma tabela
• Características:
–O valor da chave primária não pode ser nulo
–Não pode existir mais de um registro ou 
entrada com o mesmo valor para a chave 
primária
Pesquisa Sequencial
• Método mais simples de pesquisa e 
localização de uma entrada em uma tabela
• Varredura seqüencial da tabela até localizar 
o registro cujo atributo chave é o 
procurado, ou encontrar o fim da tabela
• Características:
– Baixo desempenho
– Fácil implementação
Pesquisa Sequencial (Comparações)
• Número de Comparações:
Pior caso: NC = n
Melhor caso: NC = 1
Caso médio: NC = (n + 1) / 2, onde n é o 
número de registros da 
tabela.
Sem sucesso: NC = n + 1
Pesquisa Sequencial (Algoritmo)
algoritmo pesquisa-seqüêncial
defina t: tabela; // Tabela onde será
feita a pesquisa
n, // Número de entradas 
da tabela
arg: chave; // Valor a ser 
localizado
declare i, // Índice para 
percorrer a tabela
r: Numérico // Posição onde se 
localiza a entrada
// procurada na tabela.
r = 0 // r = 0 implica não 
encontrado
repita para i = 1 até n
se t[i].chave = arg então
r = i
Pesquisa Sequencial em Tabelas Ordenadas
• O atributo chave procurado na tabela 
deverá está ordenado.
• Acelera a pesquisa para valores não 
existentes, pois permite comparação >= 
para finalizar a pesquisa na tabela.
• Características:
– Baixo desempenho
– Fácil implementação
– Alta dependência dos dados armazenados 
Pesquisa Sequencial em Tabelas Ordenadas
algoritmo pesquisa-seqüencial-ordenado
defina t: tabela; // Tabela onde será feita a 
pesquisa
n, // Número de entradas da tabela
arg: chave; // Valor a ser localizado
declare i, // Índice para percorrer a tabela
r: numérico // Posição onde se localiza a 
entrada
// procurada na tabela. 
r = 0 // r = 0 implica não encontrado
repita para i = 1 até n
se t[i].chave => arg então
se t[i] = arg então
r = i
fim-se
interrompa
fim-se
fim-repita
fim-algoritmo
Pesquisa Seqüencial com Ordenação das Entradas
• A medida em que se pesquisa os registros 
são ordenados, colocando-se os mais 
utilizados no início da tabela.
• Características:
–Baixo desempenho
– Fácil implementação
–Maior custo de processamento 
Pesquisa Seqüencial com Ordenação das Entradas
algoritmo Pesquisa-Sequencial-Auto-Ordenada
defina t: Ponteiro; // Ponteiro para a primeira entrada da 
tabela (Topo)
arg: chave; // Valor a ser localizado
declare i, // Índice para percorrer a tabela
a, // Índice anterior ao nó pesquisado
r: Numérico // Posição onde se localiza a entrada 
procurada na tabela
r = nil // r = nil implica não encontrado
i = t
repita enquanto (i <> nil) e (r = nil)
se i^.chave => arg então
r = i
se i <> t então
a^.prox = i^.prox
i^.prox = t
t = i
fim-se 
senão
a = i
i = i^.prox
fim-se
fim-repita
Pesquisa Binária
• Método pesquisa aplicado a tabelas ordenadas
• A pesquisa é feita através comparação com o 
registro médio da tabela e restringindo 
sucessivamente o intervalo da mesma
• Características:
– Alta dependência dos dados
– Melhor desempenho
– Implementação mais complexa
Pesquisa Binária (Comparações)
• Número de Comparações:
Melhor caso: NC = 1
Pior caso: NC = n
Caso médio: NC = (log 2 n) + 1, onde n é o 
número de registros da tabela.
Sem sucesso: NC = n + 1
Pesquisa Binária (Algoritmo)
algoritmo pesauisa-binária
defina t: tabela; // Tabela onde será feita a pesquisa
n, // Número de registros da tabela
arg: chave; // Valor a ser localizado
declare i, // Índice início do intervalo
f, // Índice fim do intervalo
p, // Índice da posição atual
r: numérico // Posição onde se localiza a entrada
// procurada na tabela.
r = 0 // r = 0 implica não encontrado
i = 1
f = n
repita enquanto (i <= f) e (r = 0)
p = (i + f) div 2 // Calcula ponto médio do intervalo
se t[p].chave = arg então
r = p
senão se t[p].chave < arg então
i = p + 1
senão
f = p – 1
fim-se
fim-repita
fim-algoritmo
Pesquisa Relativa
• Método de armazenamento e pesquisa em tabelas.
• Aplicado a tabelas cuja chave primária e de pesquisa são:
– Numérica
– Não esparsa
• A organização física dos registros segue o valor da chave de 
cada registro, ou seja, a chave 1 está na posição 1, a 2 na 
posição 2, e a N na n-ésima posição;
• Necessidade de se criar um campo extra para indicar se a 
entrada é válida ou não;
• Características:
– Alta dependência dos dados
– Alta dependência da organização do arquivo
– Perda de espaço em memória
– Melhor desempenho na pesquisa
Pesquisa Relativa (Continuação)
• Cada registro é colocado na posição 
relativa da chave no arquivo:
CoR Descrição Flag
1 Azul 1
2 Amarelo 1
0
4 Verde 1
5 Vermelho 1
0
0
8 Branco 1
… … …
Pesquisa Relativa (Comparações)
• Número de Comparações:
Melhor caso: NC = 1
Pior caso: NC = 1
Caso médio: NC = 1
Sem sucesso:NC = 1
Pesquisa com Cálculo de Endereço (HASH)
• Método de armazenamento e pesquisa em tabelas.
• Consiste em gerar uma função, hashing, que transforma uma chave 
em um número inteiro e não espaço em um determinado 
intervalo.
• O armazenamento é feito calculando-se a posição física do registro 
através da função hashing e gravando o registro na posição 
indicada.
• Caso exista colisão deverá existir um procedimento especial para 
tratamento da mesma.
• Características:
– Menor dependência dos dados;
– Alto desempenho na pesquisa;
– Perda de espaço em memória; 
– Maior complexidade de implementação;
– Necessidade de controle de colisões;
Função Hashing
• Função que mapeia uma chave em um 
inteiro dentro do intervalo [0, M-1], onde 
M é o tamanho máximo da tabela.
• Ex.: f(chave) = resto(chave, M)
onde M deverá ser um número 
primo
Função Hashing para chaves não numéricas
• Pode-se utilizar o valor ASCII de cada caractere da 
chave para gerar um número inteiro dentro do 
intervalo [0, M-1], onde M é o tamanho máximo da 
tabela.• Ex.: f(chave) = soma=0
repita para i=1 até tamanho(chave)
soma=soma + (ORD(chave[i]) * i)
fim-repita 
resultado=resto(soma, M)
Pesquisa Hashing (Continuação)
• Cada registro é colocado na posição 
relativa do resultado da função 
hashing aplicada a chave:
CPF Nome Flag Prox
1111111111
1
Hildeberto 1
2222222222
2
Melo 1
0
3333333333
3
Jose 1
4444444444
4
Carlos 1
0
f(111111111)=0
f(222222222)=1
f(333333333)=3
f(444444444)=4
f(212121212)=6
Pesquisa Hashing (Algoritmo de leitura)
refinamento Hashing(chave)
resultado = resto(chave, 7)
fim-refinamento
refinamento Trata-Registro(pos)
se pos<=0 então // Fim da lista de colisões
“Não encontrado”
senão se T[Pos].chave = arg e T[Pos].flag = 1 então
“Achou”
senão
Trata-Registro(T[pos].prox)
fim-se
fim-refinamento
algoritmo Le-Hashing
defina T: Tabela // Tabela onde será feita a pesquisa
arg: chave // Valor a ser localizado
Trata-Registro(Hashing(arg))
fim-algoritmo
Pesquisa Hashing (Algoritmo de gravação)
refinamento Hashing(chave)
resultado = Resto(chave, 7)
fim-refinamento
refinamento Trata-Registro(pos)
se pos<=0 então // Fim da lista de colisões
Grava-Colisão()
senão se T[Pos].chave = arg e T[Pos].flag = 1 então
“Duplicado”
senão
Trata-Registro(T[pos].prox)
fim-se
fim-refinamento
algoritmo Grava-Hashing
defina T: tabela // Tabela onde será feita a pesquisa
arg: chave // Valor a ser gravado
declare pos: numérico // Posição onde será gravado o registro
pos = Hashing(arg)
repita enquanto T.tamanho() < pos
Grave-Vazio()
fim-repita
se T[Pos].flag = 0 então 
Grava-Registro()
senão
Trata-Registro(pos)
fim-se
fim-algoritmo
Perguntas...
Bibliografia
• Livro(s) Texto(s):
• PREISS, Bruno R. Estrutura de Dados e 
Algoritmos. Rio de Janeiro: Campus, 2001.
• PEREIRA, Silvio L. Estruturas de dados 
fundamentais. São Paulo: Érica, 2000.
• AZEREDO, Paulo A. Métodos de 
Classificação de Dados e Análise de suas 
Complexidades. Rio de Janeiro: Campus, 
1995.
• http://www.nuperc.unifacs.br/
Bibliografia
• Livros de referencia:
• WEISS, M. A. Data structures and algorithm 
analysis in C++. California: Benjamin/Cummings, 
1999.
• SEDGEWICK, R. Algorithms in C++: Fundamentals, 
data structures, sorting, searching. New York: 
Addison-Wesley, 2001.
• TANENBAUM, Aaron; LANGSAM, Y. & 
AUGENSTEIN, M. Estruturas de Dados usando C. 
São Paulo: Makron Books, 1995.
• LAFORE, R. Aprenda em 24 horas estrutura de 
dados e algoritmo. Rio de Janeiro: Campus, 1999.
• MORAES, Celso R. Estruturas de Dados e 
Algoritmos. São Paulo: Berkeley Brasil, 2001.

Continue navegando