Métodos de Busca -...

67
Métodos de Busca Parte 1 Introdução à Ciência da Computação II Prof. Diego Raphael Amancio Baseado no material do Prof. Rudinei Goularte e do Prof. Thiago A. S. Pardo

Transcript of Métodos de Busca -...

Page 1: Métodos de Busca - wiki.icmc.usp.brwiki.icmc.usp.br/images/1/12/SCC-601-Aula_12-Métodos_de_Busca-… · 3 Introdução ! O problema da busca (ou pesquisa) “Dado um conjunto de

Métodos de Busca Parte 1

Introdução à Ciência da Computação II Prof. Diego Raphael Amancio

Baseado no material do Prof. Rudinei Goularte e do Prof. Thiago A. S. Pardo

Page 2: Métodos de Busca - wiki.icmc.usp.brwiki.icmc.usp.br/images/1/12/SCC-601-Aula_12-Métodos_de_Busca-… · 3 Introdução ! O problema da busca (ou pesquisa) “Dado um conjunto de

2

Introdução

n  Importância em estudar busca n  Busca é uma tarefa muito comum?

n  Vários métodos e estruturas de dados podem ser empregados para se fazer busca n  Quais estruturas de dados?

n  Certos métodos de organização/ordenação de dados podem tornar o processo de busca mais eficiente

Page 3: Métodos de Busca - wiki.icmc.usp.brwiki.icmc.usp.br/images/1/12/SCC-601-Aula_12-Métodos_de_Busca-… · 3 Introdução ! O problema da busca (ou pesquisa) “Dado um conjunto de

3

Introdução

n  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”

Page 4: Métodos de Busca - wiki.icmc.usp.brwiki.icmc.usp.br/images/1/12/SCC-601-Aula_12-Métodos_de_Busca-… · 3 Introdução ! O problema da busca (ou pesquisa) “Dado um conjunto de

4

Termos Relacionados

n  Tabela: termo genérico, pode ser qualquer estrutura de dados usada para armazenamento interno e organização dos dados

n  Uma tabela é um conjunto de elementos, chamados registros

Page 5: Métodos de Busca - wiki.icmc.usp.brwiki.icmc.usp.br/images/1/12/SCC-601-Aula_12-Métodos_de_Busca-… · 3 Introdução ! O problema da busca (ou pesquisa) “Dado um conjunto de

5

Termos Relacionados n  Existe uma chave associada a cada registro, usada para diferenciar

os registros entre si

n  Chave interna: chave está contida dentro do registro, em uma localização específica

n  Chave externa: essas chaves estão contidas em uma tabela de chaves separada que inclui ponteiros para os registros

n  Chave primária: para todo arquivo existe pelo menos um conjunto exclusivo de chaves

n  Dois registros não podem ter o mesmo valor de chave

n  Chave secundária: são as chaves não primárias n  Chaves que não precisam ter seus valores exclusivos

Page 6: Métodos de Busca - wiki.icmc.usp.brwiki.icmc.usp.br/images/1/12/SCC-601-Aula_12-Métodos_de_Busca-… · 3 Introdução ! O problema da busca (ou pesquisa) “Dado um conjunto de

6

Termos Relacionados

n  Algoritmo de busca

n  Formalmente, é o algoritmo que aceita um argumento a e tenta encontrar o registro cuja chave seja a

Page 7: Métodos de Busca - wiki.icmc.usp.brwiki.icmc.usp.br/images/1/12/SCC-601-Aula_12-Métodos_de_Busca-… · 3 Introdução ! O problema da busca (ou pesquisa) “Dado um conjunto de

7

Termos Relacionados n  Operações na tabela

n  Inserção: adicionar um novo elemento à tabela

n  Algoritmo de busca e inserção: se não encontra o registro, insere um novo

n  Remoção: retirar um elemento da tabela

n  Recuperação: procurar um elemento na tabela e, se achá-lo, torná-lo disponível

Page 8: Métodos de Busca - wiki.icmc.usp.brwiki.icmc.usp.br/images/1/12/SCC-601-Aula_12-Métodos_de_Busca-… · 3 Introdução ! O problema da busca (ou pesquisa) “Dado um conjunto de

8

