Você está na página 1de 11

Projeto e Análise de Algoritmos

Algoritmos de Busca

T1530A, T7043A

IV. Algoritmos de Busca


Projeto e Análise de Algoritmos
Algoritmos de Busca

Sumário
IV.1. Introdução ......................................................................................... 3
IV.2. Busca Seqüencial ............................................................................. 4
IV.3. Busca Binária.................................................................................... 6
IV.4. Árvore de Busca Binária ................................................................. 10
Projeto e Análise de Algoritmos
Algoritmos de Busca

IV.1. INTRODUÇÃO

Busca: Operação fundamental em computação. Objetiva recuperar um


pedaço particular de informação em uma grande quantidade de
dados previamente armazenados.

Conceitos básicos:

Registros (Records) : contém as informações

Chave (Key) : cada registro contem uma chave a partir da qual se


localiza a informação desejada.

Exemplos:

Dicionário – (dados brutos armazenados)


chave: uma palavra
registro de interesse: o significado e/ou uso de uma
determinada palavra (chave).

Banco
chave: número da conta
registro de interesse: informação sobre o cliente
responsável pela conta (incluindo dados pessoais e
transações).

Métodos de busca:
• busca seqüencial
• busca binária
• busca em árvore binária
• busca em árvore balanceada
• hashing

página 3
Projeto e Análise de Algoritmos
Algoritmos de Busca

IV.2. BUSCA SEQÜENCIAL

Premissa: Os dados são números inteiros.

Aplicação: Verificação de transações envolvendo cartões de crédito


“marcados” (roubados ou suspeitos).
Dadas M transações verificar se estas envolvem os N cartões
marcados.
N ≅ 103 - 106 cartões
M ≅ 106 - 109 transações

Objetivo: Estimar tempo de execução quando os valores de M e N


correspondem às faixas indicadas.

Algoritmo de busca (pseudocódigo):

Função busca_sequencial (A[ ] : Vetor de inteiro, N, C: inteiro) : inteiro

rem A[ ] % a lista de cartões marcados


rem N % número de cartões
rem C % um número de cartão
inicio
i : inteiro

para i = 1 até N, faça


se C = A[i] então retorna i
retorna –1
fim.

Exercício: Implementar a busca seqüencial em uma função na linguagem C.

Tempo de execução: Depende de o número do cartão estar ou não


na lista A.

página 4
Projeto e Análise de Algoritmos
Algoritmos de Busca

Melhor resposta: C está no início da lista A.

Pior resposta: C não está na lista A. (A presença ou não de C na


lista A[ ] só pode ser definida após percorre-la toda).

Tempo de execução do algoritmo: depende dos dados.

Previsão ⇒ Hipótese sobre os dados.


- Aleatoriamente distribuídos
(cada número na lista é igualmente provável como objeto de
busca)

Análise deve considerar a possibilidade de sucesso (C está na lista) e


de insucesso.

Propriedade 1: A busca seqüencial examina N números para cada


busca sem sucesso, e N/2 (média, aproximadamente)
números para busca com sucesso.

Observação:

1 + 2 + 3 + ... + ( N − 1) + N ( N + 1)
=
N 2

Portanto, o tempo de execução deste algoritmo é proporcional a N,


assumindo que o custo de comparação de 2 números é constante.

Aceleração da busca: Ordenação de A


(A ordenação é proporcional a N log(N))

Nestes casos, a busca pode ser interrompida quando se encontrar


um número em A que é maior do que C. Este procedimento reduz
o custo da busca seqüencial para N/2 números examinados para
busca sem sucesso (o mesmo que o custo para sucesso).

página 5
Projeto e Análise de Algoritmos
Algoritmos de Busca

Propriedade 2: A busca seqüencial em um tabela ordenada examina N


números,
para cada busca, no pior caso, e N/2 números na média.

Resumo: A busca é de ordem (N).

Tudo o que foi discutido até o momento diz respeito a uma busca (ou
seja, a busca de um cartão correspondende a uma transação). Se
tivermos M transações, o tempo total, utilizando a busca seqüencial é
proporcional a MN (média e pior caso).

Avaliação:
Hipótese: comparação é executada em c microsegundos.
Tem-se N = 106 e M = 109.
N
tempo médio é = M c (µs)
2
M
= c segundos
2
10 9
= c segundos
2
109 segundos ≅ 3 décadas

IV.3. BUSCA BINÁRIA

Hipótese: Tabela está ordenada

Idéia básica: Descartar, em cada comparação, metade dos


candidatos.

2o. 3o. 4o. 1o. teste N

log 2 N
6 78
Propriedade: Busca binária nunca examina mais do que [ ln N ] + 1
números.

página 6
Projeto e Análise de Algoritmos
Algoritmos de Busca

Prova exige relações de recorrência:

TN é o número de comparações necessárias para uma busca binária


