Внешний цикл выполняет двоичный поиск, который делит диапазон поиска пополам на каждой итерации.Это будет продолжаться до тех пор, пока диапазон поиска не будет уменьшен до 0.000005
.Поэтому возникает вопрос: «Сколько раз вам нужно разделить на 2, чтобы уменьшить диапазон поиска с d
(который является начальным диапазоном) до 0.000005
? Ответ: log_2(d/0.000005)
.
Внутренний цикл выполняется n
раз. Таким образом, общее время выполнения пропорционально
n * log_2(d/0.000005)
Но это не сложность, потому что big-O игнорирует константы, поэтому база log
игнорируется.И деление игнорируется, потому что
n * log(d/0.000005) = n * (log(d) - log(0.000005))
Таким образом, сложность алгоритма составляет O (n log (d)).