Tipos de Busca n  A tabela pode ser:

n  Um vetor de registros n  Uma lista encadeada n  Uma árvore n  Etc.

n  A tabela pode ficar: n  Totalmente na memória (busca interna) n  Totalmente no armazenamento auxiliar (busca

externa) n  Dividida entre ambos

Page 9: Métodos de Busca - wiki.icmc.usp.brwiki.icmc.usp.br/images/1/12/SCC-601-Aula_12-Métodos_de_Busca-… · 3 Introdução ! O problema da busca (ou pesquisa) “Dado um conjunto de

9

Tipos de Busca n  Algumas técnicas de busca em memória interna

são n  Busca Seqüencial n  Busca Binária n  Busca por Interpolação n  Busca em Árvores n  Hashing

n  O objetivo é encontrar um dado registro com o menor custo n  Cada técnica possui vantagens e desvantagens

Page 10: Métodos de Busca - wiki.icmc.usp.brwiki.icmc.usp.br/images/1/12/SCC-601-Aula_12-Métodos_de_Busca-… · 3 Introdução ! O problema da busca (ou pesquisa) “Dado um conjunto de

10

Busca Seqüencial n  A busca seqüencial é a forma mais simples de busca

n  É aplicável a uma tabela organizada como um vetor ou como uma lista encadeada

Page 11: Métodos de Busca - wiki.icmc.usp.brwiki.icmc.usp.br/images/1/12/SCC-601-Aula_12-Métodos_de_Busca-… · 3 Introdução ! O problema da busca (ou pesquisa) “Dado um conjunto de

11

Busca Seqüencial

n  Busca mais simples que há n  Percorre-se registro por registro em busca

da chave

12 25 33 37 48 57 86 92 1 N=8

Page 12: Métodos de Busca - wiki.icmc.usp.brwiki.icmc.usp.br/images/1/12/SCC-601-Aula_12-Métodos_de_Busca-… · 3 Introdução ! O problema da busca (ou pesquisa) “Dado um conjunto de

12

Busca Seqüencial

n  Busca mais simples que há n  Percorre-se registro por registro em busca

da chave

12 25 33 37 48 57 86 92 1 N=8

Procure por 48

Page 13: Métodos de Busca - wiki.icmc.usp.brwiki.icmc.usp.br/images/1/12/SCC-601-Aula_12-Métodos_de_Busca-… · 3 Introdução ! O problema da busca (ou pesquisa) “Dado um conjunto de

13

Busca Seqüencial

n  Busca mais simples que há n  Percorre-se registro por registro em busca

da chave

12 25 33 37 48 57 86 92 1 N=8

Procure por 48

Page 14: Métodos de Busca - wiki.icmc.usp.brwiki.icmc.usp.br/images/1/12/SCC-601-Aula_12-Métodos_de_Busca-… · 3 Introdução ! O problema da busca (ou pesquisa) “Dado um conjunto de

14

Busca Seqüencial

n  Busca mais simples que há n  Percorre-se registro por registro em busca

da chave

12 25 33 37 48 57 86 92 1 N=8

Procure por 48

Page 15: Métodos de Busca - wiki.icmc.usp.brwiki.icmc.usp.br/images/1/12/SCC-601-Aula_12-Métodos_de_Busca-… · 3 Introdução ! O problema da busca (ou pesquisa) “Dado um conjunto de

15

Busca Seqüencial

n  Busca mais simples que há n  Percorre-se registro por registro em busca

da chave

12 25 33 37 48 57 86 92 1 N=8

Procure por 48

Page 16: Métodos de Busca - wiki.icmc.usp.brwiki.icmc.usp.br/images/1/12/SCC-601-Aula_12-Métodos_de_Busca-… · 3 Introdução ! O problema da busca (ou pesquisa) “Dado um conjunto de

16

Busca Seqüencial

n  Busca mais simples que há n  Percorre-se registro por registro em busca

da chave

12 25 33 37 48 57 86 92 1 N=8

Procure por 48

Page 17: Métodos de Busca - wiki.icmc.usp.brwiki.icmc.usp.br/images/1/12/SCC-601-Aula_12-Métodos_de_Busca-… · 3 Introdução ! O problema da busca (ou pesquisa) “Dado um conjunto de

