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