com N elementos no pior caso. A cada passo, o algoritmo reduz a busca
na tabela à metade.

TN ≤ T[N/2]+1 para N ≥ 2 com T1 = 1

por simplicidade, assumimos N par (N/2 é inteiro).

N = 2n ⇒ n = log2N

TN ≡ T2 n = T2n + 1 = T2 n − 1 + 1
2

= T2 n − 2 + 1 + 1 = T2 n − 2 + 2

= T2 n − 3 + 3

M
= T20 + n = T1 + log 2 N

∴ O ( ln N )

Algoritmo (pseudocódigo)

função busca_binária(A[ ] : inteiro, N, C: inteiro)


inicio
r, m, l: inteiro
r = N; l = 1;

enquanto (r >= l) faça


início
m = (l + r)/2;
se ( C = A[m] ) retorna m;
se ( C < A[m] ) r = m - 1;
senão l = m+1;
fim
retorna -1;

fim

Exercício: Implementar o algoritmo em uma função na linguagem C.

página 7
Projeto e Análise de Algoritmos
Algoritmos de Busca

Avaliação
M transações (109)
N = 106 elementos na lista
cada verificação: c µs
ordem da busca: O ( ln N )

tempo médio total = log10(N) M c µs


= 6 . 109 . c . 10-6 s = 6 c 103 s

6000s ≅ < 2horas

obs: ln 106 = 6 ln 10 ≅ 6 . 2,30

log10 10 1
log 2 10 6 = 6 log 2 10 = 6 ≅6 ≅ 6 ∗ 3,3
log10 2 0,3

Comparação (estudo empírico) de algoritmos

1. Análise matemática: análise da freqüência com que os algoritmos


executam operações críticas abstratas.
2. Define forma funcional para o tempo de execução do algoritmo.
3. Análise empírica (programação?)

tabela pág. 59 do Sedgewick

M 1000 M 10000 M 100000


N S B S B S B
125 1 1 13 2 130 20
250 3 0 25 2 251 22
500 5 0 49 3 492 23
5000 53 0 533 3 30
50000 537 0 4 39
100000 1269 1 5 47

página 8
Projeto e Análise de Algoritmos
Algoritmos de Busca

N = 500, M = 10000 T ≅ c M log N µs = c 10000 . 3,7 µs = c . 0,037 s

Outro exemplo de recorrência

1) CN = CN-1 + N , N ≥ 2 e C1 = 1

Ocorrência: algoritmo que percorre uma entrada, eliminando um item:


1a. vez: N itens “verificados” – sobram N-1
a
2 . vez: N-1 itens “verificados” – sobram N-2
a
3 . vez: N-2 itens “verificados” – sobram N-3

Expandindo a relação de recorrência:

CN = CN-1 + N
= CN-2 + N + (N-1) = CN-2 + 2N-1
= CN-3 + N + (N-1) + (N-2) = CN-3 + 3N-3
M
= C1 + N + (N-1) + (N-2) + ... + 2
= 1 + 2+ 3 + ...+ (N-2) + (N-1) + N
= (1+N) + (2+ (N-1)) + (3+ (N-2)) + ... } N/2 vezes
N ( N + 1)
=
2
N
CN = ( N + 1) ⇒ CN é O (N2)
2

página 9
Projeto e Análise de Algoritmos
Algoritmos de Busca

IV.4. ÁRVORE DE BUSCA BINÁRIA

Esta seção pressupõe o conhecimento dos conceitos básicos de


árvores. Uma revisão dos conceitos e de algoritmos básicos de travessia
são apresentado no capítulo V.

Uma árvore de busca binária é construída de forma que, dado um nó p


na árvore, o seu filho à esquerda apresenta chave menor que p e o filho
à direita apresenta chave maior ou igual a p.

A busca é realizada a partir da raiz, tomando, na travessia, os ramos


esquerdo ou direito, dependendo do resultado das comparações entre
as chaves, até atingir o nó procurado.

Exemplo

valor 12 25 33 37 48 57 86 92

48

33 86

25 37 57 92

12

Algoritmos e Desempenho
Ver exercícios.

IV.5. BIBLIOGRAFIA

[1] Robert Sedgewick, Algorithms in C, Addison Wesley Publishing Co.,


1990

página 10
Projeto e Análise de Algoritmos
Algoritmos de Busca

[2] Robert Sedgewick, Algorithms in C++, Parts 1 -4, Terceira Edição,


Addison Wesley Publishing Co., 1998

[3] Celso Roberto Moraes, Estruturas de dados e algoritmos, uma


abordagem didática, São Paulo,Ed. Berkeley, 2001

[4] A. M. Tenenbaum, Y. Langsam, M. J., Augenstein, Estruturas de


dados usando C, São Paulo, Makron Books, 1995

página 11

Você também pode gostar