17

Busca Seqüencial

n  Busca mais simples que há n  Percorre-se registro por registro em busca

da chave

12 25 33 37 48 57 86 92 1 N=8

Procure por 48

Page 18: Métodos de Busca - wiki.icmc.usp.brwiki.icmc.usp.br/images/1/12/SCC-601-Aula_12-Métodos_de_Busca-… · 3 Introdução ! O problema da busca (ou pesquisa) “Dado um conjunto de

18

Busca Seqüencial n  Implementação

n  Algoritmo de busca seqüencial em um vetor A, com N posições (0 até N-1), sendo x a chave procurada

Page 19: Métodos de Busca - wiki.icmc.usp.brwiki.icmc.usp.br/images/1/12/SCC-601-Aula_12-Métodos_de_Busca-… · 3 Introdução ! O problema da busca (ou pesquisa) “Dado um conjunto de

19

Busca Seqüencial

n  Uma maneira de tornar o algoritmo mais eficiente é usar um sentinela

n  Sentinela: consiste em adicionar um elemento de valor x no final da tabela

n  Qual a vantagem de se usar um nó sentinela?

Page 20: Métodos de Busca - wiki.icmc.usp.brwiki.icmc.usp.br/images/1/12/SCC-601-Aula_12-Métodos_de_Busca-… · 3 Introdução ! O problema da busca (ou pesquisa) “Dado um conjunto de

20

Busca Seqüencial

n  Uma maneira de tornar o algoritmo mais eficiente é usar um sentinela

n  Sentinela: consiste em adicionar um elemento de valor x no final da tabela

n  O sentinela garante que o elemento será encontrado, o que elimina um teste, melhorando a performance do algoritmo

Page 21: Métodos de Busca - wiki.icmc.usp.brwiki.icmc.usp.br/images/1/12/SCC-601-Aula_12-Métodos_de_Busca-… · 3 Introdução ! O problema da busca (ou pesquisa) “Dado um conjunto de

21

Busca Seqüencial n  Implementação

n  Busca seqüencial com sentinela

Page 22: Métodos de Busca - wiki.icmc.usp.brwiki.icmc.usp.br/images/1/12/SCC-601-Aula_12-Métodos_de_Busca-… · 3 Introdução ! O problema da busca (ou pesquisa) “Dado um conjunto de

22

Busca Seqüencial

n  Limitações do vetor n  Tamanho fixo

n  Pode desperdiçar ou faltar espaço

n  Alternativa n  Lista encadeada

n  O que muda na busca seqüencial?

Page 23: Métodos de Busca - wiki.icmc.usp.brwiki.icmc.usp.br/images/1/12/SCC-601-Aula_12-Métodos_de_Busca-… · 3 Introdução ! O problema da busca (ou pesquisa) “Dado um conjunto de

23

Busca Seqüencial

Page 24: Métodos de Busca - wiki.icmc.usp.brwiki.icmc.usp.br/images/1/12/SCC-601-Aula_12-Métodos_de_Busca-… · 3 Introdução ! O problema da busca (ou pesquisa) “Dado um conjunto de

24

Busca Seqüencial

n  Complexidade

n  Se o registro for o primeiro: 1 comparação

n  Se o registro procurado for o último: N comparações

n  Se for igualmente provável que o argumento apareça em qualquer posição da tabela, em média: (n+1)/2 comparações

n  Se a busca for mal sucedida: N comparações

n  Logo, a busca seqüencial, no pior caso, é O(n)

Page 25: Métodos de Busca - wiki.icmc.usp.brwiki.icmc.usp.br/images/1/12/SCC-601-Aula_12-Métodos_de_Busca-… · 3 Introdução ! O problema da busca (ou pesquisa) “Dado um conjunto de

25

Busca Seqüencial

n  Arranjo não ordenado

n  Inserção no final do arranjo

n  Remoção n  Realocação dos registros acima do registro

removido

Page 26: Métodos de Busca - wiki.icmc.usp.brwiki.icmc.usp.br/images/1/12/SCC-601-Aula_12-Métodos_de_Busca-… · 3 Introdução ! O problema da busca (ou pesquisa) “Dado um conjunto de

