Carregar apresentação
A apresentação está carregando. Por favor, espere
1
Algoritmos de Busca Parte II
Liandra Léa Ramos Raíssa Marson
2
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.
3
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.
4
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.
5
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.
6
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 fim = meio – 1 fim se fim enquanto
7
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
8
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 //ajusta posição inicial senão fim = meio – 1 //ajusta posição final retorne meio; //elemento encontrado } retorne -1; //não encontrou o elemento
9
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. 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); }
10
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 Repetição Tamanho do problema 1 n 2 n/2 3 n/4 ... log n
11
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 Algoritmo C (min) C (med) C (max) Busca Linear O(1) O(N) Busca Linear com Sentinela Busca Binária Padrão O(log N) Busca Binária Rápida
12
Busca Binária Rápida
13
Bibliografia
14
OBRIGADA
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.