Я изучаю предстоящие интервью и неоднократно сталкивался с этим вопросом (написано дословно)
Найдите или определите отсутствие числа в отсортированном списке из N чисел, где числа пробегают M, M → N и N, достаточно большие, чтобы охватить несколько дисков. Алгоритм биения O (log n); бонусные точки для алгоритма постоянного времени.
Прежде всего, я не уверен, что это вопрос с реальным решением. Мои коллеги и я размышляли над этой проблемой в течение нескольких недель, и она кажется плохо сформированной (конечно, только потому, что мы не можем думать о решении, это не значит, что ее нет). Несколько вопросов, которые я задал бы интервьюеру:
- Есть ли повторы в отсортированном списке?
- Какая связь с количеством дисков и N?
Один из подходов, который я рассматривал, заключался в двоичном поиске min/max каждого диска, чтобы определить диск, который должен содержать это число, если он существует, а затем двоичный поиск на самом диске. Конечно, это на порядок больше, если число дисков велико, и у вас также есть отсортированный список дисков. Я думаю, что это даст некоторое время O (log log n).
Что касается подсказки M → N, возможно, если вы знаете, сколько чисел находится на диске и какой диапазон, вы можете использовать принцип pigeonhole, чтобы иногда исключать некоторые случаи, но я не могу выясните порядок улучшения.
Кроме того, "бонусные точки для алгоритма с постоянным временем" делают меня несколько подозрительным.
Любые мысли, решения или релевантная история этой проблемы?