26

Busca Seqüencial

n  Para aumentar a eficiência

n  Reordenar continuamente a tabela de modo que os registros mais acessados sejam deslocados para o início

n  A) Método mover-para-frente: sempre que uma pesquisa obtiver êxito, o registro recuperado é colocado no início da lista

n  B) Método da transposição: um registro recuperado com sucesso é trocado com o registro imediatamente anterior

n  Ambos se baseiam no fenômeno da recuperação recorrente de registros

Page 27: Métodos de Busca - wiki.icmc.usp.brwiki.icmc.usp.br/images/1/12/SCC-601-Aula_12-Métodos_de_Busca-… · 3 Introdução ! O problema da busca (ou pesquisa) “Dado um conjunto de

27

Busca Seqüencial

n  Desvantagens do método mover-para-frente n  Uma única recuperação não implica que o registro

será freqüentemente recuperado n  Perda de eficiência para os outros registros

n  O método é mais “caro” em vetores do que em listas n  Por quê?

n  Vantagens do método mover-para frente n  Possui resultados melhores para quantidades

pequena e média de buscas

Page 28: Métodos de Busca - wiki.icmc.usp.brwiki.icmc.usp.br/images/1/12/SCC-601-Aula_12-Métodos_de_Busca-… · 3 Introdução ! O problema da busca (ou pesquisa) “Dado um conjunto de

28

Busca Seqüencial n  Busca seqüencial em tabela ordenada

n  A eficiência da operação de busca melhora se as chaves dos registros estiverem ordenadas

n  No pior caso (caso em que a chave não é encontrada), são necessárias N comparações quando as chaves estão desordenadas

n  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

Page 29: Métodos de Busca - wiki.icmc.usp.brwiki.icmc.usp.br/images/1/12/SCC-601-Aula_12-Métodos_de_Busca-… · 3 Introdução ! O problema da busca (ou pesquisa) “Dado um conjunto de

29

Busca Seqüencial n  Busca seqüencial indexada

n  Existe uma tabela auxiliar, chamada tabela de índices, além do próprio arquivo ordenado

n  Cada elemento na tabela de índices contém uma chave (kindex) e um indicador do registro no arquivo que corresponde a kindex

n  Faz-se a busca a partir do ponto indicado na tabela, sendo que a busca não precisa ser feita desde o começo

n  Pode ser implementada como um vetor ou como uma lista encadeada

n  O indicador da posição na tabela pode ser um ponteiro ou uma variável inteira

Page 30: Métodos de Busca - wiki.icmc.usp.brwiki.icmc.usp.br/images/1/12/SCC-601-Aula_12-Métodos_de_Busca-… · 3 Introdução ! O problema da busca (ou pesquisa) “Dado um conjunto de

30

Busca Seqüencial

321

592

876

...

kindex

Tabela de índices ....

14

38

115

321

387

512

567

583

592

611

741

811

876

....

Chave Registro

Page 31: Métodos de Busca - wiki.icmc.usp.brwiki.icmc.usp.br/images/1/12/SCC-601-Aula_12-Métodos_de_Busca-… · 3 Introdução ! O problema da busca (ou pesquisa) “Dado um conjunto de

31

Busca Seqüencial

n  Busca seqüencial indexada

n  Se a tabela for muito grande, pode-se ainda usar a tabela de índices secundária

n  O índice secundário é um índice para o índice primário

Page 32: Métodos de Busca - wiki.icmc.usp.brwiki.icmc.usp.br/images/1/12/SCC-601-Aula_12-Métodos_de_Busca-… · 3 Introdução ! O problema da busca (ou pesquisa) “Dado um conjunto de

32

Busca Seqüencial

321

592

876

...

kindex

Índice primário ....

14

38

115

321

387

512

567

583

592

611

741

811

876

....

Chave Registro

321

876

...

kindex

Índice secundário

Page 33: Métodos de Busca - wiki.icmc.usp.brwiki.icmc.usp.br/images/1/12/SCC-601-Aula_12-Métodos_de_Busca-… · 3 Introdução ! O problema da busca (ou pesquisa) “Dado um conjunto de

33

Busca Seqüencial n  Vantagem

n  Os itens na tabela poderão ser examinados seqüencialmente sem que todos os registros precisem ser acessados

n  O tempo de busca diminui consideravelmente

n  Desvantagens

Page 34: Métodos de Busca - wiki.icmc.usp.brwiki.icmc.usp.br/images/1/12/SCC-601-Aula_12-Métodos_de_Busca-… · 3 Introdução ! O problema da busca (ou pesquisa) “Dado um conjunto de

34

Busca Seqüencial n  Vantagem

n  Os itens na tabela poderão ser examinados seqüencialmente sem que todos os registros precisem ser acessados

n  O tempo de busca diminui consideravelmente

n  Desvantagens n  A tabela tem que estar ordenada

Page 35: Métodos de Busca - wiki.icmc.usp.brwiki.icmc.usp.br/images/1/12/SCC-601-Aula_12-Métodos_de_Busca-… · 3 Introdução ! O problema da busca (ou pesquisa) “Dado um conjunto de

35

Busca Seqüencial n  Vantagem

n  Os itens na tabela poderão ser examinados seqüencialmente sem que todos os registros precisem ser acessados

n  O tempo de busca diminui consideravelmente

n  Desvantagens n  A tabela tem que estar ordenada n  Exige espaço adicional para armazenar a(s) tabela(s) de

índices

n  Algo mais?

Page 36: Métodos de Busca - wiki.icmc.usp.brwiki.icmc.usp.br/images/1/12/SCC-601-Aula_12-Métodos_de_Busca-… · 3 Introdução ! O problema da busca (ou pesquisa) “Dado um conjunto de

36

Busca Seqüencial n  Vantagem

n  Os itens na tabela poderão ser examinados seqüencialmente sem que todos os registros precisem ser acessados

n  O tempo de busca diminui consideravelmente

n  Desvantagens n  A tabela tem que estar ordenada n  Exige espaço adicional para armazenar a(s) tabela(s) de

índices

n  Cuidados com inserção e remoção

Page 37: Métodos de Busca - wiki.icmc.usp.brwiki.icmc.usp.br/images/1/12/SCC-601-Aula_12-Métodos_de_Busca-… · 3 Introdução ! O problema da busca (ou pesquisa) “Dado um conjunto de

37

Busca Seqüencial

n  Remoção

n  Remove-se o elemento e rearranja-se a tabela inteira e o(s) índice(s)

n  Marca-se a posição do elemento removido, indicando que ela pode ser ocupada por um outro elemento futuramente

n  A posição da tabela fica vazia

Page 38: Métodos de Busca - wiki.icmc.usp.brwiki.icmc.usp.br/images/1/12/SCC-601-Aula_12-Métodos_de_Busca-… · 3 Introdução ! O problema da busca (ou pesquisa) “Dado um conjunto de

38

Busca Seqüencial

n  Inserção

n  Se houver espaço vago na tabela, rearranjam-se os elementos localmente

n  Se não houver espaço vago n  Rearranjar a tabela a partir do ponto

apropriado e reconstruir o(s) índice(s)

Page 39: Métodos de Busca - wiki.icmc.usp.brwiki.icmc.usp.br/images/1/12/SCC-601-Aula_12-Métodos_de_Busca-… · 3 Introdução ! O problema da busca (ou pesquisa) “Dado um conjunto de

39

Busca Seqüencial

n  Inserção do elemento 512 com espaço vago n  567 e 583 descem n  512 é inserido

321

592

876

...

kindex

....

14

38

115

321

387

567

583

592

611

741

811

876

....

Chave Registro

Page 40: Métodos de Busca - wiki.icmc.usp.brwiki.icmc.usp.br/images/1/12/SCC-601-Aula_12-Métodos_de_Busca-… · 3 Introdução ! O problema da busca (ou pesquisa) “Dado um conjunto de

40

Busca Seqüencial

n  Inserção do elemento 512 com espaço vago n  567 e 583 descem n  512 é inserido

321

592

876

...

kindex

....

14

38

115

321

387

512

567

583

592

611

741

811

876

....

Chave Registro

