La ricerca binaria può essere utilizzata non solo per trovare elementi in un array, ma anche per trovare le radici di equazioni e i valori di funzioni monotone (crescenti o decrescenti).
Diamoci una funzione monotona
f
e qualche valore
C
di questa funzione. Trova il valore dell'argomento
x
di questa funzione, in modo tale che
\(f(x)=C\).
Esempio di funzione monotona crescente:
Scegliamo tali limiti in cui il valore della funzione è esattamente maggiore ed esattamente minore del valore dato. Scegliamo il valore al centro di questo segmento. Se è inferiore a quello dato, spostiamo il bordo sinistro al centro del segmento. Altrimenti, sposteremo il bordo destro. Successivamente, ripetiamo il processo di restringimento dei confini. Ma c'è un problema è quando smettere di cercare. Ulteriori informazioni
qui.
Ad esempio, considera il problema di trovare la radice quadrata del numero x
. La radice quadrata di x
(indicata da \(\sqrt x\)) è un numero y
tale che < span class="math-tex">\(y^2 = x\).
Formuliamo il problema come segue: per un dato numero reale
x
(
\(x >= 1\)) trova il radice quadrata con una precisione non inferiore a 5 caratteri dopo il punto.
Selezione del bordo del segmento per la ricerca
Poiché non possiamo controllare l'intera infinità di numeri, dobbiamo definire i confini della ricerca della radice. Innanzitutto, troviamo il bordo sinistro, selezioniamo un punto negativo arbitrario (ad esempio: -1). Lo raddoppieremo finché il valore in esso contenuto non sarà maggiore del valore dato. Per trovare il confine giusto, scegliamo un punto positivo arbitrario (ad esempio: 1). Lo raddoppieremo finché il valore della funzione a questo punto non sarà inferiore a quello specificato.
Oppure, se conosciamo esattamente i confini della ricerca, possiamo prendere 1 come limite sinistro e il numero stesso
x
.
Successivamente, dividiamo il segmento corrente a metà, quadratiamo il centro e, se è maggiore di x, sostituiamo la faccia superiore, altrimenti inferiore.
Implementazione finale:
dopo l'esecuzione dell'algoritmo.