Ось запис у Вікіпедії
Якщо дивитися на простий ітеративний підхід. Ви просто усуваєте половину елементів, які потрібно шукати, поки не знайдете потрібний елемент.
Ось пояснення того, як ми придумали формулу.
Скажіть, що спочатку у вас є N кількість елементів, а тоді, що ви робите, це ⌊N / 2⌋ як перша спроба. Де N - сума нижньої межі та верхньої межі. Перше часове значення N було б рівним (L + H), де L - перший індекс (0), а H - останній індекс списку, який ви шукаєте. Якщо вам пощастить, елемент, який ви намагаєтесь знайти, буде посередині [напр. Ви шукаєте 18 у списку {16, 17, 18, 19, 20}, тоді ви обчислюєте ⌊ (0 + 4) / 2⌋ = 2, де 0 нижня межа (L - індекс першого елемента масиву) і 4 - вища межа (H - індекс останнього елемента масиву). У наведеному вище випадку L = 0 і H = 4. Тепер 2 - це індекс елемента 18, який ви шукаєте. Бінго! Ви його знайшли.
Якби справа була іншим масивом {15,16,17,18,19}, але ви все ще шукали 18, то вам не пощастило б, і ви зробили б перший N / 2 (що становить ⌊ (0 + 4) / 2⌋ = 2, а потім реалізувати елемент 17 в індексі 2. - це не число, яке ви шукаєте. Тепер ви знаєте, що вам не потрібно шукати принаймні половину масиву при наступній спробі пошуку ітераційним способом. зусилля пошуку вдвічі зменшуються, тому в основному ви не шукаєте половини списку елементів, які ви шукали раніше, кожного разу, намагаючись знайти той елемент, який ви не змогли знайти в попередній спробі.
Тож найгірший випадок був би
[N] / 2 + [(N / 2)] / 2 + [((N / 2) / 2)] / 2 .....
тобто:
N / 2 1 + N / 2 2 + N / 2 3 + ..... + N / 2 x … ..
поки… ви не закінчили пошук, де в елементі, який ви намагаєтеся знайти, знаходиться в кінці списку.
Це показує найгірший випадок, коли ви досягаєте N / 2 x, де x таке, що 2 x = N
В інших випадках N / 2 x, де x таке, що 2 x <N Мінімальне значення x може бути 1, що є найкращим випадком.
Тепер, оскільки математично найгірший випадок - це значення
2 x = N
=> log 2 (2 x ) = log 2 (N)
=> x * log 2 (2) = log 2 (N)
=> x * 1 = log 2 (N)
=> Більш офіційно ⌊log 2 (N) + 1⌋