Page 41: Métodos de Busca - wiki.icmc.usp.brwiki.icmc.usp.br/images/1/12/SCC-601-Aula_12-Métodos_de_Busca-… · 3 Introdução ! O problema da busca (ou pesquisa) “Dado um conjunto de

41

Busca Seqüencial

n  Inserção do elemento 512 sem espaço vago n  Elementos a partir

de 567 descem n  512 é inserido n  Índice é re-

construído

321

592

876

...

kindex

....

14

38

115

321

387

567

583

585

592

611

741

811

876

....

Chave Registro

Page 42: Métodos de Busca - wiki.icmc.usp.brwiki.icmc.usp.br/images/1/12/SCC-601-Aula_12-Métodos_de_Busca-… · 3 Introdução ! O problema da busca (ou pesquisa) “Dado um conjunto de

42

Busca Seqüencial

n  Inserção do elemento 512 sem espaço vago n  Elementos a partir

de 567 descem n  512 é inserido n  Índice é re-

construído

321

592

876

...

kindex

....

14

38

115

321

387

512

567

583

585

592

611

741

811

....

Chave Registro

Page 43: Métodos de Busca - wiki.icmc.usp.brwiki.icmc.usp.br/images/1/12/SCC-601-Aula_12-Métodos_de_Busca-… · 3 Introdução ! O problema da busca (ou pesquisa) “Dado um conjunto de

43

Busca Seqüencial n  Como montar o índice primário

n  Se a tabela não estiver ordenada, ordene-a

n  Divide-se o número de elementos da tabela pelo tamanho do índice desejado: n/tamanho-índice

n  Para montar o índice, recuperam-se da tabela os elementos 0, 0+n/tamanho-índice, 0+2*n/tamanho-índice, etc.

n  Cada elemento do índice representa n/tamanho-índice elementos da tabela

Page 44: Métodos de Busca - wiki.icmc.usp.brwiki.icmc.usp.br/images/1/12/SCC-601-Aula_12-Métodos_de_Busca-… · 3 Introdução ! O problema da busca (ou pesquisa) “Dado um conjunto de

44

Busca Seqüencial n  Exemplo

n  Divide-se o número de elementos da tabela pelo tamanho do índice desejado

n  Se a tabela tem 1.000 elementos e deseja-se um índice primário de 10 elementos, faz-se 1.000/10=100

n  Para montar o índice, recuperam-se da tabela os elementos 0, 0+n/tamanho-índice, 0+2*n/tamanho-índice, etc.

n  O índice primário é montado com os elementos das posições 0, 100, 200, etc. da tabela

n  Cada elemento do índice representa n/tamanho-índice elementos da tabela

n  Cada elemento do índice primário aponta para o começo de um grupo de 100 elementos da tabela

Page 45: Métodos de Busca - wiki.icmc.usp.brwiki.icmc.usp.br/images/1/12/SCC-601-Aula_12-Métodos_de_Busca-… · 3 Introdução ! O problema da busca (ou pesquisa) “Dado um conjunto de

45

Busca Seqüencial

n  Para montar um índice secundário, aplica-se raciocínio similar sobre o índice primário

n  Em geral, não são necessários mais do que 2 índices

Page 46: Métodos de Busca - wiki.icmc.usp.brwiki.icmc.usp.br/images/1/12/SCC-601-Aula_12-Métodos_de_Busca-… · 3 Introdução ! O problema da busca (ou pesquisa) “Dado um conjunto de

46

Busca Seqüencial

n  Exercício n  Escrever em C a sub-rotina para produzir o

índice primário de um vetor ordenado void criaIndice

n  bloco_indice indice[] n  int tamanho_indice n  int v[] n  int n

kindex

pos

Page 47: Métodos de Busca - wiki.icmc.usp.brwiki.icmc.usp.br/images/1/12/SCC-601-Aula_12-Métodos_de_Busca-… · 3 Introdução ! O problema da busca (ou pesquisa) “Dado um conjunto de

Implementação

47

Page 48: Métodos de Busca - wiki.icmc.usp.brwiki.icmc.usp.br/images/1/12/SCC-601-Aula_12-Métodos_de_Busca-… · 3 Introdução ! O problema da busca (ou pesquisa) “Dado um conjunto de

48

Busca Seqüencial

