Pesquisa sequencial e pesquisa bin´ria
a
Armando Matos
Departamento de Ciˆncia de Computadores
e
Universidade de Porto

2008
2 problemas importantes. . .

Pesquisa: Procurar um valor numa lista
ou, por exemplo, num ficheiro
pesquisa 5 em [8,2,1,5,2,6] → True
Ordena¸˜o: ordenar uma lista.
ca
Exemplo, ordem n˜o decrescente:
a
[8,2,1,5,2,6] → [1,2,2,5,6,8]
Outline

Pesquisa
Pesquisa sequˆncial
e
Pesquisa sequˆncial
e

Seja
x: o valor que se vai procurar
a: a lista onde se vai procurar x;
´
ındices de a: 0 a n − 1.
procura(x,a) ⇒ bool
M´todo:
e
x ´ comparado sucessivamente com a[0], a[1],. . . , a[n-1].
e
Se x for igual a algum dos a[i], retorna-se True.
Sen˜o, retorna-se False.
a
Pesquisa sequˆncial, fun¸˜o em python
e
ca

# p r o c u r a x na l i s t a a
def procura (x , a ) :
n=l e n ( a )
i =0
w h i l e i <= n −1:
i f x==a [ i ] :
r e t u r n True
i=i +1
return False
Pesquisa sequˆncial, m´todo da sentinela
e
e

Uma varia¸˜o do m´todo anterior. . . fun¸˜o procura(x,a):
ca
e
ca
Inicialmente x ´ colocado no fim da lista,
e
Ex: x=9, a=[5,10,2,4,2] → a=[5,10,2,4,2,9]
A compara¸˜o ´ mais simples: enquanto x != a[i]
ca e
A parte interna do ciclo ´ apenas: i = i+1
e
Seja n o valor inicial de len(a).
Se o ciclo acaba com i=n, retorna False
Se o ciclo acaba com i<n, retorna True
M´todo da sentinela, fun¸˜o em python
e
ca
Nesta vers˜o retorna-se i tal que x=a[i]
a
ou -1 se x n˜o est´ na lista.
a
a
1
2
3
4
5
6
7
8
9

def procura (x , a ) :
n=l e n ( a )
a . append ( x )
i =0
w h i l e x !=a [ i ] :
i=i +1
i f i==n :
r e t u r n −1
return i
Note-se que o ciclo (onde a fun¸˜o “passa” mais tempo) ´
ca
e
constitu´ apenas pelas linhas 5 e 6.
ıdo
Eficiˆncia da pesquisa sequˆncial
e
e

Vamos usar como medida de eficiˆncia no tempo de execu¸˜o
e
ca
o n´mero c(n) de compara¸˜es entre x e a[i]
u
co
(linha 5 da fun¸˜o anterior)
ca
Eficiˆncia da pesquisa sequˆncial, I
e
e

Para a fun¸˜o com “sentinela”:
ca
N´mero de compara¸˜es, se x est´ na lista
u
co
a
Melhor caso: c(n) = 1
Pior caso: c(n) = n
Caso m´dio: c(n) = (n + 1)/2
e
Para o caso m´dio, admitiu-se que x pode ser, com igual
e
probabilidade, um dos n elementos da lista.
Eficiˆncia da pesquisa sequˆncial, II
e
e

N´mero de compara¸˜es, Se x n˜o est´ na lista:
u
co
a
a
Melhor caso: c(n) = n + 1
Pior caso: c(n) = n + 1
Caso m´dio: c(n) = n + 1
e
Pesquisa bin´ria
a
Pesquisa bin´ria I
a

Se a lista a est´ ordenada – suponhamos por ordem crescente – h´
a
a
algoritmos muito mais eficientes de procurar x:
procura(x,a):
x ´ procurado entre os ´
e
ındices i1 e i2 (extremos inclu´
ıdos);
Seja n=len(a). Inicialmente faz-se i1=0, i2=n-1.
Repetidamente, calcula-se o ponto m´dio m=(i1+i2)/2
e
(divis˜o inteira) e
a
Se x<a[m] → i2=m-1
Se x>a[m] → i1=m+1
Se x==a[m] → retorna m

Se o intervalo [i1,i2] acaba por ficar vazio (i1>i2), x n˜o
a
est´ na lista: → retorna -1.
a
Pesquisa bin´ria, fun¸˜o em python, vers˜o iterativa
a
ca
a
1
2
3
4
5
6
7
8
9
10
11
12
13
14

