Comprender la búsqueda binaria

    En este tutorial, aprenderá cómo funciona la clasificación de búsqueda binaria. Además, encontrará ejemplos en lenguaje C.
    La búsqueda binaria es un algoritmo de búsqueda que se utiliza para encontrar la posición de un elemento en una matriz ordenada.
    En este método, busque siempre un elemento en medio de la matriz parcial.
    La búsqueda binaria solo se puede implementar en una lista ordenada. Si los elementos aún no están ordenados, primero debemos ordenarlos.

¿Cómo funciona la búsqueda binaria?

    El algoritmo de búsqueda binaria se puede implementar de las dos formas siguientes.

  1. Método iterativo
  2. Recursividad

    El método recursivo sigue el método de divide y vencerás.
    Los pasos de estos dos métodos se analizan a continuación.

  1. La matriz a buscar es:
    Inserte la descripción de la imagen aquí
    suponga que x = 4 es el elemento a buscar.
  2. Establezca dos punteros bajo y alto en las posiciones más baja y más alta, respectivamente.
    Inserte la descripción de la imagen aquí
  3. Encuentre el elemento del medio en la mitad de la matriz, por ejemplo, arr [(bajo + alto) / 2] = 6.
    Inserte la descripción de la imagen aquí
  4. Si x == mid, devuelve mid; de lo contrario, compare el elemento buscado con mid.
  5. Si x> mid, compare x con el elemento medio del elemento a la derecha de mid. Esto se puede hacer estableciendo bajo a bajo = medio + 1.
  6. De lo contrario, compare x con el elemento del medio a la izquierda del medio. Esto se puede hacer estableciendo alto a alto = medio-1.
    Inserte la descripción de la imagen aquí
  7. Repita los pasos 3 a 6 hasta que lo bajo se encuentre con lo alto.
    Inserte la descripción de la imagen aquí
  8. Encuentre x = 4.
Pseudocódigo de búsqueda binaria

    Método iterativo

do until the pointers low and high meet each other.
    mid = (low + high)/2
    if (x == arr[mid])
        return mid
    else if (x > arr[mid]) // x is on the right side
        low = mid + 1
    else                       // x is on the left side
        high = mid - 1

    Recursividad

binarySearch(arr, x, low, high)
    if low > high
        return False 
    else
        mid = (low + high) / 2 
        if x == arr[mid]
            return mid
        else if x < arr[mid]        // x is on the right side
            return binarySearch(arr, x, mid + 1, high)
        else                               // x is on the right side
            return binarySearch(arr, x, low, mid - 1)
C ejemplo

    Método iterativo

// Binary Search in C

#include <stdio.h>

int binarySearch(int array[], int x, int low, int high) {
    
    
  // Repeat until the pointers low and high meet each other
  while (low <= high) {
    
    
    int mid = low + (high - low) / 2;

    if (array[mid] == x)
      return mid;

    if (array[mid] < x)
      low = mid + 1;

    else
      high = mid - 1;
  }

  return -1;
}

int main(void) {
    
    
  int array[] = {
    
    3, 4, 5, 6, 7, 8, 9};
  int n = sizeof(array) / sizeof(array[0]);
  int x = 4;
  int result = binarySearch(array, x, 0, n - 1);
  if (result == -1)
    printf("Not found");
  else
    printf("Element is found at index %d", result);
  return 0;
}

    Recursividad

// Binary Search in C

#include <stdio.h>

int binarySearch(int array[], int x, int low, int high) {
    
    
  if (high >= low) {
    
    
    int mid = low + (high - low) / 2;

    // If found at mid, then return it
    if (array[mid] == x)
      return mid;

    // Search the left half
    if (array[mid] > x)
      return binarySearch(array, x, low, mid - 1);

    // Search the right half
    return binarySearch(array, x, mid + 1, high);
  }

  return -1;
}

int main(void) {
    
    
  int array[] = {
    
    3, 4, 5, 6, 7, 8, 9};
  int n = sizeof(array) / sizeof(array[0]);
  int x = 4;
  int result = binarySearch(array, x, 0, n - 1);
  if (result == -1)
    printf("Not found");
  else
    printf("Element is found at index %d", result);
}
Complejidad de búsqueda binaria

    complejidad del tiempo

  • Mejor complejidad de caso: O (1)
  • Complejidad de caso promedio: O (log n)
  • Peor complejidad del caso: O (log n)

    Complejidad espacial La complejidad espacial de la
    búsqueda binaria es O (n).

Aplicación de búsqueda binaria
  • Utilizado en la biblioteca STL de Java, .Net, C ++
  • Durante la depuración, la búsqueda binaria se utiliza para determinar dónde ocurrió el error.
Documentos de referencia

[1] Parewa Labs Pvt. Ltd. Binary Search [EB / OL] .https: //www.programiz.com/dsa/binary-search,2020-01-01.

Supongo que te gusta

Origin blog.csdn.net/zsx0728/article/details/115047976
Recomendado
Clasificación