Pesquisa binária em Java

Pesquisa binária em Java
Pesquisando uma matriz para a posição de um valor e classificando a matriz, são dois processos diferentes. Pesquisar significa verificar se um valor chamado de chave é encontrado na matriz. Classificação significa colocar todos os valores na matriz em uma ordem específica (ascendente ou descendente). Se uma matriz não for classificada e a pesquisa for necessária, o programa deve começar do índice zero e depois para o índice 1 e depois o índice 2 e assim por diante, até atingir o índice do valor que está procurando. Se o valor ocorrer mais de uma vez, o primeiro índice deve ser retornado.

Se a matriz for classificada primeiro, digamos em ordem ascendente, então a pesquisa ficará fácil. O índice é menor que o índice para o elemento intermediário, se a chave for menor que o valor do índice do meio, ou o índice for igual ou maior que o do índice do meio, se o valor for igual ou maior que o do valor do índice do meio.

Então apenas divida a matriz em dois. Se o valor estiver no lado esquerdo, não há necessidade de perder tempo pesquisando o lado direito; Basta procurar no lado esquerdo. Se o valor estiver no lado direito, não há necessidade de perder tempo pesquisando o lado esquerdo; Basta pesquisar no lado certo. Como a matriz já está completamente classificada, quando ambos os lados são chegados, ela é dividida novamente em dois e apenas um dos novos pares de lados é pesquisado. De fato, pesquisar dessa maneira é apenas dividindo -se em dois, até que o índice do valor seja alcançado. Nenhuma pesquisa real em termos de digitalização ocorre porque a matriz já está classificada. Pode haver um pouco de movimentação para a direita, e um pouco de movimentação para a esquerda na matriz durante a pesquisa.

Binário implica, dois. E assim, esse tipo de pesquisa é chamado de pesquisa binária. Existem diferentes ordens de classificação: todos os valores na matriz podem ser classificados em ordem ascendente ou ordem decrescente completamente. Uma matriz também pode ser classificada no que é conhecido como formato de árvore de pesquisa binária. Esta não é uma classificação completa em ordem ascendente ou descendente. No entanto, a pesquisa de algoritmo binário ainda funciona com este formato.

Este artigo explica a pesquisa binária Java. Algoritmo de pesquisa binária em Java funciona em uma matriz que já está classificada. Somente a classificação completa em ordem crescente é considerada neste artigo. Este artigo começa com a ilustração do algoritmo de pesquisa binária. Em seguida, continua explicando como usar os métodos BinarySearch () da aula de Java Arrays.

Conteúdo do artigo

  • Ilustração do algoritmo de pesquisa binária
  • Pacote java e aula para pesquisa binária
  • Construindo a matriz para pesquisa
  • Métodos de pesquisa binária da aula de matrizes
  • Pesquisando um intervalo
  • Conclusão

Ilustração do algoritmo de pesquisa binária

Considere a seguinte sequência de caracteres:

P V d q s x t h n o

Organização em ordem crescente, a sequência se torna:

D h n o p q s t v x

Existem dez elementos aqui. A contagem de índice começa de 0. Quando o número de elementos é uniforme (e.g., 10), o índice para o elemento do meio é considerado como o número de elementos divididos por dois. Nesse caso, 10/2 é 5. Quando o número de elementos é ímpar, o índice para o elemento médio é tomado como parte inteira (número inteiro) do número de elementos divididos por dois.

Existem duas listas acima. O segundo é a forma classificada do primeiro. Suponha que a pesquisa foi saber se S estava presente na primeira lista. A lista teria que ser classificada para ter a segunda lista no esquema de pesquisa binária. Na lista classificada, o índice para a posição do meio é 5 = 10/2. Isso corresponde ao valor, q. A pesquisa então para para verificar se q é s, o valor procurou. Se for, então a pesquisa para. Caso contrário, então a pesquisa verifica se S é menor que q ou de q para cima.

Nesse caso, está no intervalo de Q para cima, que é então escolhido. Não será desperdiçado tempo pesquisando a metade inferior da lista (matriz). Então, esse novo alcance deve ser dividido em dois. Este intervalo consiste em 5 elementos. 5 /2 = 2 e um 1/2. O elemento intermediário está na posição 2 desta nova linha. Isso corresponde a T, se a contagem de zero for para começar de q. O índice real de t é 7.

