Я могу представить себе только два случая: когда 2^k приближается к n (скажем, если 2^k == n), то требуется количество шагов n/n или 1, поэтому он имеет время выполнения O (1).Время выполнения функции для поиска (n/2^k) -го элемента списка размера n?
Однако, если 2^k мало (скажем, если 2^k == 1), то требуются n шагов, поэтому он имеет время выполнения O (n).
По существу, если 2^k может быть записано в терминах n, то требуемое количество шагов является целым числом, поэтому оно имеет время выполнения O (1). Если 2^k не может быть записано в терминах n, оно имеет время выполнения O (n).
Оба эти случая являются наихудшими; для любого неизвестного и, возможно, большого n эти временные интервалы все еще сохраняются. Существует ли ситуация, в которой 2^k не может быть квалифицирована как намного меньше, чем n или близко к n?
Представьте, что вы должны были написать (возможно, очень длинную) таблицу, содержащую времена выполнения функции для значений k таких, что (n/2^k)> = 1. Когда k начинается с 0 и увеличивается, run-times - O (1), но поскольку k начинается с большого значения и уменьшается, время выполнения O (n). Существует ли теоретическая точка, в которой время выполнения переключается с O (1) на O (n)?
Или я просто не понимаю «основную идею» анализа Big-O?
EDIT: Линейный поиск предполагается
Вы используете бинарный поиск? –
@TobiAlafin Предполагается линейный поиск (я только что сделал редактирование) – jelvin
Хорошо. Теперь это имеет смысл для меня. –