140 likes | 322 Views
Algoritmos de Busca Parte II. Liandra Léa Ramos Raíssa Marson. Busca Binária. Parte do pressuposto de que o vetor está ordenado e realiza sucessivas divisões do espaço de busca comparando o elemento busca (chave) com o elemento no meio do vetor. Busca Binária. Entrada:
E N D
Algoritmos de Busca Parte II Liandra Léa Ramos Raíssa Marson
Busca Binária • Parte do pressuposto de que o vetor está ordenado e realiza sucessivas divisões do espaço de busca comparando o elemento busca (chave) com o elemento no meio do vetor.
Busca Binária • Entrada: • - vetor ordenado com n elementos. • Saída: • - n, se o elemento procurado se encontra em vet[n]; • - (-1), se o elemento procurado não se encontra no vetor.
Busca Binária Padrão • Embora a escolha do ponto de início da busca possa ser arbitrária, pois o algoritmo funciona independentemente dele, o valor dessa variável influencia diretamente na eficiência do algoritmo • A solução ótima é escolher um elemento no meio (ou mais próximo possível do meio) da sequência.
Busca Binária Padrão • Procedimento: • - Compara a chave (chamamos de elem) com o elemento do meio do vetor • - Se elem for menor, pesquisa na primeira metade • - Se elem for maior, pesquisa na segunda metade • - Se for igual, retorna a posição.
Busca Binária Padrão ... Ini = 0 fim = N - 1 sucesso =0 enquanto ( ( ini ≤ fim ) e ( sucesso = 0 ) ) meio = floor( (fim+ini)/2 ) //usa só a parte inteira da divisão se ( a [meio] = x ) sucesso = 1 senão se ( a [meio] < x ) ini = meio + 1 senão fim =meio – 1 fim se fim se fim enquanto ...
Busca Binária Rápida • A eficiência do algoritmo pode ser melhorada se o sucesso (término) da busca não for testado em todo loop. • Sucesso ocorre apenas uma vez em todo o processo
Busca Binária Rápida ... { //no início consideramos todo o vetor int ini = 0 int fim = n - 1 int meio enquanto ( ini <=fim ){ meio = floor( (fim+ini)/2 ); se ( a[meio] < x ) ini = meio + 1 //ajusta posição inicial senão fim = meio – 1 //ajusta posição final retorne meio; //elemento encontrado } retorne -1; //não encontrou o elemento ...
Busca Binária Rápida • Implementação • //retorna a posição onde o item foi encontrado ou não encontrado. • // A função abaixo recebe um número x e um vetor crescente v[0..n-1]. Ela devolve um índice meio em 0..n-1 tal que v[meio] == x. Se tal meio não existe, devolve -1. • int • buscaBinaria2( int x, int n, int v[]) { • return bb( x, 0, n-1, v); } • // A função bb recebe um número x e um vetor crescente v[ini..fim]. Ela devolve um índice meio em ini..fim tal que v[meio] == x. Se tal meio não existe, devolve -1. • int • bb ( int x, int ini, int fim, int v[]) { • if (ini > fim) return -1; • else { • int meio = (ini + fim)/2; • If (v[meio] == x) return meio; • if (v[meio] < x) • return bb( x, meio+1, fim, v); • else • return bb( x, ini, meio-1, v); • } • }
Busca Binária Rápida • Análise • - Pior caso: log n • - elemento não está no vetor • - a cada repetição, a parte considerada na busca é ksdm dividida à metade
Busca Binária Rápida • Análise • Considerando os algoritmos de busca vistos, a tabela abaixo faz uma comparação da ordem de grandeza dos mesmos
Bibliografia • http://www.midiacom.uff.br/~debora/protocolos/pdf/capitulo17.pdf • http://dcm.ffclrp.usp.br/~augusto/icii/icii_4_busca_2.pdf • http://www.ime.usp.br/~pf/algoritmos/aulas/bubi2.html