d e f pb ( x , a ) :
n = len (a)
i1 = 0
i 2 = n−1
( ∗ ) w h i l e i 1 <= i 2 :
m = ( i 1+i 2 ) / 2
i f x < a [m ] :
i 2 = m−1
e l i f x > a [m ] :
i 1 = m+1
else :
# v e r i f i c a −s e x == a [m]
return m
r e t u r n −1
Notas sobre a correc¸˜o de algoritmos
ca

Exerc´
ıcio: Escreva um invariante de ciclo apropriado `
a
demonstra¸˜o dacorrec¸˜o do algoritmo e v´lido antes do teste do
ca
ca
a
ciclo - linha (*).
Exerc´
ıcio: Escreva uma vers˜o recursiva do mesmo algoritmo.
a
Notas sobre a correc¸˜o de algoritmos
ca

Muitas vezes ´ vantajoso dividir as demonstra¸˜es de correc¸˜o em
e
co
ca
2 partes:
Correc¸˜o parcial de um algoritmo: se o algoritmo terminar, a
ca
resposta est´ correcta
a
Termina¸˜o de um algoritmo: o algoritmo termina (ver La
ca
Palisse, obras completas).
correc¸˜o = correc¸˜o parcial + termina¸˜o
ca
ca
ca
Pesquisa bin´ria – correc¸˜o da fun¸˜o
a
ca
ca
Notas sobre a correc¸˜o da fun¸˜o de pesquisa bin´ria:
ca
ca
a
Invariante de ciclo : se x est´ na lista est´ entre os ´
a
a
ındices i1 e
i2, extremos inclu´
ıdos.
In´
ıcio: o invariante de ciclo fica verdadeiro com as atribui¸˜es
co
das linhas 2-4.
O invariante de ciclo mant´m-se verdadeiro se o ciclo
e
continuar, isto ´, quando se verificam as condi¸˜es das linhas
e
co
7 ou 9.
Logo: no teste da linha 5 verifica-se o invariante de ciclo.
Se a linha 13 for executada, x est´ na lista, na posi¸˜o m
a
ca
Se o ciclo acabar (i1>i2), pela manuten¸˜o do invariante do
ca
ciclo, x n˜o est´ na lista.
a
a
Pesquisa bin´ria – termina¸˜o da fun¸˜o
a
ca
ca

Notas sobre a termina¸˜o da fun¸˜o:
ca
ca
Os ´
ındices em que x pode “estar” s˜o i1, i1+1,. . . , i2.
a
Seja num=i2-i1+1 o n´mero desses ´
u
ındices.
A prova de termina¸˜o ´ baseada no facto de num diminuir de cada
ca e
vez que o teste das linhas 7 e 9 ´ efectuado e isso prova-se com os
e
seguintes factos
i1 ≤ m ≤ i2 onde m resulta da atribui¸˜o m=(i1+i2)/2.
ca
A atribui¸˜o i2=m-1 (linha 8) reduz num, pois, com o valor
ca
inicial da i2, m − 1 < m ≤ i2
A atribui¸˜o i1=m+1 (linha 10) reduz num, pois, com o valor
ca
inicial da i1, i1 ≤ m < m + 1
Eficiˆncia da pesquisa bin´ria
e
a

Vamos usar como medida de eficiˆncia no tempo de execu¸˜o
e
ca
o n´mero c(n) de compara¸˜es entre x e a[i], contando as linhas
u
co
7 e 9 como uma s´ compara¸˜o, (compara¸˜o entre x e a[m])
o
ca
ca
Vamos determinar o n´mero de compara¸˜es no pior caso (quando
u
co
x n˜o est´ na lista)
a
a
Eficiˆncia da pesquisa bin´ria
e
a
Para simplificar, supomos que n=len(a) ´ da forma n = 2p − 1.
e
Ap´s uma divis˜o a “meio”, o n´mero de ´
o
a
u
ındices em que x pode
estar passa de n = 2p − 1 a n = 2p−1 − 1.
Por exemplo,
15 → 7 → 3 → 1 → 0
Eficiˆncia da pesquisa bin´ria
e
a
Para simplificar, supomos que n=len(a) ´ da forma n = 2p − 1.
e
Ap´s uma divis˜o a “meio”, o n´mero de ´
o
a
u
ındices em que x pode
estar passa de n = 2p − 1 a n = 2p−1 − 1.
Por exemplo,
15 → 7 → 3 → 1 → 0

0

0 . . . 14

1

2

3

4

5

6

7

8

9 10 11 12 13 14

• • • • • • • • • • • • • • •
Eficiˆncia da pesquisa bin´ria
e
a
Para simplificar, supomos que n=len(a) ´ da forma n = 2p − 1.
e
Ap´s uma divis˜o a “meio”, o n´mero de ´
o
a
u
ındices em que x pode
estar passa de n = 2p − 1 a n = 2p−1 − 1.
Por exemplo,
15 → 7 → 3 → 1 → 0

0

0 . . . 14
8 . . . 14

1

2

3

4

5

6

7

8

9 10 11 12 13 14

• • • • • • • • • • • • • • •
• • • • • • • • • • • • • • •
Eficiˆncia da pesquisa bin´ria
e
a
Para simplificar, supomos que n=len(a) ´ da forma n = 2p − 1.
e
Ap´s uma divis˜o a “meio”, o n´mero de ´
o
a
u
ındices em que x pode
estar passa de n = 2p − 1 a n = 2p−1 − 1.
Por exemplo,
15 → 7 → 3 → 1 → 0

0

0 . . . 14
8 . . . 14
8 . . . 10

1

2

3

4

5

6

7

8

9 10 11 12 13 14

• • • • • • • • • • • • • • •
• • • • • • • • • • • • • • •
• • • • • • • • • • • • • • •
Eficiˆncia da pesquisa bin´ria
e
a
Para simplificar, supomos que n=len(a) ´ da forma n = 2p − 1.
e
Ap´s uma divis˜o a “meio”, o n´mero de ´
o
a
u
ındices em que x pode
estar passa de n = 2p − 1 a n = 2p−1 − 1.
Por exemplo,
15 → 7 → 3 → 1 → 0

0

0 . . . 14
8 . . . 14
8 . . . 10
9...9

1

2

3

4

5

6

7

8

9 10 11 12 13 14

•
•
•
•

•
•
•
•

•
•
•
•

•
•
•
•

•
•
•
•

•
•
•
•

•
•
•
•

•
•
•
•

•
•
•
•

•
•
•
•

•
•
•
•

•
•
•
•

•
•
•
•

•
•
•
•

•
•
•
•
Eficiˆncia da pesquisa bin´ria
e
a
Para simplificar, supomos que n=len(a) ´ da forma n = 2p − 1.
e
Ap´s uma divis˜o a “meio”, o n´mero de ´
o
a
u
ındices em que x pode
estar passa de n = 2p − 1 a n = 2p−1 − 1.
Por exemplo,
15 → 7 → 3 → 1 → 0

0

0 . . . 14
8 . . . 14
8 . . . 10
9...9
9...8 = ∅

1

2

3

4

5

6

7

8

9 10 11 12 13 14

•
•
•
•
•

•
•
•
•
•

•
•
•
•
•

•
•
•
•
•

•
•
•
•
•

•
•
•
•
•

•
•
•
•
•

•
•
•
•
•

•
•
•
•
•

•
•
•
•
•

•
•
•
•
•

•
•
•
•
•

•
•
•
•
•

•
•
•
•
•

•
•
•
•
•
Eficiˆncia da pesquisa bin´ria
e
a
Para simplificar, supomos que n=len(a) ´ da forma n = 2p − 1.
e
Ap´s uma divis˜o a “meio”, o n´mero de ´
o
a
u
ındices em que x pode
estar passa de n = 2p − 1 a n = 2p−1 − 1.
Por exemplo,
15 → 7 → 3 → 1 → 0

0

0 . . . 14
8 . . . 14
8 . . . 10
9...9
9...8 = ∅
0 . . . 14

1

2

3

4

5

6

7

8

9 10 11 12 13 14

•
•
•
•
•

•
•
•
•
•

•
•
•
•
•

•
•
•
•
•

•
•
•
•
•

•
•
•
•
•

•
•
•
•
•

•
•
•
•
•

•
•
•
•
•

•
•
•
•
•

•
•
•
•
•

•
•
•
•
•

•
•
•
•
•

•
•
•
•
•

•
•
•
•
•

O n´mero de divis˜es a “meio”, que ´ igual ao n´mero de
u
o
e
u
compara¸˜es, ´, neste caso, igual a 4 = log(n + 1).
co e
No caso geral, o n´mero de compara¸˜es n˜o excede log(n) + 1.
u
co
a
Eficiˆncia da pesquisa bin´ria
e
a

N´mero de compara¸˜es no pior caso.
u
co
Exemplo para n = 108 , t = 1µseg (tempo associado a cada
compara¸˜o)
ca
Pesquisa sequˆncial: c(n) = n, t = 100seg, quase 2 minutos.
e
Pesquisa bin´ria: c(n) ≈ log(n), t ≈ 27µseg!
a
Conclus˜o: a pesquisa bin´ria ´ muito mais r´pida que a pesquisa
a
a e
a
sequˆncial.
e
fim

Metódos de Pesquisa em C

  • 1.
    Pesquisa sequencial epesquisa bin´ria a Armando Matos Departamento de Ciˆncia de Computadores e Universidade de Porto 2008
  • 2.
    2 problemas importantes.. . Pesquisa: Procurar um valor numa lista ou, por exemplo, num ficheiro pesquisa 5 em [8,2,1,5,2,6] → True Ordena¸˜o: ordenar uma lista. ca Exemplo, ordem n˜o decrescente: a [8,2,1,5,2,6] → [1,2,2,5,6,8]
  • 3.
  • 4.
  • 5.
    Pesquisa sequˆncial e Seja x: ovalor que se vai procurar a: a lista onde se vai procurar x; ´ ındices de a: 0 a n − 1. procura(x,a) ⇒ bool M´todo: e x ´ comparado sucessivamente com a[0], a[1],. . . , a[n-1]. e Se x for igual a algum dos a[i], retorna-se True. Sen˜o, retorna-se False. a
  • 6.
    Pesquisa sequˆncial, fun¸˜oem python e ca # p r o c u r a x na l i s t a a def procura (x , a ) : n=l e n ( a ) i =0 w h i l e i <= n −1: i f x==a [ i ] : r e t u r n True i=i +1 return False
  • 7.
    Pesquisa sequˆncial, m´tododa sentinela e e Uma varia¸˜o do m´todo anterior. . . fun¸˜o procura(x,a): ca e ca Inicialmente x ´ colocado no fim da lista, e Ex: x=9, a=[5,10,2,4,2] → a=[5,10,2,4,2,9] A compara¸˜o ´ mais simples: enquanto x != a[i] ca e A parte interna do ciclo ´ apenas: i = i+1 e Seja n o valor inicial de len(a). Se o ciclo acaba com i=n, retorna False Se o ciclo acaba com i<n, retorna True
  • 8.
    M´todo da sentinela,fun¸˜o em python e ca Nesta vers˜o retorna-se i tal que x=a[i] a ou -1 se x n˜o est´ na lista. a a 1 2 3 4 5 6 7 8 9 def procura (x , a ) : n=l e n ( a ) a . append ( x ) i =0 w h i l e x !=a [ i ] : i=i +1 i f i==n : r e t u r n −1 return i Note-se que o ciclo (onde a fun¸˜o “passa” mais tempo) ´ ca e constitu´ apenas pelas linhas 5 e 6. ıdo
  • 9.
    Eficiˆncia da pesquisasequˆncial e e Vamos usar como medida de eficiˆncia no tempo de execu¸˜o e ca o n´mero c(n) de compara¸˜es entre x e a[i] u co (linha 5 da fun¸˜o anterior) ca
  • 10.
    Eficiˆncia da pesquisasequˆncial, I e e Para a fun¸˜o com “sentinela”: ca N´mero de compara¸˜es, se x est´ na lista u co a Melhor caso: c(n) = 1 Pior caso: c(n) = n Caso m´dio: c(n) = (n + 1)/2 e Para o caso m´dio, admitiu-se que x pode ser, com igual e probabilidade, um dos n elementos da lista.
  • 11.
    Eficiˆncia da pesquisasequˆncial, II e e N´mero de compara¸˜es, Se x n˜o est´ na lista: u co a a Melhor caso: c(n) = n + 1 Pior caso: c(n) = n + 1 Caso m´dio: c(n) = n + 1 e
  • 12.
  • 13.
    Pesquisa bin´ria I a Sea lista a est´ ordenada – suponhamos por ordem crescente – h´ a a algoritmos muito mais eficientes de procurar x: procura(x,a): x ´ procurado entre os ´ e ındices i1 e i2 (extremos inclu´ ıdos); Seja n=len(a). Inicialmente faz-se i1=0, i2=n-1. Repetidamente, calcula-se o ponto m´dio m=(i1+i2)/2 e (divis˜o inteira) e a Se x<a[m] → i2=m-1 Se x>a[m] → i1=m+1 Se x==a[m] → retorna m Se o intervalo [i1,i2] acaba por ficar vazio (i1>i2), x n˜o a est´ na lista: → retorna -1. a
  • 14.
    Pesquisa bin´ria, fun¸˜oem python, vers˜o iterativa a ca a 1 2 3 4 5 6 7 8 9 10 11 12 13 14 d e f pb ( x , a ) : n = len (a) i1 = 0 i 2 = n−1 ( ∗ ) w h i l e i 1 <= i 2 : m = ( i 1+i 2 ) / 2 i f x < a [m ] : i 2 = m−1 e l i f x > a [m ] : i 1 = m+1 else : # v e r i f i c a −s e x == a [m] return m r e t u r n −1
  • 15.
    Notas sobre acorrec¸˜o de algoritmos ca Exerc´ ıcio: Escreva um invariante de ciclo apropriado ` a demonstra¸˜o dacorrec¸˜o do algoritmo e v´lido antes do teste do ca ca a ciclo - linha (*). Exerc´ ıcio: Escreva uma vers˜o recursiva do mesmo algoritmo. a
  • 16.
    Notas sobre acorrec¸˜o de algoritmos ca Muitas vezes ´ vantajoso dividir as demonstra¸˜es de correc¸˜o em e co ca 2 partes: Correc¸˜o parcial de um algoritmo: se o algoritmo terminar, a ca resposta est´ correcta a Termina¸˜o de um algoritmo: o algoritmo termina (ver La ca Palisse, obras completas). correc¸˜o = correc¸˜o parcial + termina¸˜o ca ca ca
  • 17.
    Pesquisa bin´ria –correc¸˜o da fun¸˜o a ca ca Notas sobre a correc¸˜o da fun¸˜o de pesquisa bin´ria: ca ca a Invariante de ciclo : se x est´ na lista est´ entre os ´ a a ındices i1 e i2, extremos inclu´ ıdos. In´ ıcio: o invariante de ciclo fica verdadeiro com as atribui¸˜es co das linhas 2-4. O invariante de ciclo mant´m-se verdadeiro se o ciclo e continuar, isto ´, quando se verificam as condi¸˜es das linhas e co 7 ou 9. Logo: no teste da linha 5 verifica-se o invariante de ciclo. Se a linha 13 for executada, x est´ na lista, na posi¸˜o m a ca Se o ciclo acabar (i1>i2), pela manuten¸˜o do invariante do ca ciclo, x n˜o est´ na lista. a a
  • 18.
    Pesquisa bin´ria –termina¸˜o da fun¸˜o a ca ca Notas sobre a termina¸˜o da fun¸˜o: ca ca Os ´ ındices em que x pode “estar” s˜o i1, i1+1,. . . , i2. a Seja num=i2-i1+1 o n´mero desses ´ u ındices. A prova de termina¸˜o ´ baseada no facto de num diminuir de cada ca e vez que o teste das linhas 7 e 9 ´ efectuado e isso prova-se com os e seguintes factos i1 ≤ m ≤ i2 onde m resulta da atribui¸˜o m=(i1+i2)/2. ca A atribui¸˜o i2=m-1 (linha 8) reduz num, pois, com o valor ca inicial da i2, m − 1 < m ≤ i2 A atribui¸˜o i1=m+1 (linha 10) reduz num, pois, com o valor ca inicial da i1, i1 ≤ m < m + 1
  • 19.
    Eficiˆncia da pesquisabin´ria e a Vamos usar como medida de eficiˆncia no tempo de execu¸˜o e ca o n´mero c(n) de compara¸˜es entre x e a[i], contando as linhas u co 7 e 9 como uma s´ compara¸˜o, (compara¸˜o entre x e a[m]) o ca ca Vamos determinar o n´mero de compara¸˜es no pior caso (quando u co x n˜o est´ na lista) a a
  • 20.
    Eficiˆncia da pesquisabin´ria e a Para simplificar, supomos que n=len(a) ´ da forma n = 2p − 1. e Ap´s uma divis˜o a “meio”, o n´mero de ´ o a u ındices em que x pode estar passa de n = 2p − 1 a n = 2p−1 − 1. Por exemplo, 15 → 7 → 3 → 1 → 0
  • 21.
    Eficiˆncia da pesquisabin´ria e a Para simplificar, supomos que n=len(a) ´ da forma n = 2p − 1. e Ap´s uma divis˜o a “meio”, o n´mero de ´ o a u ındices em que x pode estar passa de n = 2p − 1 a n = 2p−1 − 1. Por exemplo, 15 → 7 → 3 → 1 → 0 0 0 . . . 14 1 2 3 4 5 6 7 8 9 10 11 12 13 14 • • • • • • • • • • • • • • •
  • 22.
    Eficiˆncia da pesquisabin´ria e a Para simplificar, supomos que n=len(a) ´ da forma n = 2p − 1. e Ap´s uma divis˜o a “meio”, o n´mero de ´ o a u ındices em que x pode estar passa de n = 2p − 1 a n = 2p−1 − 1. Por exemplo, 15 → 7 → 3 → 1 → 0 0 0 . . . 14 8 . . . 14 1 2 3 4 5 6 7 8 9 10 11 12 13 14 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • •
  • 23.
    Eficiˆncia da pesquisabin´ria e a Para simplificar, supomos que n=len(a) ´ da forma n = 2p − 1. e Ap´s uma divis˜o a “meio”, o n´mero de ´ o a u ındices em que x pode estar passa de n = 2p − 1 a n = 2p−1 − 1. Por exemplo, 15 → 7 → 3 → 1 → 0 0 0 . . . 14 8 . . . 14 8 . . . 10 1 2 3 4 5 6 7 8 9 10 11 12 13 14 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • •
  • 24.
    Eficiˆncia da pesquisabin´ria e a Para simplificar, supomos que n=len(a) ´ da forma n = 2p − 1. e Ap´s uma divis˜o a “meio”, o n´mero de ´ o a u ındices em que x pode estar passa de n = 2p − 1 a n = 2p−1 − 1. Por exemplo, 15 → 7 → 3 → 1 → 0 0 0 . . . 14 8 . . . 14 8 . . . 10 9...9 1 2 3 4 5 6 7 8 9 10 11 12 13 14 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • •
  • 25.
    Eficiˆncia da pesquisabin´ria e a Para simplificar, supomos que n=len(a) ´ da forma n = 2p − 1. e Ap´s uma divis˜o a “meio”, o n´mero de ´ o a u ındices em que x pode estar passa de n = 2p − 1 a n = 2p−1 − 1. Por exemplo, 15 → 7 → 3 → 1 → 0 0 0 . . . 14 8 . . . 14 8 . . . 10 9...9 9...8 = ∅ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • •
  • 26.
    Eficiˆncia da pesquisabin´ria e a Para simplificar, supomos que n=len(a) ´ da forma n = 2p − 1. e Ap´s uma divis˜o a “meio”, o n´mero de ´ o a u ındices em que x pode estar passa de n = 2p − 1 a n = 2p−1 − 1. Por exemplo, 15 → 7 → 3 → 1 → 0 0 0 . . . 14 8 . . . 14 8 . . . 10 9...9 9...8 = ∅ 0 . . . 14 1 2 3 4 5 6 7 8 9 10 11 12 13 14 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • O n´mero de divis˜es a “meio”, que ´ igual ao n´mero de u o e u compara¸˜es, ´, neste caso, igual a 4 = log(n + 1). co e No caso geral, o n´mero de compara¸˜es n˜o excede log(n) + 1. u co a
  • 27.
    Eficiˆncia da pesquisabin´ria e a N´mero de compara¸˜es no pior caso. u co Exemplo para n = 108 , t = 1µseg (tempo associado a cada compara¸˜o) ca Pesquisa sequˆncial: c(n) = n, t = 100seg, quase 2 minutos. e Pesquisa bin´ria: c(n) ≈ log(n), t ≈ 27µseg! a Conclus˜o: a pesquisa bin´ria ´ muito mais r´pida que a pesquisa a a e a sequˆncial. e
  • 28.