SlideShare uma empresa Scribd logo
1 de 28
Baixar para ler offline
Pesquisa sequencial e pesquisa bin´aria
Armando Matos
Departamento de Ciˆencia de Computadores
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¸c˜ao: ordenar uma lista.
Exemplo, ordem n˜ao decrescente:
[8,2,1,5,2,6] → [1,2,2,5,6,8]
Outline
Pesquisa
Pesquisa sequˆencial
Pesquisa sequˆencial
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´etodo:
x ´e comparado sucessivamente com a[0], a[1],. . . , a[n-1].
Se x for igual a algum dos a[i], retorna-se True.
Sen˜ao, retorna-se False.
Pesquisa sequˆencial, fun¸c˜ao em python
# procura x na l i s t a a
def procura ( x , a ) :
n=len ( a )
i =0
while i <= n−1:
i f x==a [ i ] :
r e t u r n True
i=i +1
r e t u r n False
Pesquisa sequˆencial, m´etodo da sentinela
Uma varia¸c˜ao do m´etodo anterior. . . fun¸c˜ao procura(x,a):
Inicialmente x ´e colocado no fim da lista,
Ex: x=9, a=[5,10,2,4,2] → a=[5,10,2,4,2,9]
A compara¸c˜ao ´e mais simples: enquanto x != a[i]
A parte interna do ciclo ´e apenas: i = i+1
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´etodo da sentinela, fun¸c˜ao em python
Nesta vers˜ao retorna-se i tal que x=a[i]
ou -1 se x n˜ao est´a na lista.
1 def procura ( x , a ) :
2 n=len ( a )
3 a . append ( x )
4 i =0
5 while x!=a [ i ] :
6 i=i +1
7 i f i==n :
8 r e t u r n −1
9 r e t u r n i
Note-se que o ciclo (onde a fun¸c˜ao “passa” mais tempo) ´e
constitu´ıdo apenas pelas linhas 5 e 6.
Eficiˆencia da pesquisa sequˆencial
Vamos usar como medida de eficiˆencia no tempo de execu¸c˜ao
o n´umero c(n) de compara¸c˜oes entre x e a[i]
(linha 5 da fun¸c˜ao anterior)
Eficiˆencia da pesquisa sequˆencial, I
Para a fun¸c˜ao com “sentinela”:
N´umero de compara¸c˜oes, se x est´a na lista
Melhor caso: c(n) = 1
Pior caso: c(n) = n
Caso m´edio: c(n) = (n + 1)/2
Para o caso m´edio, admitiu-se que x pode ser, com igual
probabilidade, um dos n elementos da lista.
Eficiˆencia da pesquisa sequˆencial, II
N´umero de compara¸c˜oes, Se x n˜ao est´a na lista:
Melhor caso: c(n) = n + 1
Pior caso: c(n) = n + 1
Caso m´edio: c(n) = n + 1
Pesquisa bin´aria
Pesquisa bin´aria I
Se a lista a est´a ordenada – suponhamos por ordem crescente – h´a
algoritmos muito mais eficientes de procurar x:
procura(x,a):
x ´e procurado entre os ´ı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´edio m=(i1+i2)/2
(divis˜ao inteira) e
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˜ao
est´a na lista: → retorna -1.
Pesquisa bin´aria, fun¸c˜ao em python, vers˜ao iterativa
1 def pb ( x , a ) :
2 n = len ( a )
3 i 1 = 0
4 i 2 = n−1
5 (∗) while i 1 <= i 2 :
6 m = ( i 1+i 2 )/2
7 i f x < a [m] :
8 i 2 = m−1
9 e l i f x > a [m] :
10 i 1 = m+1
11 e l s e :
12 # v e r i f i c a −se x == a [m]
13 r e t u r n m
14 r e t u r n −1
Notas sobre a correc¸c˜ao de algoritmos
Exerc´ıcio: Escreva um invariante de ciclo apropriado `a
demonstra¸c˜ao dacorrec¸c˜ao do algoritmo e v´alido antes do teste do
ciclo - linha (*).
Exerc´ıcio: Escreva uma vers˜ao recursiva do mesmo algoritmo.
Notas sobre a correc¸c˜ao de algoritmos
Muitas vezes ´e vantajoso dividir as demonstra¸c˜oes de correc¸c˜ao em
2 partes:
Correc¸c˜ao parcial de um algoritmo: se o algoritmo terminar, a
resposta est´a correcta
Termina¸c˜ao de um algoritmo: o algoritmo termina (ver La
Palisse, obras completas).
correc¸c˜ao = correc¸c˜ao parcial + termina¸c˜ao
Pesquisa bin´aria – correc¸c˜ao da fun¸c˜ao
Notas sobre a correc¸c˜ao da fun¸c˜ao de pesquisa bin´aria:
Invariante de ciclo : se x est´a na lista est´a entre os ´ındices i1 e
i2, extremos inclu´ıdos.
In´ıcio: o invariante de ciclo fica verdadeiro com as atribui¸c˜oes
das linhas 2-4.
O invariante de ciclo mant´em-se verdadeiro se o ciclo
continuar, isto ´e, quando se verificam as condi¸c˜oes das linhas
7 ou 9.
Logo: no teste da linha 5 verifica-se o invariante de ciclo.
Se a linha 13 for executada, x est´a na lista, na posi¸c˜ao m
Se o ciclo acabar (i1>i2), pela manuten¸c˜ao do invariante do
ciclo, x n˜ao est´a na lista.
Pesquisa bin´aria – termina¸c˜ao da fun¸c˜ao
Notas sobre a termina¸c˜ao da fun¸c˜ao:
Os ´ındices em que x pode “estar” s˜ao i1, i1+1,. . . , i2.
Seja num=i2-i1+1 o n´umero desses ´ındices.
A prova de termina¸c˜ao ´e baseada no facto de num diminuir de cada
vez que o teste das linhas 7 e 9 ´e efectuado e isso prova-se com os
seguintes factos
i1 ≤ m ≤ i2 onde m resulta da atribui¸c˜ao m=(i1+i2)/2.
A atribui¸c˜ao i2=m-1 (linha 8) reduz num, pois, com o valor
inicial da i2, m − 1 < m ≤ i2
A atribui¸c˜ao i1=m+1 (linha 10) reduz num, pois, com o valor
inicial da i1, i1 ≤ m < m + 1
Eficiˆencia da pesquisa bin´aria
Vamos usar como medida de eficiˆencia no tempo de execu¸c˜ao
o n´umero c(n) de compara¸c˜oes entre x e a[i], contando as linhas
7 e 9 como uma s´o compara¸c˜ao, (compara¸c˜ao entre x e a[m])
Vamos determinar o n´umero de compara¸c˜oes no pior caso (quando
x n˜ao est´a na lista)
Eficiˆencia da pesquisa bin´aria
Para simplificar, supomos que n=len(a) ´e da forma n = 2p − 1.
Ap´os uma divis˜ao a “meio”, o n´umero de ´ındices em que x pode
estar passa de n = 2p − 1 a n = 2p−1 − 1.
Por exemplo,
15 → 7 → 3 → 1 → 0
Eficiˆencia da pesquisa bin´aria
Para simplificar, supomos que n=len(a) ´e da forma n = 2p − 1.
Ap´os uma divis˜ao a “meio”, o n´umero de ´ındices em que x pode
estar passa de n = 2p − 1 a n = 2p−1 − 1.
Por exemplo,
15 → 7 → 3 → 1 → 0
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
0 . . . 14 • • • • • • • • • • • • • • •
Eficiˆencia da pesquisa bin´aria
Para simplificar, supomos que n=len(a) ´e da forma n = 2p − 1.
Ap´os uma divis˜ao a “meio”, o n´umero de ´ındices em que x pode
estar passa de n = 2p − 1 a n = 2p−1 − 1.
Por exemplo,
15 → 7 → 3 → 1 → 0
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
0 . . . 14 • • • • • • • • • • • • • • •
8 . . . 14 • • • • • • • • • • • • • • •
Eficiˆencia da pesquisa bin´aria
Para simplificar, supomos que n=len(a) ´e da forma n = 2p − 1.
Ap´os uma divis˜ao a “meio”, o n´umero de ´ındices em que x pode
estar passa de n = 2p − 1 a n = 2p−1 − 1.
Por exemplo,
15 → 7 → 3 → 1 → 0
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
0 . . . 14 • • • • • • • • • • • • • • •
8 . . . 14 • • • • • • • • • • • • • • •
8 . . . 10 • • • • • • • • • • • • • • •
Eficiˆencia da pesquisa bin´aria
Para simplificar, supomos que n=len(a) ´e da forma n = 2p − 1.
Ap´os uma divis˜ao a “meio”, o n´umero de ´ındices em que x pode
estar passa de n = 2p − 1 a n = 2p−1 − 1.
Por exemplo,
15 → 7 → 3 → 1 → 0
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
0 . . . 14 • • • • • • • • • • • • • • •
8 . . . 14 • • • • • • • • • • • • • • •
8 . . . 10 • • • • • • • • • • • • • • •
9 . . . 9 • • • • • • • • • • • • • • •
Eficiˆencia da pesquisa bin´aria
Para simplificar, supomos que n=len(a) ´e da forma n = 2p − 1.
Ap´os uma divis˜ao a “meio”, o n´umero de ´ındices em que x pode
estar passa de n = 2p − 1 a n = 2p−1 − 1.
Por exemplo,
15 → 7 → 3 → 1 → 0
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
0 . . . 14 • • • • • • • • • • • • • • •
8 . . . 14 • • • • • • • • • • • • • • •
8 . . . 10 • • • • • • • • • • • • • • •
9 . . . 9 • • • • • • • • • • • • • • •
9 . . . 8 = ∅ • • • • • • • • • • • • • • •
Eficiˆencia da pesquisa bin´aria
Para simplificar, supomos que n=len(a) ´e da forma n = 2p − 1.
Ap´os uma divis˜ao a “meio”, o n´umero de ´ındices em que x pode
estar passa de n = 2p − 1 a n = 2p−1 − 1.
Por exemplo,
15 → 7 → 3 → 1 → 0
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
0 . . . 14 • • • • • • • • • • • • • • •
8 . . . 14 • • • • • • • • • • • • • • •
8 . . . 10 • • • • • • • • • • • • • • •
9 . . . 9 • • • • • • • • • • • • • • •
9 . . . 8 = ∅ • • • • • • • • • • • • • • •
0 . . . 14
O n´umero de divis˜oes a “meio”, que ´e igual ao n´umero de
compara¸c˜oes, ´e, neste caso, igual a 4 = log(n + 1).
No caso geral, o n´umero de compara¸c˜oes n˜ao excede log(n) + 1.
Eficiˆencia da pesquisa bin´aria
N´umero de compara¸c˜oes no pior caso.
Exemplo para n = 108, t = 1µseg (tempo associado a cada
compara¸c˜ao)
Pesquisa sequˆencial: c(n) = n, t = 100seg, quase 2 minutos.
Pesquisa bin´aria: c(n) ≈ log(n), t ≈ 27µseg!
Conclus˜ao: a pesquisa bin´aria ´e muito mais r´apida que a pesquisa
sequˆencial.
fim

Mais conteúdo relacionado

Mais procurados

Expectation Maximization: o básico do básico
Expectation Maximization: o básico do básicoExpectation Maximization: o básico do básico
Expectation Maximization: o básico do básicoNicolau Werneck
 
Funções de varias variáveis calculo 2
Funções de varias variáveis calculo 2Funções de varias variáveis calculo 2
Funções de varias variáveis calculo 2Fábio Kataoka
 
Composição de Funções
Composição de FunçõesComposição de Funções
Composição de FunçõesCarlos Campani
 
Integracão para engenharia
Integracão para engenhariaIntegracão para engenharia
Integracão para engenhariaEder Ribeiro
 
1 integr num_simples
1 integr num_simples1 integr num_simples
1 integr num_simplesHeron Soares
 
Aula 1 pe2 marcos
Aula 1 pe2 marcosAula 1 pe2 marcos
Aula 1 pe2 marcoscruz_marcos
 
Função polinomial do 2°grau
Função polinomial do 2°grauFunção polinomial do 2°grau
Função polinomial do 2°graumlsdesa
 
625639 a-teoria-dos-limites-calculo
625639 a-teoria-dos-limites-calculo625639 a-teoria-dos-limites-calculo
625639 a-teoria-dos-limites-calculoMarcos Lira
 
Equações Algébricas e Transcendentes - Isolamento de Raízes - @professorenan
Equações Algébricas e Transcendentes - Isolamento de Raízes - @professorenanEquações Algébricas e Transcendentes - Isolamento de Raízes - @professorenan
Equações Algébricas e Transcendentes - Isolamento de Raízes - @professorenanRenan Gustavo
 
Função do 2º grau em execução
Função do 2º grau em execuçãoFunção do 2º grau em execução
Função do 2º grau em execuçãomonica_cassia
 
Exercícios resolvidos matematica 01
Exercícios resolvidos matematica 01Exercícios resolvidos matematica 01
Exercícios resolvidos matematica 01resolvidos
 

Mais procurados (19)

Expectation Maximization: o básico do básico
Expectation Maximization: o básico do básicoExpectation Maximization: o básico do básico
Expectation Maximization: o básico do básico
 
Funções trigonométricas
Funções trigonométricasFunções trigonométricas
Funções trigonométricas
 
Funções de varias variáveis calculo 2
Funções de varias variáveis calculo 2Funções de varias variáveis calculo 2
Funções de varias variáveis calculo 2
 
Matematica2 1
Matematica2 1Matematica2 1
Matematica2 1
 
Zero de função
Zero de funçãoZero de função
Zero de função
 
Composição de Funções
Composição de FunçõesComposição de Funções
Composição de Funções
 
Integracão para engenharia
Integracão para engenhariaIntegracão para engenharia
Integracão para engenharia
 
1 integr num_simples
1 integr num_simples1 integr num_simples
1 integr num_simples
 
Mini curso-prof-peternelli
Mini curso-prof-peternelliMini curso-prof-peternelli
Mini curso-prof-peternelli
 
Funções Elementares
Funções ElementaresFunções Elementares
Funções Elementares
 
Aula 1 pe2 marcos
Aula 1 pe2 marcosAula 1 pe2 marcos
Aula 1 pe2 marcos
 
Função polinomial do 2°grau
Função polinomial do 2°grauFunção polinomial do 2°grau
Função polinomial do 2°grau
 
625639 a-teoria-dos-limites-calculo
625639 a-teoria-dos-limites-calculo625639 a-teoria-dos-limites-calculo
625639 a-teoria-dos-limites-calculo
 
Equações Algébricas e Transcendentes - Isolamento de Raízes - @professorenan
Equações Algébricas e Transcendentes - Isolamento de Raízes - @professorenanEquações Algébricas e Transcendentes - Isolamento de Raízes - @professorenan
Equações Algébricas e Transcendentes - Isolamento de Raízes - @professorenan
 
Função do 2º grau em execução
Função do 2º grau em execuçãoFunção do 2º grau em execução
Função do 2º grau em execução
 
Recursividade
RecursividadeRecursividade
Recursividade
 
Modulo ii
Modulo iiModulo ii
Modulo ii
 
Max min ime
Max min   imeMax min   ime
Max min ime
 
Exercícios resolvidos matematica 01
Exercícios resolvidos matematica 01Exercícios resolvidos matematica 01
Exercícios resolvidos matematica 01
 

Semelhante a Pesquisa sequencial vs pesquisa binária

Equação de Recorrência - I (Otimização)
Equação de Recorrência - I (Otimização)Equação de Recorrência - I (Otimização)
Equação de Recorrência - I (Otimização)Jedson Guedes
 
Equações de recorrência - II (Otimização)
Equações de recorrência - II (Otimização)Equações de recorrência - II (Otimização)
Equações de recorrência - II (Otimização)Jedson Guedes
 
13 introducao a analise de algoritmos
13   introducao a analise de algoritmos13   introducao a analise de algoritmos
13 introducao a analise de algoritmosRicardo Bolanho
 
Sequencias e series unicamp
Sequencias e series   unicampSequencias e series   unicamp
Sequencias e series unicampLuis Gustavo
 
Ger numaleat(1)
Ger numaleat(1)Ger numaleat(1)
Ger numaleat(1)Iago Lira
 
Programando em python recursao
Programando em python   recursaoProgramando em python   recursao
Programando em python recursaosamuelthiago
 
57701066 matematica-discreta-exercicios-resolvidos
57701066 matematica-discreta-exercicios-resolvidos57701066 matematica-discreta-exercicios-resolvidos
57701066 matematica-discreta-exercicios-resolvidosHAROLDO MIRANDA DA COSTA JR
 
Sequencias e series
Sequencias e seriesSequencias e series
Sequencias e seriesRodrigo Jrs
 
Introd logica mat ii
Introd logica mat iiIntrod logica mat ii
Introd logica mat iiPaulo Martins
 
Formula luderiana racional para extracao de raiz quadrada (completo)
Formula luderiana racional para extracao de raiz quadrada (completo)Formula luderiana racional para extracao de raiz quadrada (completo)
Formula luderiana racional para extracao de raiz quadrada (completo)ludenir
 
Expoente 12 prova modelo de exame-enunciado
Expoente 12 prova modelo de exame-enunciadoExpoente 12 prova modelo de exame-enunciado
Expoente 12 prova modelo de exame-enunciadoSusana Figueiredo
 
Análise assintótica
Análise assintóticaAnálise assintótica
Análise assintóticaPablo Silva
 

Semelhante a Pesquisa sequencial vs pesquisa binária (20)

Atps estatistica
Atps estatisticaAtps estatistica
Atps estatistica
 
A prova dos_nove
A prova dos_noveA prova dos_nove
A prova dos_nove
 
Equação de Recorrência - I (Otimização)
Equação de Recorrência - I (Otimização)Equação de Recorrência - I (Otimização)
Equação de Recorrência - I (Otimização)
 
Equações de recorrência - II (Otimização)
Equações de recorrência - II (Otimização)Equações de recorrência - II (Otimização)
Equações de recorrência - II (Otimização)
 
13 introducao a analise de algoritmos
13   introducao a analise de algoritmos13   introducao a analise de algoritmos
13 introducao a analise de algoritmos
 
Sequencias e series unicamp
Sequencias e series   unicampSequencias e series   unicamp
Sequencias e series unicamp
 
Ger numaleat(1)
Ger numaleat(1)Ger numaleat(1)
Ger numaleat(1)
 
Programando em python recursao
Programando em python   recursaoProgramando em python   recursao
Programando em python recursao
 
57701066 matematica-discreta-exercicios-resolvidos
57701066 matematica-discreta-exercicios-resolvidos57701066 matematica-discreta-exercicios-resolvidos
57701066 matematica-discreta-exercicios-resolvidos
 
Pequeno teorema de fermat
Pequeno teorema de fermatPequeno teorema de fermat
Pequeno teorema de fermat
 
Sequencias e series
Sequencias e seriesSequencias e series
Sequencias e series
 
Introd logica mat ii
Introd logica mat iiIntrod logica mat ii
Introd logica mat ii
 
Formula luderiana racional para extracao de raiz quadrada (completo)
Formula luderiana racional para extracao de raiz quadrada (completo)Formula luderiana racional para extracao de raiz quadrada (completo)
Formula luderiana racional para extracao de raiz quadrada (completo)
 
Slide notacao cientifica
Slide notacao cientificaSlide notacao cientifica
Slide notacao cientifica
 
Expoente 12 prova modelo de exame-enunciado
Expoente 12 prova modelo de exame-enunciadoExpoente 12 prova modelo de exame-enunciado
Expoente 12 prova modelo de exame-enunciado
 
Apostila rpira
Apostila rpiraApostila rpira
Apostila rpira
 
Progressões
ProgressõesProgressões
Progressões
 
Combinatoria
CombinatoriaCombinatoria
Combinatoria
 
Aula 1 a 15 vol1
Aula 1 a 15 vol1Aula 1 a 15 vol1
Aula 1 a 15 vol1
 
Análise assintótica
Análise assintóticaAnálise assintótica
Análise assintótica
 

Pesquisa sequencial vs pesquisa binária

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