n  Exercício (nota adicional)

n  Escrever em C uma sub-rotina de busca sequencial indexada por um elemento em uma tabela com índice primário

n  int bsi à retorna posicao n  int v[], int n n  bloco_indice indice[], int tamanho_indice n  int x

Page 49: Métodos de Busca - wiki.icmc.usp.brwiki.icmc.usp.br/images/1/12/SCC-601-Aula_12-Métodos_de_Busca-… · 3 Introdução ! O problema da busca (ou pesquisa) “Dado um conjunto de

Implementação

49

Page 50: Métodos de Busca - wiki.icmc.usp.brwiki.icmc.usp.br/images/1/12/SCC-601-Aula_12-Métodos_de_Busca-… · 3 Introdução ! O problema da busca (ou pesquisa) “Dado um conjunto de

50

Busca Binária

n  Se os dados estiverem ordenados em um arranjo, pode-se tirar vantagens dessa ordenação n  Busca binária

A[i]<=A[i+1], se ordem crescente

A[i]>=A[i+1], se ordem decrescente

Page 51: Métodos de Busca - wiki.icmc.usp.brwiki.icmc.usp.br/images/1/12/SCC-601-Aula_12-Métodos_de_Busca-… · 3 Introdução ! O problema da busca (ou pesquisa) “Dado um conjunto de

51

Busca Binária

n  O elemento buscado é comparado ao elemento do meio do arranjo n  Se igual, busca bem-sucedida n  Se menor, busca-se na metade inferior do

arranjo n  Se maior, busca-se na metade superior do

arranjo

Page 52: Métodos de Busca - wiki.icmc.usp.brwiki.icmc.usp.br/images/1/12/SCC-601-Aula_12-Métodos_de_Busca-… · 3 Introdução ! O problema da busca (ou pesquisa) “Dado um conjunto de

52

12 25 33 37 48 57 86 92 inf=1 sup=N=8

Busca Binária

n  Busca-se por 25

Page 53: Métodos de Busca - wiki.icmc.usp.brwiki.icmc.usp.br/images/1/12/SCC-601-Aula_12-Métodos_de_Busca-… · 3 Introdução ! O problema da busca (ou pesquisa) “Dado um conjunto de

53

12 25 33 37 48 57 86 92

25 < 37

meio inf=1 sup=N=8

n  Busca-se por 25

Busca Binária

Page 54: Métodos de Busca - wiki.icmc.usp.brwiki.icmc.usp.br/images/1/12/SCC-601-Aula_12-Métodos_de_Busca-… · 3 Introdução ! O problema da busca (ou pesquisa) “Dado um conjunto de

54

12 25 33 37 48 57 86 92 sup=3 inf=1 N=8

Busca Binária

n  Busca-se por 25

Page 55: Métodos de Busca - wiki.icmc.usp.brwiki.icmc.usp.br/images/1/12/SCC-601-Aula_12-Métodos_de_Busca-… · 3 Introdução ! O problema da busca (ou pesquisa) “Dado um conjunto de

55

12 25 33 37 48 57 86 92 N=8

=25

meio sup=3 inf=1

n  Busca-se por 25

Busca Binária

Page 56: Métodos de Busca - wiki.icmc.usp.brwiki.icmc.usp.br/images/1/12/SCC-601-Aula_12-Métodos_de_Busca-… · 3 Introdução ! O problema da busca (ou pesquisa) “Dado um conjunto de

56

12 25 33 37 48 57 86 92 N=8

=25

meio sup=3 inf=1

n  Busca-se por 25

Em cada passo, o tamanho do arranjo em que se busca é dividido por 2

Busca Binária

Page 57: Métodos de Busca - wiki.icmc.usp.brwiki.icmc.usp.br/images/1/12/SCC-601-Aula_12-Métodos_de_Busca-… · 3 Introdução ! O problema da busca (ou pesquisa) “Dado um conjunto de

57

Busca Binária

n  Exercício

n  Escrever em C uma sub-rotina de busca binária por um elemento em um arranjo ordenado

n  Versão recursiva n  Versão não recursiva

