Búsqueda binaria usando pthread

La búsqueda binaria es un método popular de búsqueda en una array o lista ordenada. Simplemente divide la lista en dos mitades y descarta la mitad que tiene cero probabilidad de tener la clave. Al dividir, verificamos el punto medio para la clave y usamos la mitad inferior si la clave es menor que el punto medio y la mitad superior si la clave es mayor que el punto medio. La búsqueda binaria tiene una complejidad temporal de O(log(n)).

La búsqueda binaria también se puede implementar utilizando subprocesos múltiples donde utilizamos los núcleos del procesador proporcionando a cada subproceso una parte de la lista para buscar la clave.

La cantidad de subprocesos depende de la cantidad de núcleos que tenga su procesador y es mejor crear un subproceso para cada núcleo.

Ejemplos:

Input :  list = 1, 5, 7, 10, 12, 14, 15, 18, 20, 22, 25, 27, 30, 64, 110, 220
         key = 7
Output : 7 found in list

Input :  list = 1, 5, 7, 10, 12, 14, 15, 18, 20, 22, 25, 27, 30, 64, 110, 220
         key = 111
Output : 111 not found in list

Nota: se recomienda ejecutar el programa en un sistema basado en Linux.
Compile en Linux usando el siguiente código:

g++ -pthread program_name.cpp
// CPP Program to perform binary search using pthreads
#include <iostream>
using namespace std;
  
// size of array
#define MAX 16
  
// maximum number of threads
#define MAX_THREAD 4
  
// array to be searched
int a[] = { 1, 5, 7, 10, 12, 14, 15, 18, 20, 22, 25, 27, 30, 64, 110, 220 };
  
// key that needs to be searched
int key = 110;
bool found = false;
int part = 0;
  
void* binary_search(void* arg)
{
  
    // Each thread checks 1/4 of the array for the key
    int thread_part = part++;
    int mid;
  
    int low = thread_part * (MAX / 4);
    int high = (thread_part + 1) * (MAX / 4);
  
    // search for the key until low < high
    // or key is found in any portion of array
    while (low < high && !found)  {
  
        // normal iterative binary search algorithm
        mid = (high - low) / 2 + low;
  
        if (a[mid] == key)  {
            found = true;
            break;
        }
  
        else if (a[mid] > key)
            high = mid - 1;
        else
            low = mid + 1;
    }
}
  
  
// Driver Code
int main()
{
    pthread_t threads[MAX_THREAD];
  
    for (int i = 0; i < MAX_THREAD; i++)
        pthread_create(&threads[i], NULL, binary_search, (void*)NULL);
  
    for (int i = 0; i < MAX_THREAD; i++)
        pthread_join(threads[i], NULL);
  
    // key found in array
    if (found)
        cout << key << " found in array" << endl;
  
    // key not found in array
    else
        cout << key << " not found in array" << endl;
  
    return 0;
}

Producción:

110 found in array

Publicación traducida automáticamente

Artículo escrito por shubham_rana_77 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *