¿Cuál es el principio principal del algoritmo de búsqueda binaria?

El principio principal? Divide-n-Conquer. Sin embargo, esto solo es posible si hay alguna estructura en los datos que está buscando. En particular, la búsqueda binaria solo funciona en datos ordenados en orden. Si los datos están en orden aleatorio, la búsqueda binaria simplemente no funcionará.

La idea es que mire primero el elemento central. Pruébelo contra el valor necesario. Si es más grande que la que está buscando, entonces sabe que no puede estar en la mitad superior, por lo tanto, reduzca el número de lugares a través de la mitad inferior. Enjuague y repita para esa sección de los datos hasta que lo haya encontrado o no quede nada para buscar.

Cada paso en la búsqueda binaria reduce el número de elementos a la mitad. Por lo tanto, mirar a través de 20 elementos va en pasos: 20, 10, 5, 2, 1. Es decir, en lugar de mirar los 20 elementos, solo necesita mirar 5 de ellos. Tener más elementos, se pone aún mejor, 100 → 50 → 25 → 12 → 6 → 3 → 1, por lo que en lugar de 100 controles, solo hay 7.

Matemáticamente esto se conoce como O (log N). Es decir, a medida que aumenta el número de elementos, el número de controles aumenta a una escala logarítmica. Con una búsqueda binaria simple es un logaritmo de base 2 (de la idea de reducir a la mitad).

Búsqueda binaria | Todo lo que necesitas aprender: YouTube

Dada una matriz ordenada arr [] de n elementos, escriba una función para buscar un elemento dado x en arr [].

Un enfoque simple es hacer una búsqueda lineal . La complejidad temporal del algoritmo anterior es O (n). Otro enfoque para realizar la misma tarea es usar la búsqueda binaria.

Búsqueda binaria: busque una matriz ordenada dividiendo repetidamente el intervalo de búsqueda por la mitad. Comience con un intervalo que cubra toda la matriz. Si el valor de la clave de búsqueda es menor que el elemento en el medio del intervalo, reduzca el intervalo a la mitad inferior. De lo contrario, acóplelo a la mitad superior. Verifique repetidamente hasta que se encuentre el valor o el intervalo esté vacío.

Utiliza un caso degenerado de la estrategia de “divide y vencerás”: en cada paso del algoritmo, el tamaño del problema se reduce a la mitad y, por lo tanto, el número de pasos es logarítmico en el tamaño de la entrada. Como el costo de cada paso puede estar limitado por una constante, el costo total también está limitado logarítmicamente.

Básicamente divide y vencerás. Rompe el conjunto de datos a la mitad cada vez que lo busca. P.ej :

BinarySearch de clase pública {

public static void main (String [] args) {

int [] a = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11};
System.out.println (binarySearchIterative (a, 8));
System.out.println (binarySearchRecursive (a, 0, a.length – 1, 8));

}

public static int binarySearchIterative (int [] a, int key) {

int lo = 0;
int hi = a.length – 1;

while (lo <= hi) {
int mid = lo + (hi – lo) / 2;
if (clave hola = medio – 1;
} else if (clave> a [medio]) {
lo = medio + 1;
} más {
volver a mediados;
}
}

volver -1;
}

private static int binarySearchRecursive (int [] a, int lo, int hi, int key) {

int mid = (lo + hi) / 2;
si (hola volver -1;
}

if (clave == a [medio]) {
volver a mediados;
} else if (clave return binarySearchRecursive (a, lo, mid – 1, clave);
} más {
return binarySearchRecursive (a, mid + 1, hola, clave);
}

}

}

Un poco de trabajo para preparar sus datos puede ahorrarle mucho trabajo más adelante. Esa es la conclusión principal de la búsqueda binaria, y es una lección útil a tener en cuenta para problemas más complicados.

More Interesting

Para (I = 0; I <3; I ++) fork (), ¿cómo puedo hacer un algoritmo para contar el número de procesos y mostrarlo solo una vez?

¿Las ventajas del arreglo lineal desaparecen si el arreglo es demasiado corto? ¿Por qué veo 4-6 cajas de cajas?

¿Cuáles son los actos que se consideran hacer trampa durante un desafío de contratación en Interviewstreet?

Cómo crear mi propio algoritmo de compresión básico para archivos

¿Podemos modificar la técnica de descomposición de la raíz cuadrada a la descomposición de la raíz cúbica? Si no, ¿por qué?

¿Qué necesitamos antes de comenzar las estructuras de datos?

Supongamos que eliminamos un borde de un árbol de expansión y luego agregamos un borde diferente para que permanezca conectado. ¿Seguirá siendo un árbol de expansión?

En Facebook, ¿qué determina los ocho amigos que se muestran en esa cuadrícula de imágenes de perfil 4 × 2?

¿Cómo aprenden los algoritmos de aprendizaje de refuerzo del juego de ajedrez a jugar bien, dado que cada movimiento no está etiquetado como bueno o malo, a diferencia del aprendizaje supervisado donde cada dato está etiquetado como bueno o malo?

¿Por qué necesitamos el término de sesgo en algoritmos ML como la regresión lineal y las redes neuronales?

¿Cómo resolver la pregunta 1 de ZIO2015? ¿Es un enfoque de programación dinámica?

Cómo comenzar con la introducción a los algoritmos (CLRS)

Cómo resolver este problema usando la descomposición de raíz cuadrada

¿Podemos resolver este problema SPOJ.com - Problema PT07Z de esta manera?

Soy un programador promedio, me encanta codificar en Java y estoy tratando de mejorar mis habilidades de codificación algorítmica. ¿Cómo puedo mejorarlos?