A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Algoritmos de Busca Parte II

Apresentações semelhantes


Apresentação em tema: "Algoritmos de Busca Parte II"— Transcrição da apresentação:

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


Carregar ppt "Algoritmos de Busca Parte II"

Apresentações semelhantes


Anúncios Google