A faixa inferior ou esquerda agora consiste em (q s, enquanto a nova faixa superior ou direita agora consiste em (t v x). É o novo elemento intermediário, o mesmo que S, o valor procurou? - Não. Em que o alcance está; está na faixa mais baixa (q s) ou na faixa superior (t v x)? - Está na faixa mais baixa.

Então, a faixa mais baixa (q s) então deve ser dividida em dois. Quando isso é feito, o índice do meio para este intervalo corresponde a S (2/2 = 1, como q está no novo índice 0). O índice real para S é 6 (D está no índice original 0). O índice do valor encontrado deve ser retornado.

Chave não encontrada

O valor procurado é chamado de chave. A lista classificada realmente tem duas indexações, como mostrado abaixo:

D H N O P Q S T V X
0 1 2 3 4 5 6 7 8 9
-1 -2 -3 -4 -5 -6 -7 -8 -9 -10

A primeira linha desta tabela tem a lista classificada. A segunda linha tem a indexação normal. A terceira linha tem um tipo de indexação negativa em que o primeiro elemento está no índice -1, o segundo está no índice -2, o terceiro no índice -3 e assim por diante.

Se a chave for encontrada, o algoritmo Java retornará o índice normal, começando de 0. Se a chave não for encontrada, o algoritmo Java retornará o índice negativo para a posição que a chave teria ocupado (assumindo que a matriz estendida à direita por um elemento).

Pacote java e aula para pesquisa binária

O esquema de busca binária Java opera em uma matriz que já está classificada. As matrizes de classe Java, que estão no Java.util.* pacote, possui métodos binarySearch () para pesquisa binária de uma matriz que já está classificada. Cada um desses métodos retorna um número inteiro que é um índice normal se a chave for encontrada, ou um índice negativo, conforme explicado acima, se a chave não for encontrada. Dois desses métodos são para chars.

Construindo a matriz para pesquisa

A segunda lista acima será usada para ilustrar a codificação de pesquisa binária em Java. A declaração a seguir pode ser usada para construir a matriz classificada:

char [] arr = novo char [] 'd', 'h', 'n', 'o', 'p', 'q', 's', 't', 'v', 'x' ;

O esquema de pesquisa binário Java opera em uma lista que já está classificada.

Métodos de pesquisa binária da aula de matrizes

A variedade de chars acima será usada nesta seção para ilustração. Os métodos de pesquisa binária estão na classe de matrizes do Java.util.* pacote. Este pacote deve ser importado para que a classe das matrizes seja usada.

Todos os métodos da aula de matrizes são métodos estáticos. Isso significa que um objeto não precisa ser instanciado para que nenhum de seus métodos seja usado. Dois desses métodos são métodos de busca binária para chars. A sintaxe de um dos métodos de busca binária, para chars é:

public static int binarySearch (char [] a, char chave)

O seguinte programa pesquisa S encontrado:

importar java.util.*;
classe pública theClass
public static void main (string [] args)
char [] arr = novo char [] 'd', 'h', 'n', 'o', 'p', 'q', 's', 't', 'v', 'x' ;
int ret = matrizes.BinarySearch (arr, 's');
Sistema.fora.println (ret);

A saída é 6. O seguinte segmento de código procura B, U e Z que não são encontrados.

char [] arr = novo char [] 'd', 'h', 'n', 'o', 'p', 'q', 's', 't', 'v', 'x' ;
int ret1 = matrizes.BininarySearch (arr, 'b');
int ret2 = matrizes.BininarySearch (arr, 'u');
int ret3 = matrizes.BinarySearch (arr, 'z');
Sistema.fora.impressão (ret1); Sistema.fora.print ("); sistema.fora.impressão (ret2);
Sistema.fora.print ("); sistema.fora.impressão (ret3); Sistema.fora.imprimir(");
Sistema.fora.println ();

A saída é,

-1 -9 -11

Pesquisando um intervalo

A sintaxe para pesquisar uma variedade de chars é:

public static int binarySearch (char [] a, int fromindex, int toIndex, Char Key)

FromIndex é o índice normal no qual o intervalo começa. ToIndex é o índice normal logo após o último elemento do intervalo. O segmento de código a seguir pesquisa a matriz classificada, começando do índice 3 a logo após o índice 7, que é o índice 8. O elemento para o índice 8 não está incluído no intervalo.

char [] arr = novo char [] 'd', 'h', 'n', 'o', 'p', 'q', 's', 't', 'v', 'x' ;
int ret = matrizes.BininarySearch (arr, 3, 8, 's');
Sistema.fora.println (ret);

A chave é s e a saída é 6.

Conclusão

As sintaxes das matrizes para pesquisar uma variedade de tipos primitivos são:

  • public static int binarySearch (byte [] a, chave de byte)
  • public static int binarySearch (byte [] a, int fromindex, int toIndex, byte key)
  • public static int binarySearch (char [] a, char chave)
  • public static int binarySearch (char [] a, int fromindex, int toIndex, Char Key)
  • public static int binarySearch (duplo [] a, chave dupla)
  • public static int binarySearch (duplo [] a, int fromIndex, int toIndex, chave dupla)
  • public static int binarySearch (float [] a, tecla float)
  • public static int binarySearch (float [] a, int a partir de Index, int toIndex, chave float)
  • public static int binarySearch (int [] a, tecla int)
  • public static int binarySearch (int [] a, int fromindex, int toIndex, int key)