Ecco la voce di Wikipedia
Se guardi al semplice approccio iterativo. Stai eliminando solo la metà degli elementi da cercare finché non trovi l'elemento che ti serve.
Ecco la spiegazione di come ci viene in mente la formula.
Diciamo che inizialmente hai N numero di elementi e poi quello che fai è ⌊ N / 2⌋ come primo tentativo. Dove N è la somma del limite inferiore e del limite superiore. Il primo valore di N sarebbe uguale a (L + H), dove L è il primo indice (0) e H è l'ultimo indice dell'elenco che stai cercando. Se sei fortunato, l'elemento che cerchi di trovare sarà nel mezzo [ad es. Stai cercando 18 nell'elenco {16, 17, 18, 19, 20} quindi calcoli ⌊ (0 + 4) / 2⌋ = 2 dove 0 è il limite inferiore (L - indice del primo elemento dell'array) e 4 è il limite superiore (H - indice dell'ultimo elemento dell'array). Nel caso precedente L = 0 e H = 4. Ora 2 è l'indice dell'elemento 18 che stai cercando. Bingo! L'hai trovato.
Se il caso fosse un array diverso {15,16,17,18,19} ma stavi ancora cercando 18, non saresti fortunato e faresti il primo N / 2 (che è ⌊ (0 + 4) / 2⌋ = 2 e poi rendi conto che l'elemento 17 nell'indice 2 non è il numero che stai cercando. Ora sai che non devi cercare almeno metà dell'array nel tuo prossimo tentativo di ricerca in modo iterativo. lo sforzo di ricerca è dimezzato, quindi in pratica non si cerca metà dell'elenco di elementi cercati in precedenza, ogni volta che si tenta di trovare l'elemento che non è stato possibile trovare nel tentativo precedente.
Quindi il caso peggiore sarebbe
[N] / 2 + [(N / 2)] / 2 + [((N / 2) / 2)] / 2 .....
ovvero:
N / 2 1 + N / 2 2 + N / 2 3 + ..... + N / 2 x … ..
fino a quando ... non hai terminato la ricerca, dove l'elemento che stai cercando di trovare si trova alla fine dell'elenco.
Ciò mostra il caso peggiore quando si raggiunge N / 2 x dove x è tale che 2 x = N
In altri casi N / 2 x dove x è tale che 2 x <N Il valore minimo di x può essere 1, che è il caso migliore.
Ora dal momento matematicamente peggiore è quando il valore di
2 x = N
=> log 2 (2 x ) = log 2 (N)
=> x * log 2 (2) = log 2 (N)
=> x * 1 = log 2 (N)
=> Più formalmente ⌊log 2 (N) + 1⌋