Escolar Documentos
Profissional Documentos
Cultura Documentos
ALGORITMOS DE PESQUISA
Sequencial
Imagine uma estrutura de dados do tipo array composta por seis elementos
internos (nomes de pessoas). Essa estrutura é composta por um nome e seis
elementos internos. Lembre-se que todo array começa na posição zero e tem como
referência um par de chaves compostos pelo nome do array e sua posição, por
exemplo, nomeArray(posição]. Desta forma, pode-se referenciar cada elemento
dentro do array seguindo o mesmo critério, por exemplo, o elemento na posição um
seria nomeArray[0], o elemento na posição dois seria nomeArray[1] e assim
sucessivamente.
Essa operação será feita com cada elemento dentro do array até o final. Caso,
o elemento buscado seja encontrado antes desse momento, o método é finalizado na
posição que a condição foi satisfeita, ou seja, quando o valor do elemento do array for
igual a ‘40’.
Complexidade
Análise do algoritmo
O exemplo ilustrado na figura representa, em script de código de programação
Java, a estrutura de busca de um elemento dentro do array ‘nomes’ representado
anteriormente na figura.
3! = 3*(3-1)*(3-2) = 6
Figura – Recursividade
Nota-se que a instancia maior (3) foi dividida em instancia menores até o
resultado final (6). Na programação, o conceito de recursividade segue os mesmos
princípios da matemática. Em uma busca linear recursiva, dado um número x, a
pesquisa e retorna o valor da chave que contém o valor x, mas caso esse elemento
não seja encontrado, o valor retornado é -1.
Análise do algoritmo
O mesmo exemplo da figura pode ser reescrito na forma recursiva como ilustra
a figura a seguir:
1 2 3 4 5 6 7 9
No exemplo ilustrado pela figura, o array é dividido pela metade a partir do item
cinco, posteriormente uma nova divisão foi realizada, desta vez com o item três. Em
seguida, a parte restante foi dividida no item dois e, finalmente, restou somente o
elemento de busca, nesse caso, o item um.
A outra metade é restringida, pois o elemento buscado é menor que o elemento
de divisão, neste exemplo, o número cinco. Caso, ele fosse maior que o elemento do
meio da tabela, a busca percorreria o lado direito da árvore.
Complexidade
Você pode observar, o método com dois parâmetros que faz busca binária na
estrutura do array ordenado. Nas linhas seis e sete são declaradas as variáveis de
controle início e fim que são usadas para determinar o ponto médio do array (linha
nove).
O loop para buscar o número dentro do array tem início na linha oito. Verifica-
se, a princípio, se a chave é menor que o fim. Se sim, o valor do meio é calculado
(linha nove) e um comando de controle para conferir se a chave passada equivale ao
conteúdo do elemento do meio é aplicado. Se sim, o elemento do meio é retornado.
Se não, é verificado se a chave é maior que o número do meio.
Neste momento, se a chave for maior (linha 12), adiciona-se 1 ao valor
correspondente à variável meio e o resultado desempenha a função de início na
próxima busca (linha 14). Por outro lado, se a chave for menor, subtrai-se 1 ao valor
correspondente à variável meio e o resultado desempenha a função de fim na próxima
busca. Quando todas as possibilidades forem esgotadas e o valor da chave não for
encontrado, será retornado -1.
Nota-se que a chamada do método é realizada dentro do método principal
(linha 27) por meio do comando de saída e os parâmetros passados são declarados
nas linhas 25 e 26 respectivamente.