Припустимо, ви отримуєте число (використовуючи біти у двійковому кодуванні).O ( журнал m )
Як швидко ви можете знайти (або визначити, що такого не існує) ?
Наприклад, враховуючи вхід , можна вивести .
Наївний алгоритм проблеми переходив би всі можливі значення і шукав значення яке задовольняє властивість.
Просте спостереження полягає в тому, що немає необхідності перевіряти значення менше або більше . Однак (навіть якщо ми могли перевірити лише можливі значення на значення), це виявляється в неефективному алгоритмі, який є експоненціальним у вхідному розмірі.
Альтернативним підходом було б перейти можливі значення (достатньо перевірити ) і для кожної перевірки можливих значень. Тоді ми можемо використовувати:
Отже, для заданого нам потрібно лише перевірити значень у діапазоні , роблячи це за допомогою двійкового пошуку (коли зафіксовано, монотонно зростає на ), це дає поліноміальний алгоритм, що працює в .
Це все ще здається мені неефективним, і я думаю, що це можна було б вирішити за лінійний час (у розмірі введення).