Input: SORTED array, target
Output: element_index or -1 if is not present in array
Complexity:
Avg: $O(\log{\log{n}})$
Worst: $O(n)$
Algorithm:
Идея заключается в том, что на основании максимального (самого правого) и минимального (самого левого) элементов мы делаем предположение о том, где находится target. Тут мы надеемся на то, что элементы расположены с примерно одним шагом.
В алгоритме ниже, скорее всего, проблема в формуле расчета позиции (guess), это надо будет ещё поправить.
<aside> ⚙️ left = 0; right = n-1;
$guess = arithmeticRounding(left + \frac{target - a_{left}}{a_{right} - a_{left}} * (a_{right} - a_{left}))$
$a_{guess}$ == target → print(guess); exit();
$a_{guess}$ < target → {
left = guess;
$guess = arithmeticRounding(left + \frac{target - a_{left}}{a_{right} - a_{left}} * (a_{right} - a_{left}))$
$a_{guess}$ == target → print(guess); exit();
$a_{guess}$ < target → {
left = guess;
…
};
};
$a_{guess}$ > target → {
right = guess;
$guess = arithmeticRounding(left + \frac{target - a_{left}}{a_{right} - a_{left}} * (a_{right} - a_{left}))$
$a_{guess}$ == target → print(guess); exit();
$a_{guess}$ < target → {
left = guess;
…
};
};
</aside>