Professional Documents
Culture Documents
Jo ao Paulo Buback1 , Lorran Pegorreti 1 ,Ricardo da Hora Sobrinho1 Universidade Vila Velha (UVV) CEP 29102-920 Vila Velha ES Brasil
1
Resumo. Este artigo realiza uma an alise matem atica e te orica do algoritmo de busca bin aria. Inicialmente realizamos uma an alise passo a passo do algoritmo bem como sua an alise matem atica (relac a encia, func a o de recorr o de complexidade e somat oria dos termos). Em seguida realizamos uma an alise assint otica do algoritmo determinando suas classes assint oticas. Testes de execuc a o de tempo s ao realizados e nalmente sugest oes de melhoria do algoritmo s ao sugeridas.
1. Vis ao Geral
o o algoritmo de busca bin um algoritmo usado para enNa ci encia da computac a aria e o de um valor dentro de um vetor ordenado. Em cada passo, o algoritmo contrar a posic a compara o valor da chave de busca com o valor do elemento do meio do vetor. Se a chave o e retornada e o for igual ao elemento do meio, o elemento foi encontrado, sua posic a algoritmo termina. Entretanto, se a chave de busca for menor que o elemento do meio es no sub-vetor a esquerda do elemento, se a chave de busca o algoritmo repete suas ac o ` direita do elemento do meio. Se o espac for maior, no sub-vetor a o de busca restante do vetor for reduzido a zero, isso signica que a chave de busca n ao existe no vetor e uma o especial de n retornado, terminando o algoritmo. indicac a ao encontrado e O algoritmo de busca bin aria diminui o espac o de busca do vetor pela metade a o, dessa forma a localizac o de um item (ou a vericac o que ele n cada interac a a a ao consta alcanc no vetor) e ado em tempo logar tmico. Tal algoritmo pode ser caracterizado como um algoritmo determin stico de busca dicot omica, que utiliza-se do paradigma dividir e conquistar. quando a chave de busca e A performance do algoritmo no melhor dos casos e o, portanto o tempo de execuc o e da ordem encontrada imediatamente na primeira iterac a a constante de O(1). No pior dos casos, a chave de busca n ao constaria na massa de dados, portanto o algoritmo dividira a massa de dados pela metade at e chegar em uma massa de valor unit ario. O m aximo de vezes que se pode dividir um massa de dados de valor n pela logn, portanto a ordem de execuc o no pior dos casos e da ordem de O(logn). metade e a encontrado uma quantidade de vezes parecida com o No caso m edio o n umero e o do algoritmo caria na ordem de O(logn). pior caso. Neste caso o tempo de execuc a importante salientar que a busca bin E aria s o funciona em uma massa de dados ordenada (de prefer encia na ordem crescente). Portanto, dada uma massa de dados des o antes do procedimento de busca organizada, deve-se utilizar um algoritmo de ordenac a ser inicializado.
o usado deve ser escolhido com cautela, Dessa forma, o algoritmo de ordenac a pois a forma como a massa de dados se apresenta ir a inuenciar no tempo gasto para o errado pode ocasionar em tempos muitos organiza-la. Escolher o algoritmo de ordenac a o da busca bin altos, prejudicando o tempo de execuc a aria.
2. Algoritmo
A busca bin aria pode ser aplicada de forma iterativa ou de forma recursiva. A seguir mostramos exemplos das duas maneiras: Vers ao iterativa: i n t B i n a r y S e a r c h ( i n t A[ ] , i n t n , i n t K) { i n t L=0 , Mid , R= n 1; w h i l e ( L<=R) { Mid = ( L +R ) / 2 ; i f ( K= =A[ Mid ] ) r e t u r n Mid ; e l s e i f ( K > A[ Mid ] ) L = Mid + 1 ; else R = Mid 1 ; } return 1 ; }
Vers ao recursiva: i n t b i n a r y s e a r c h ( i n t A[ ] , i n t { / / t e s t i f array i s empty i f ( imax < i m i n ) : / / s e t i s empty , s o r e t u r n r e t u r n KEY NOT FOUND ; else { / / calculate midpoint to i n t i m i d = m i d p o i n t ( imin key , i n t imin , i n t imax )
/ / t h r e e way c o m p a r i s o n i f (A[ i m i d ] > key ) / / key i s in lower s u b s e t r e t u r n b i n a r y s e a r c h (A, key , imin , imid 1 ) ; e l s e i f (A[ i m i d ] < key ) / / key i s in upper s u b s e t r e t u r n b i n a r y s e a r c h (A, key , i m i d +1 , imax ) ; else / / key has been found return imid ; } }
3.3. Paradigma Dividir e Conquistar O algoritmo de busca bin aria utiliza-se do paradigma de dividir e conquistar. Tal paradigma consiste em resolver o problema principal, o dividindo em subproblemas o menores que em tese s ao mais simples de serem resolvidos. Dessa forma, as soluc a o do problema principal. dos subproblemas podem ser somadas para encontrar a soluc a A busca bin aria entra neste paradigma ao dividir pela metade a massa de dados a o, diminuindo pela metade o espac cada iterac a o de busca da massa, at e que o elemento buscado seja encontra ou at e que o espac o de busca seja reduzido a um valor unit ario.
es para terminar o alapresenta o seu pior caso (realiza o m aximo poss vel de operac o es para terminar goritmo), o caso m edio (realiza, aproximadamente a m edia de operac o o algoritmo), ou o melhor caso (realiza aproximadamente o menor n umero poss vel de es para terminar o algoritmo). operac o Analisando estes casos especiais podemos determinar os limites m aximo e m nimo do comportamento de performance do algoritmo, dada uma massa sucientemente grande de dados. 5.1. An alise da complexidade assint otica da busca bin aria Nesta sess ao iremos realizar a analise de complexidade da busca bin aria que ir a determinar o comportamento do algoritmo a medida que a sua massa de dados cresce. Tomando es realizadas em cada a vers ao iterativa do algoritmo como base vamos analisar as operac o caso especial para uma massa de dados n. 5.2. Melhor Caso encontrado O melhor caso da busca bin aria acontece quando o elemento a ser procurado e encontrado na primeira tentativa, o algoritmo passa na primeira tentativa. Se o elemento e o do elemento encontrado. pelo loop somente uma vez e termina retornando a posic a es que trabalham com a massa de dados, Levando em conta somente as operac o es por casa passado pelo loop. vemos que o algoritmo realiza duas operac o es realizadas Uma vez que o algoritmo s o funciona uma vez, o n umero de operac o constante e o tamanho da massa de dados n es ree ao inuencia no n umero de operac o es sua classe assint alizadas. Como o algoritmo realiza somente duas operac o otica no de: melhor caso e O(2) Logo o melhor caso da busca bin aria apresenta um comportamento constante. 5.3. Pior Caso O pior caso da busca bin aria acontece quando o elemento a ser procurado n ao existe na es de busca poss massa de dados forc ando o algoritmo a realizar o m aximo de operac o veis at e retornar o valor especial de n ao encontrado. Vamos considerar uma massa de dados o do algoritmo. n = 64 em cada iterac a A cada passada pelo loop a massa de dados ira ter o seu espac o de busca diminu do pela metade at e que o espac o de busca unit ario seja alcanc ado e o algoritmo termine. reduzido para n = 32 Loop 1 n = 64 e reduzido para n = 16 Loop 2 n = 32 e reduzido para n = 8 Loop 3 n = 16 e reduzido para n = 4 Loop 4 n = 8 e reduzido para n = 2 Loop 5 n = 4 e reduzido para n = 1 Loop 6 n = 2 e es para um n = 64. Perceba Podemos ver que ocorrem um total de 6 iterac o que 64 = 26 .
importante notar o mesmo se aplica as subdivis Tamb em e oes do espac o de busca: n = 32 = 25 , n = 16 = 24 , etc. Dessa forma podemos considerar um caso mais geral onde n = 2k . Como j a foi mencionado anteriormente, a cada passada pelo loop o algoritimo re es, logo o n es ser es aliza duas operac o umero total de operac o a a quantidade total de iterac o es por iterac o, em outras palavras 2 k . vezes o n umero de operac o a O valor de k pode ser deduzido da seguinte express ao: n = 2k Aplicando o logaritmo nos dois lados da igualdade temos que k = logn es realizadas pelo o algoritmo ser Logo o n umero total de operac o a de 2 logn Eliminando a constante 2, uma vez que ela n ao inuenciar a o resultado para n de: muito grandes a classe assint otica da busca bin aria no pior caso e O(logn) 5.3.1. Caso M edio O caso m edio ser a um valor entre O(1) e O(logn). Pode ser tentador armar que o caso m edio para que um elemento dentro de uma massa de dados seja encontrado leve o o fato de que cada (1 + logn)/2. Entretanto, essa f ormula n ao leva em considerac a es antes de ser enconelemento da massa de dados requer um n umero diferente de iterac o trado. Imagine uma massa de dados representada por um vetor de 15 elementos como um exemplo:
o o valor do meio e calComo mostrado no algoritmo acima, em cada interac a o 7, por exemplo, sempre culado (meio = (inicio + f inal)/2). O elemento no posic a nica iterac o para ser encontrado. Entretanto, um elemento na posic o 14 levar a uma u a a es para ser encontrado. A gura abaixo mostra a a rvore bin leva 4 iterac o aria ilustra os quatro casos de uma busca bin aria executada com sucesso, cada uma levando um n umero es. Por exemplo, elementos nas posic es 1,5,9 e 13 levam 3 iterac es diferente de iterac o o o o 3 e 11 levam somente duas para serem encontrados, enquanto que elementos na posic a es para serem encontrados. iterac o o ao seus respectivo A tabela abaixo resume os elementos do vetor em relac a es que leva para eles serem encontrados. A coluna na extrema direita n umero de iterac o mostra a porcentagem dos elementos de cada caso. Por exemplo, aproximadamente 50% es no vetor levam 4 iterac es para serem encontrados. (8 de 15) dos conjuntos de posic o o
Figure 2. Arvore representando a quantidade de iterac oes para encontrar um elemento em uma espec posic ao ca.
es N umero de Iterac o Vetor de elementos Porcentagem 1 A[7] 6,25% 2 A[3],A[11] 12,5% 3 A[1],A[5],A[9], A[13] 25% 4 A[0],A[2],A[4],A[6],A[8],A[10],A[12],A[14] 50% Dessa forma podemos deduzir a seguinte an alise: Para simplicar os c alculo seja n = 2k 1 (k = logn). A f ormula correta para es para um busca de sucesso e mostrado abaixo. calcular o n umero m edio de iterac o
Figure 3. formula
Figure 4. formula
logar Portanto o caso m edio da busca bin aria tamb em e tmico. O(logn)
igual ao pior caso da busca Consequentemente percebemos o que caso m edio, e bin aria. o Casos especias Func a Melhor Caso O(logn) Caso M edio O(logn) Pior Caso O(2) Classe Assint otica Logar tmica Logar tmica Constante
Os valores usados na massa de dados foram gerados aleatoriamente e ordenados o, para s por um algoritmo de ordenac a o ent ao serem usados na busca bin aria. o a simulac o dos casos especiais 6.1. Em relac a a Para simular o comportamento do algoritmo no melhor caso, realizamos a busca sempre pelo elemento do meio da massa de dados. Para simularmos o comportamento do pior caso, sempre buscamos por um elemento que n ao existia na massa de dados. E para simular o caso m edio buscamos por um elemento aleat orio da massa de dados. Destes teste, uma s erie de dado foram gerados que suporte emp rico a analise te orica mostrada na sess ao anterior.
6.2. Testes para o melhor caso Abaixo seguem os dados realizados nos teste simulando o melhor caso:
Pela an alise do gr aco, a medida que a quantidade de n umeros da massa de dados aumenta, n ao ocorre nenhuma mudanc a no tempo gasto para encontra a chave a ser bus es no melhor caso e constante e o cada. Disso podemos concluir que o n umero de operac o o do algoritmo. Tal tamanho da massa de dados n ao ir a inuenciar no tempo de execuc a o emp resultado fornece conrmac a rica para a an alise teorica do algoritimo no melhor constante, caso, mostrando que neste caso especial da busca bin aria seu comportamento e ou seja, O(1). 6.3. Testes para o pior caso Abaixo seguem os dados realizados nos teste simulando o pior caso:
Pela analise do gr aco, a medida que a quantidade de n umeros na massa de dados ngulo, apresentando comportamento comaumenta, a curvatura do gr aco diminu de a pat vel com o de um comportamento logar tmico. Os testes pr aticos portanto, d ao suporte emp rico a an alise te orica, mostrando que o pior caso da busca bin aria e O(logn)
6.4. Teste para o caso m edio Abaixo seguem os dados realizados nos teste simulando o caso m edio:
Pela an alise do gr aco vemos que o algoritmo de busca bin aria se comporta de forma similar ao melhor caso que possu um comportamento logar tmico. Os testes pr aticos fornecem evid encias emp ricas que d ao suporte a an alise teorica, mostrando que de: no caso m edio a busca bin aria e O(logn)
7. Melhorias
O algoritmo da busca bin aria em si tem uma qualidade excelente. Entretanto, ainda poss o. Uma forma de faze-lo seria adicionar duas e vel melhorar sua implementac a o do vetor, o outro guardaria o valor da vari aveis, uma guardaria o valor da primeira posic a o do vetor. Visto que a busca bin ultima posic a aria necessita que a massa de dados esteja ordenada, conseguir esses dados e algo simples e perfeitamente poss vel.
Algoritmo melhorado: i n t B i n a r y S e a r c h ( i n t A[ ] , i n t n , i n t K) { i n t L=0 , Mid , R= n 1; i f (A[R] == K) { return R; } e l s e i f (K > A[R ] ) { r e t u r n 1; } e l s e i f (A[ 0 ] == K) { return 0; } e l s e i f (K < A [ 0 ] ) { r e t u r n 1; } w h i l e ( L<=R) { Mid = ( L +R ) / 2 ; i f ( K= =A[ Mid ] ) r e t u r n Mid ; e l s e i f ( K > A[ Mid ] ) L = Mid + 1 ; else R = Mid 1 ; } return 1 ; } o, se o numero a ser procurado for maior que Perceba que com essa modicac a o do vetor ou menor que o valor da primeira posic o o algoo valor da ultima posic a a ritmo ir a retorna o resultado de n ao encontrado. O mesmo acontece caso o valor a ser es pesquisado seja igual ao primeiro ou igual ao ultimo. Isso permite que nessas situac o es sejam poupadas. O que seria o pior caso, ou seja, o algoritmo executaria varias operac o LogN vezes, se transformaria em O(1). Mudando sua classe assint otica de logar tmica para constante em determinados casos. Outro aspecto de melhorais tem a ver com a corretude do algoritmo. Em es pr implementac o aticas do algoritmo as vari aveis usadas para representar os ndices ter ao um tamanho nito, logo ser ao somente capazes de representar uma s erie nita de valores. Por exemplo inteiros de 32-bits somente suportam valores na faixa de -2147483648 a es ingenuas do algo2147483647. Isso pode causar s erios problemas em implementac o ritmo. Se o meio do vetor for calculado como meio = (inicio + f inal)/2 , ent ao o valor (inicio+nal) ir a exceder o limite da faixa de n umeros suportados se o valor da vari avel
nal for maior que 2147483647/2 (usando inteiros como exemplo) e busca seja realizada nos extremos da parte direita do vetor, ultrapassado o limite da faixa, gerando um erro. Tal problema pode ser contornado modicando o c alculo da vari avel meio da seguinte forma: meio = (f inal?inicio)/2 + inicio.
8. Conclus ao
Realizamos a analise te orica e matem atica da algoritmo de busca bin aria. Conduzimos o apresentamos melhorias ao algoritmo. teste de tempo de execuc a
9. Refer encias
http://www.brpreiss.com/books/opus5/html/page449.html Algoritmos : teoria e pr atica - Thomas H. Cormen http://rosettacode.org/wiki/Binary_search