Si la matriz se clasifica primero, digamos en orden ascendente, entonces la búsqueda se vuelve fácil. El índice es menor que el índice para el elemento medio, si la clave es menor que el valor del índice medio, o el índice es igual o mayor que el del índice medio, si el valor es igual o mayor que el el del valor del índice medio.
Así que solo divide la matriz en dos. Si el valor se encuentra en el lado izquierdo, no es necesario perder el tiempo buscando el lado derecho; Solo busca el lado izquierdo. Si el valor se encuentra en el lado derecho, no es necesario perder el tiempo buscando en el lado izquierdo; Solo busca el lado derecho. Dado que la matriz ya se clasifica por completo, cuando se llega a cualquier lado, se divide nuevamente en dos, y solo se busca uno de los nuevos pares de lados. De hecho, buscar de esta manera es simplemente dividirse en dos, hasta que se lleve al índice del valor. No se realiza ninguna búsqueda real en términos de escaneo porque la matriz ya está ordenada. Puede haber un ligero movimiento a la derecha, y un poco de movimiento leve a la izquierda en la matriz durante la búsqueda.
Binario implica, dos. Y así, este tipo de búsqueda se llama búsqueda binaria. Hay diferentes órdenes de clasificación: todos los valores en la matriz se pueden clasificar en orden ascendente o orden descendente por completo. Una matriz también se puede clasificar en lo que se conoce como formato de árbol de búsqueda binaria. Esto no es una clasificación completa en orden ascendente o descendente. Sin embargo, la búsqueda de algoritmo binario todavía funciona con este formato.
Este artículo explica la búsqueda binaria de Java. El algoritmo de búsqueda binaria en Java funciona en una matriz que ya está ordenada. Solo se considera la clasificación completa en orden ascendente en este artículo. Este artículo comienza con la ilustración del algoritmo de búsqueda binaria. Luego continúa explicando cómo usar los métodos binarySearch () de la clase de matrices Java.
Contenido del artículo
Ilustración del algoritmo de búsqueda binaria
Considere la siguiente secuencia de caracteres:
P V D Q S X T H N OOrganización en orden ascendente, la secuencia se convierte en:
D h n o p q s t v xHay diez elementos aquí. El conteo de índice comienza desde 0. Cuando el número de elementos es par (e.gramo., 10), el índice para el elemento medio se considera el número de elementos divididos por dos. En este caso, 10/2 es 5. Cuando el número de elementos es impar, el índice para el elemento medio se toma como la parte entera (número entero) del número de elementos divididos por dos.
Hay dos listas arriba. El segundo es la forma ordenada del primero. Suponga que la búsqueda era saber si S estaba presente en la primera lista. La lista primero tendría que clasificarse para tener la segunda lista en el esquema de búsqueda binaria. En la lista ordenada, el índice para la posición media es 5 = 10/2. Esto corresponde al valor, q. La búsqueda luego se detiene para verificar si q es s, el valor buscó. Si es así, entonces la búsqueda se detiene. Si no es así, la búsqueda verifica si S se encuentra menos de Q o desde Q hacia arriba.
En este caso, se encuentra en el rango desde Q hacia arriba, que luego se elige. No se desperdiciará tiempo buscando en la mitad inferior de la lista (matriz). Entonces, esta nueva gama debe dividirse en dos. Este rango consta de 5 elementos. 5/2 = 2 y un 1/2. El elemento medio está en la posición 2 de esta nueva gama. Esto corresponde a T, si el recuento desde cero es comenzar desde Q. El índice real de t es 7.
El rango inferior o izquierdo ahora consta de (Q s), mientras que el nuevo rango superior o derecho ahora consiste en (T V x). Es el nuevo elemento medio, t igual que s, el valor buscado? - No. En el que el rango se encuentra s; ¿Está en el rango inferior, (Q s) o en el rango superior, (T V x)? - Se encuentra en el rango inferior.
Entonces, el rango inferior (Q s) debe dividirse en dos. Cuando esto se hace, el índice medio para este rango corresponde a S (2/2 = 1, ya que Q está en el nuevo índice 0). El índice real para S es 6 (d está en el índice original 0). El índice del valor encontrado debe devolverse.
Clave no encontrada
El valor buscado se llama clave. La lista ordenada en realidad tiene dos indexación como se muestra a continuación:
D | H | norte | O | PAG | 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 |
La primera fila de esta tabla tiene la lista ordenada. La segunda fila tiene la indexación normal. La tercera fila tiene un tipo de indexación negativa donde el primer elemento está en el índice -1, el segundo está en el índice -2, el tercero en el índice -3, y así sucesivamente.
Si se encuentra la clave, el algoritmo Java devolverá el índice normal, comenzando a partir de 0. Si no se encuentra la clave, el algoritmo Java devolverá el índice negativo para la posición que la clave habría ocupado (suponiendo que la matriz se extendiera a la derecha por un elemento).
Paquete y clase de Java para búsqueda binaria
El esquema de búsqueda binaria de Java funciona en una matriz que ya está ordenada. Las matrices de clase Java, que se encuentra en el Java.utilizar.* paquete, tiene métodos binarySearch () para buscar binaria una matriz que ya está ordenada. Cada uno de estos métodos devuelve un entero que es un índice normal si se encuentra la clave, o un índice negativo, como se explicó anteriormente, si la clave no se encuentra. Dos de estos métodos son para caracteres.
Construyendo la matriz para la búsqueda
La segunda lista anterior se usará para ilustrar la codificación de búsqueda binaria en Java. La siguiente declaración se puede usar para construir la matriz ordenada:
char [] arr = new char [] 'd', 'h', 'n', 'o', 'p', 'q', 's', 't', 'v', 'x' ;El esquema de búsqueda binaria de Java funciona en una lista que ya está ordenada.
Métodos de búsqueda binarios de la clase de matrices
La matriz de caracteres anteriores se utilizará en esta sección para ilustración. Los métodos de búsqueda binaria están en la clase de matrices de la Java.utilizar.* paquete. Este paquete debe importarse para que la clase de matrices se utilice.
Todos los métodos de la clase de matrices son métodos estáticos. Esto significa que un objeto no tiene que ser instanciado para ninguno de sus métodos a utilizar. Dos de estos métodos son métodos de búsqueda binarios para caracteres. La sintaxis de uno de los métodos de búsqueda binarios, para caracteres es:
Public static int binarySearch (char [] a, char key)El siguiente programa busca S que se encuentre:
importar java.utilizar.*;La salida es 6. El siguiente segmento de código busca b, u y z que no se encuentren cada uno.
char [] arr = new char [] 'd', 'h', 'n', 'o', 'p', 'q', 's', 't', 'v', 'x' ;La salida es,
-1 -9 -11Buscando un rango
La sintaxis para buscar una variedad de caracteres es:
public static int binarySearch (char [] a, int fromIndex, int toIndex, char key)Fromindex es el índice normal en el que comienza el rango. Toindex es el índice normal justo después del último elemento del rango. El siguiente segmento de código busca la matriz ordenada que comienza desde el índice 3 hasta el índice 7, que es el índice 8. El elemento para el índice 8 no está incluido en el rango.
char [] arr = new char [] 'd', 'h', 'n', 'o', 'p', 'q', 's', 't', 'v', 'x' ;La clave es s, y la salida es 6.
Conclusión
Las sintaxis de las matrices para buscar una matriz de tipos primitivos son: