Você está na página 1de 31

Pesquisa Binria

Trabalho realizado para avaliao na disciplina de Projeto e Anlise de Algoritmos, do curso de Cincia da Computao, turno matutino, da Universidade de Vila Velha (UVV), ministrada pelo professor Alessandro Oliveira. Joo Paulo Buback, Lorran Pegoretti, Ricardo da Hora 30/04/2013

Tpicos abordados

Objetivo Busca Binria Tcnicas

Anlise
Tempo de execuo Sugesto de melhoria Concluses

Busca Binria

Busca Binria

Usado para encontrar a posio de um valor dentro de um vetor ordenado Algoritmo determinstico Paradigma dividir para conquistar Pode ser aplicada de forma iterativa ou de forma recursiva

Busca Binria

Busca Binria

Tcnicas

Tcnicas

Busca dicotmica

Os algoritmos operam selecionando entre duas alternativas distintas (dicotomias) a cada passo do seu funcionamento

Determinstico

Dado a mesma massa de dados como entrada garantem a mesma sada corresponde no mesmo nvel complexidade assinttica

Paradigma Dividir e Conquistar

Resolve o problema principal, dividindo-o em subproblemas menores que em tese so mais simples de serem resolvidos

Tcnicas

Anlise

Anlise passo-a-passo

Funo de Complexidade

F(n) = logn+1

Relao de Recorrncia

Teorema Mestre

Para n >= 2

Anlise Assinttica

Melhor caso

O melhor caso da busca binria acontece quando o elemento a ser procurado encontrado na primeira tentativa Realiza somente duas operaes no melhor caso

O(1)

O melhor caso da busca binria apresenta um comportamento constante

Anlise Assinttica

Pior Caso

O pior caso da busca binria acontece quando o elemento a ser procurado no se encontra na massa de dados Realiza todas as operaes possveis

O(logn)

O pior caso da busca binria apresenta um comportamento logartmico.

Anlise Assinttica

Pior caso
Exemplo, vetor n = 64
Loop Loop Loop Loop Loop Loop

1 n = 64 para n = 32 2 n = 32 para n = 16 3 n = 16 para n = 8 4 n = 8 para n = 4 5 n = 4 para n = 2 6 n = 2 para n = 1

Nmero total de operaes c * k Generalizao do padro observado acima n = 2^k Aplicando log dos dois lados temos k = logn Consequentemente c * logn O(logn)

Anlise Assinttica

Caso Mdio

O caso mdio da busca binria acontece quando o elemento a ser procurado encontrado em uma quantidade entre O(1) e O(logn) O nmero de operaes depende da posio na massa de dados onde o elemento a ser procurado se encontra.

O(logn)

O pior caso da busca binria apresenta um comportamento logartmico.

Anlise Assinttica

Anlise Assinttica

Anlise Assinttica

Anlise Assinttica

Anlise Assinttica

Observao

importante lembrar que a busca binria s funciona em massa de dados ordenadas O algoritmo de ordenao usado na massa somar sua complexidade a complexidade total do algoritmo se for necessrio organizar os dados O algoritmo de ordenao deve ser escolhido com cautela.

Teste de Execuo

Teste de execuo

Massa de dados

10 elementos 10 elementos 10^4 elementos 10^5 elementos 10^6 elementos

10^7 elementos

Teste de execuo

Grfico Melhor Caso

Teste de execuo

Caso Mdio

Teste de execuo

Grfico Caso Mdio

Teste de execuo

Pior Caso

Sugesto de Melhorias

Sugesto de Melhorias

Verificar as pontas

Antes de iniciar a busca, verificar se o elemento procurado est nas pontas ou se ele maior que o elemento na ponta direita ou menor que o elemento da pontas esquerda Se o elemento a ser buscado cai nestes critrios, conseguimos evitar o pior caso o transformando para um melhor caso

Estouro de Limite

O clculo do meio do vetor meio = (inicio+final)/2 uma implementao ingnua, sujeita a causar falhas no algoritmo para nmeros muito grandes Para corrigir tal problema, devemos calcular o meio da seguinte forma:

Meio = (final inicio)/2 + inicio

Referncias

http://www.brpreiss.com/books/opus5/html/page449.html Algoritmos : teoria e prtica - Thomas H. Cormen http://rosettacode.org/wiki/Binary_search