Un metodo rapido per individuare un particolare elemento in un array ordinato è una ricerca binaria. Il compito iniziale di questo algoritmo è confrontare il valore target con l'elemento centrale dell'array. La ricerca viene considerata riuscita se il valore target è contenuto nell'elemento centrale. L'algoritmo cercherà nella metà sinistra dell'array se il valore dell'obiettivo è inferiore all'elemento centrale. Il programma eseguirà la scansione della metà destra dell'array se il valore obiettivo è maggiore dell'elemento centrale. Questo metodo viene ripetuto fino all'esaurimento del valore obiettivo o dell'intervallo di ricerca.
Utilizzo:
Database, motori di ricerca ed elaborazione dati sono solo alcune delle applicazioni che utilizzano la strategia di ricerca binaria.
Caratteristiche:
- La matrice dei valori di input deve essere ordinata.
- Ad ogni iterazione, il metodo riduce della metà l’intervallo di ricerca, rendendolo particolarmente efficiente per set di dati di grandi dimensioni.
- L'algoritmo ha una complessità temporale nel caso peggiore O (log n).
- La ricerca del valore desiderato viene eseguita dal programma utilizzando una strategia divide et impera.
Ecco un semplice esempio dell'algoritmo di ricerca binaria scritto in C:
#include int binary_search(int arr[], int left, int right, int target) { while (left <= right) { int mid="left" + (right - left) 2; if (arr[mid]="=" target) return mid; } else < left="mid" 1; right="mid" -1; target not found main() arr[]="{1," 3, 5, 7, 9}; n="sizeof(arr)" sizeof(arr[0]); index="binary_search(arr," 0, 1, target); (index="=" -1) printf('target found '); at %d ', index); 0; pre> <p> <strong>Output:</strong> </p> <pre> Target found at index 2 </pre> <ul> <li>The binary_search function accepts four arguments: the array to search, the left and right search range boundaries, and the target value to look for. The function returns its index if the desired value can be found; else, it returns -1.</li> <li>The main function creates an array arr and a value target. The binary_search function is then used to search the array for the desired value. The function returns the index where the target value was located if it was, the function returns the index at which it was found. Otherwise, the message 'Target not found' is displayed.</li> <li>The binary search algorithm's implementation is basic. We begin by setting the left border to the array's initial index and the right boundary to the array's last index. Once the left boundary is less than or equal to the right border, the array is looped through one more time. We use the formula (left + right) / 2 within the loop to calculate the middle index of the search range. This formula computes the integer value of the middle index's floor.</li> <li>The centre member of the array is contrasted with the target value. We return the index of the middle element if they are equal. We change the right boundary to be one less than the middle index if the desired value is less than the middle element. If not, we adjust the left border so that it is one more than the centre index. We continue doing this until the goal value is obtained or the search space is filled.</li> <li>The temporal complexity of the binary search algorithm, where n is the array size, is O(log n). This is far more efficient than linear search, which has a temporal complexity of O(n), where n is the size of the array.</li> <li>Finally, the binary search technique offers a useful way to locate a particular member in a sorted array. It is easy to build and has an O(log n) time complexity, making it an efficient approach for large datasets.</li> </ul> <h3>Advantages:</h3> <ul> <li>For large datasets, the binary search algorithm is exceptionally efficient, and it is capable of handling a wide range of input sizes.</li> <li>The algorithm is simple to implement in almost all programming languages.</li> </ul> <h3>Disadvantages:</h3> <ul> <li>Before using the binary search technique, the input array must be sorted, which takes more time and memory.</li> <li>The algorithm cannot be applied to unsorted arrays.</li> <li>The algorithm may yield inaccurate results if the input array is not sorted.</li> <li>The binary search algorithm is not appropriate for tiny datasets since the technique's overhead may outweigh its benefits.</li> </ul> <h2>Conclusion:</h2> <p>A sorted array can be quickly searched for a specific element using the binary search technique. It employs a divide-and-conquer strategy to cut the search range in half with each iteration, allowing it to be highly efficient for large datasets. However, before using the binary search technique, the input array must be sorted, which takes extra time and memory. The binary search algorithm is a sophisticated data processing tool that is widely utilised in various sectors.</p> <hr></=>
- La funzione Binary_search accetta quattro argomenti: l'array da cercare, i limiti dell'intervallo di ricerca sinistro e destro e il valore di destinazione da cercare. La funzione restituisce il suo indice se è possibile trovare il valore desiderato; altrimenti restituisce -1.
- La funzione main crea un array arr e un valore target. La funzione Binary_search viene quindi utilizzata per cercare nell'array il valore desiderato. La funzione restituisce l'indice in cui si trovava il valore di destinazione, se lo era, la funzione restituisce l'indice in cui è stato trovato. Altrimenti verrà visualizzato il messaggio 'Target non trovato'.
- L'implementazione dell'algoritmo di ricerca binaria è basilare. Iniziamo impostando il bordo sinistro sull'indice iniziale dell'array e il confine destro sull'ultimo indice dell'array. Una volta che il limite sinistro è inferiore o uguale al bordo destro, l'array viene ripetuto ancora una volta. Usiamo la formula (sinistra + destra) / 2 all'interno del ciclo per calcolare l'indice medio dell'intervallo di ricerca. Questa formula calcola il valore intero del minimo dell'indice medio.
- Il membro centrale dell'array viene messo in contrasto con il valore di destinazione. Restituiamo l'indice dell'elemento centrale se sono uguali. Modifichiamo il limite destro in modo che sia uno in meno dell'indice centrale se il valore desiderato è inferiore all'elemento centrale. In caso contrario, regoliamo il bordo sinistro in modo che sia uno in più rispetto all'indice centrale. Continuiamo a farlo finché non viene ottenuto il valore obiettivo o lo spazio di ricerca viene riempito.
- La complessità temporale dell'algoritmo di ricerca binaria, dove n è la dimensione dell'array, è O(log n). Questo è molto più efficiente della ricerca lineare, che ha una complessità temporale di O(n), dove n è la dimensione dell'array.
- Infine, la tecnica di ricerca binaria offre un modo utile per individuare un particolare membro in un array ordinato. È facile da costruire e ha una complessità temporale O(log n), che lo rende un approccio efficiente per set di dati di grandi dimensioni.
Vantaggi:
- Per set di dati di grandi dimensioni, l'algoritmo di ricerca binaria è eccezionalmente efficiente ed è in grado di gestire un'ampia gamma di dimensioni di input.
- L'algoritmo è semplice da implementare in quasi tutti i linguaggi di programmazione.
Svantaggi:
- Prima di utilizzare la tecnica di ricerca binaria, è necessario ordinare l'array di input, il che richiede più tempo e memoria.
- L'algoritmo non può essere applicato ad array non ordinati.
- L'algoritmo potrebbe produrre risultati imprecisi se l'array di input non è ordinato.
- L'algoritmo di ricerca binaria non è appropriato per set di dati di piccole dimensioni poiché il sovraccarico della tecnica potrebbe superarne i vantaggi.
Conclusione:
È possibile cercare rapidamente un elemento specifico in un array ordinato utilizzando la tecnica di ricerca binaria. Impiega una strategia “dividi et impera” per dimezzare l’intervallo di ricerca con ogni iterazione, consentendogli di essere altamente efficiente per set di dati di grandi dimensioni. Tuttavia, prima di utilizzare la tecnica di ricerca binaria, è necessario ordinare l'array di input, il che richiede tempo e memoria aggiuntivi. L'algoritmo di ricerca binaria è un sofisticato strumento di elaborazione dati ampiamente utilizzato in diversi settori.
=>