pesquisa em memória primária · pesquisa em memoria primária estudo de como recuperar...

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

Upload: hatruc

Post on 09-Dec-2018

218 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Pesquisa em Memória Primária · Pesquisa em Memoria Primária Estudo de como recuperar informação a partir de uma grande massa de informação previamente armazenada. A informação

Pesquisa em Memória Primária

Prof. Jonas Potros

Page 2: Pesquisa em Memória Primária · Pesquisa em Memoria Primária Estudo de como recuperar informação a partir de uma grande massa de informação previamente armazenada. A informação

Pesquisa em Memoria Primária

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 Pesquisa sem sucesso

Page 3: Pesquisa em Memória Primária · Pesquisa em Memoria Primária Estudo de como recuperar informação a partir de uma grande massa de informação previamente armazenada. A informação

Pesquisa em Memoria Primária

Conjunto de registros ou arquivos ⇒ TABELAS

Tabela: Associada a entidades de vida curta, criadas na memória interna durante a

execução de um programa.

Arquivo: Geralmente associado a entidades de vida mais longa, armazenadas em

memória externa.

Distinção não é rígida:tabela: arquivo de índices

arquivo: tabela de valores de funções.

Page 4: Pesquisa em Memória Primária · Pesquisa em Memoria Primária Estudo de como recuperar informação a partir de uma grande massa de informação previamente armazenada. A informação

Escolha do Método de Pesquisa

Depende principalmente:

1. Quantidade dos dados envolvidos.

2. Arquivo estar sujeito a inserções e retiradas frequentes.

se conteúdo do arquivo é estável é importante minimizar o tempo depesquisa, sem preocupação com o tempo necessário para estruturar oarquivo.

Page 5: Pesquisa em Memória Primária · Pesquisa em Memoria Primária Estudo de como recuperar informação a partir de uma grande massa de informação previamente armazenada. A informação

Algoritmos de Pesquisa ⇒ Tipos Abstratos de Dados

É importante considerar os algoritmos de pesquisa como tiposabstratos de dados, com um conjunto de operações associado a umaestrutura de dados, de tal forma que haja uma independência deimplementaçã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 especifico.

5. Ordenar um arquivo para obter todos os registros em ordem de acordo com a chave.

6. Ajuntar dois arquivos para formar um arquivo maior.

Page 6: Pesquisa em Memória Primária · Pesquisa em Memoria Primária Estudo de como recuperar informação a partir de uma grande massa de informação previamente armazenada. A informação

Pesquisa sequencial ou linear

• Método de pesquisa mais simples: a partir do primeiro registro, pesquise sequencialmente até encontrar a chave procurada; então pare.

• Armazenamento de um conjunto de registros por meio do tipo estruturado arranjo.

Page 7: Pesquisa em Memória Primária · Pesquisa em Memoria Primária Estudo de como recuperar informação a partir de uma grande massa de informação previamente armazenada. A informação

Pesquisa sequencial ou linear

1. Posicionar-se no início do arquivo

2. Se registro atual = registro desejado

Sucesso, Terminar;

3. Se registro atual > registro desejado

Fracasso, Terminar;

4. Se registro atual < registro desejado

Avançar registro;

5. Se não for final de arquivo

Avance o registro e volte ao passo 2

6. Fracasso, Terminar;

Page 8: Pesquisa em Memória Primária · Pesquisa em Memoria Primária Estudo de como recuperar informação a partir de uma grande massa de informação previamente armazenada. A informação

Pesquisa sequencial ou linear - Exemplo

1º passo | inicialização

i = 0;

encontrado = 0; /*Falso*/

2º passo | busca

while (i < TAMANHO && !encontrado) {

if (vetor[i] == valor) {

encontrado = 1; /*Verdadeiro*/

} else {

i++;

}

}

Page 9: Pesquisa em Memória Primária · Pesquisa em Memoria Primária Estudo de como recuperar informação a partir de uma grande massa de informação previamente armazenada. A informação

Pesquisa sequencial ou linear- Exemplo

3º passo | tratamento do resultado

if (encontrado) {

printf ("Valor esta na posicao", i);

} else {

printf ("Valor não encontrado",valor);

}

Page 10: Pesquisa em Memória Primária · Pesquisa em Memoria Primária Estudo de como recuperar informação a partir de uma grande massa de informação previamente armazenada. A informação

Pesquisa sequencial ou linear – Análise

Quanto tempo a busca sequencial demora para executar? Em outraspalavras, quantas vezes a comparação valor == vetor[i] é executada?

• Caso valor não esteja presente no vetor, n vezes.

• Caso valor esteja presente no vetor:• 1 vez no melhor caso (valor está na primeira posição).

• n vezes no pior caso (valor está na última posição).

• n/2 vezes no caso médio.

Page 11: Pesquisa em Memória Primária · Pesquisa em Memoria Primária Estudo de como recuperar informação a partir de uma grande massa de informação previamente armazenada. A informação

Pesquisa Binária

Algoritmo de busca em tabelas que segue o paradigma de divisão econquista.

Pesquisa em tabela pode ser mais eficiente ⇒ Se registros foremmantidos em ordem

Para saber se uma chave está presente na tabela1. 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 tabela3. Se a chave é maior então o registro procurado está na segunda metade da tabela.4. Repita o processo até que a chave seja encontrada, ou fique apenas um registro cuja chave é diferente da procurada, significado uma pesquisa sem sucesso.

Page 12: Pesquisa em Memória Primária · Pesquisa em Memoria Primária Estudo de como recuperar informação a partir de uma grande massa de informação previamente armazenada. A informação

Pesquisa Binária

Passo 1: inicialização

int direita, esquerda, meio;

encontrado = 0; /*Falso*/

esquerda = 0;

direita = TAMANHO - 1;

Page 13: Pesquisa em Memória Primária · Pesquisa em Memoria Primária Estudo de como recuperar informação a partir de uma grande massa de informação previamente armazenada. A informação

Pesquisa Binária

Passo 2: busca

while(esquerda<=direita && !encontrado){

meio=(direita + esquerda)/2;

if (vetor[meio] == valor)

encontrado = 1; /*Verdadeiro*/

else if (valor < vetor[meio])

direita = meio - 1;

else esquerda = meio + 1;

}

Page 14: Pesquisa em Memória Primária · Pesquisa em Memoria Primária Estudo de como recuperar informação a partir de uma grande massa de informação previamente armazenada. A informação

Pesquisa Binária

Passo 3: tratamento do resultado

if(encontrado){

printf ("Valor encontrado na posicao", meio);

}else{

printf ("Valor não encontrado", valor);

}

Page 15: Pesquisa em Memória Primária · Pesquisa em Memoria Primária Estudo de como recuperar informação a partir de uma grande massa de informação previamente armazenada. A informação

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.

• Consequentemente, a pesquisa binária não deve ser usada em aplicações muito dinâmicas

Page 16: Pesquisa em Memória Primária · Pesquisa em Memoria Primária Estudo de como recuperar informação a partir de uma grande massa de informação previamente armazenada. A informação
Page 17: Pesquisa em Memória Primária · Pesquisa em Memoria Primária Estudo de como recuperar informação a partir de uma grande massa de informação previamente armazenada. A informação

Atividade

1 – Ordenar o vetor e aplicar as verificações do slide 7 dessaapresentação, na pesquisa sequencial para que seja encontrado o valor 1.

2 – Apresentar as implementações das pesquisas sequencial e binária para que encontrem o elemento 8.

3 – Implementação do algoritmo de busca binária de forma recursiva.

4 – Apresente a média do tempo de execução dos dois algoritmos doexercícios 2 e faça suas conclusões.

*Utilize esse vetor para fazer os testes

4 1 3 2 1 9 1 1 8 7 2 4 6 7 3 3 5 7 3 6 6 2 7 1