Page 58: Métodos de Busca - wiki.icmc.usp.brwiki.icmc.usp.br/images/1/12/SCC-601-Aula_12-Métodos_de_Busca-… · 3 Introdução ! O problema da busca (ou pesquisa) “Dado um conjunto de

58

Page 59: Métodos de Busca - wiki.icmc.usp.brwiki.icmc.usp.br/images/1/12/SCC-601-Aula_12-Métodos_de_Busca-… · 3 Introdução ! O problema da busca (ou pesquisa) “Dado um conjunto de

59

Page 60: Métodos de Busca - wiki.icmc.usp.brwiki.icmc.usp.br/images/1/12/SCC-601-Aula_12-Métodos_de_Busca-… · 3 Introdução ! O problema da busca (ou pesquisa) “Dado um conjunto de

60

Busca Binária

n  Complexidades?

Page 61: Métodos de Busca - wiki.icmc.usp.brwiki.icmc.usp.br/images/1/12/SCC-601-Aula_12-Métodos_de_Busca-… · 3 Introdução ! O problema da busca (ou pesquisa) “Dado um conjunto de

61

Busca Binária

n  Complexidades? n  O(log(n)), pois cada comparação reduz o

número de possíveis candidatos por um fator de 2

Page 62: Métodos de Busca - wiki.icmc.usp.brwiki.icmc.usp.br/images/1/12/SCC-601-Aula_12-Métodos_de_Busca-… · 3 Introdução ! O problema da busca (ou pesquisa) “Dado um conjunto de

62

Busca Binária

n  Vantagens n  Eficiência da busca n  Simplicidade da implementação

n  Desvantagens n  Nem todo arranjo está ordenado

Page 63: Métodos de Busca - wiki.icmc.usp.brwiki.icmc.usp.br/images/1/12/SCC-601-Aula_12-Métodos_de_Busca-… · 3 Introdução ! O problema da busca (ou pesquisa) “Dado um conjunto de

63

Busca Binária

n  Vantagens n  Eficiência da busca n  Simplicidade da implementação

n  Desvantagens n  Nem todo arranjo está ordenado n  Exige o uso de um arranjo para armazenar os dados

n  Faz uso do fato de que os índices do vetor são inteiros consecutivos

n  Inserção e remoção de elementos são ineficientes n  Realocação de elementos

Page 64: Métodos de Busca - wiki.icmc.usp.brwiki.icmc.usp.br/images/1/12/SCC-601-Aula_12-Métodos_de_Busca-… · 3 Introdução ! O problema da busca (ou pesquisa) “Dado um conjunto de

64

Busca Binária

n  A busca binária pode ser usada com a organização de tabela seqüencial indexada n  Em vez de pesquisar o índice seqüencialmente,

pode-se usar uma busca binária

Page 65: Métodos de Busca - wiki.icmc.usp.brwiki.icmc.usp.br/images/1/12/SCC-601-Aula_12-Métodos_de_Busca-… · 3 Introdução ! O problema da busca (ou pesquisa) “Dado um conjunto de

65

Busca por Interpolação n  Se as chaves estiverem uniformemente distribuídas,

esse método pode ser ainda mais eficiente do que a busca binária

n  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

Page 66: Métodos de Busca - wiki.icmc.usp.brwiki.icmc.usp.br/images/1/12/SCC-601-Aula_12-Métodos_de_Busca-… · 3 Introdução ! O problema da busca (ou pesquisa) “Dado um conjunto de

66

Busca por Interpolação

n  Complexidade

n  O(log(log(n))) se as chaves estiverem uniformemente distribuídas

n  Raramente precisará de mais comparações

n  Se as chaves não estiverem uniformemente distribuídas, a busca por interpolação pode ser tão ruim quanto uma busca seqüencial

Page 67: Métodos de Busca - wiki.icmc.usp.brwiki.icmc.usp.br/images/1/12/SCC-601-Aula_12-Métodos_de_Busca-… · 3 Introdução ! O problema da busca (ou pesquisa) “Dado um conjunto de

67

Busca por Interpolação

n  Desvantagem

n  Em situações práticas, as chaves tendem a se aglomerar em torno de determinados valores e não são uniformemente distribuídas

n  Exemplo: há uma quantidade maior de nomes começando com “S” do que com “Q”