Сложность нахождения биномиального коэффициента, равного числу

19

Предположим, вы получаете число m (используя O(logm) бит в двоичном кодировании).

Как быстро вы можете найти (или определить, что такое не существует) ?

n,kN,1<kn2:(nk)=m

Например, учитывая вход , можно вывести .m=8436285n=27,k=10


Наивный алгоритм для задачи будет проходить по всем возможным значениям для и искать значение которое удовлетворяет свойству.nk

Простое наблюдение состоит в том, что нет необходимости проверять значения меньшие, чем или больше, чем . Однако (даже если бы мы могли проверять только возможных значений на значение ), это приводит к неэффективному алгоритму, который экспоненциально влияет на размер входных данных.nlogmO(m)O(1)kn

Альтернативный подход заключается в том, чтобы просмотреть возможные значения (достаточно проверить ) и при каждой проверке на возможные значений. Затем мы можем использовать: k{2,3,,2logm}n

(nk)k<(nk)<nkk!

Таким образом, для данного нам нужно проверить только значений в диапазоне , Делая это с помощью бинарного поиска (когда фиксировано, монотонно возрастает по ), это дает полиномиальный алгоритм, работающий в .kn[mk!k,mkk]k(nk)nO(log2m)

Это все еще кажется мне неэффективным, и я думаю, что это может быть решено за линейное время (в размере ввода).

RB
источник
4
что ты уже испробовал? Подсказка: предположим, что тоже было дано. Не могли бы вы решить это тогда? Каков диапазон возможных значений для ? Или предположим, что было задано; Вы могли бы решить это в этом случае? Каков диапазон возможных значений для ? nnkk
DW

Ответы:

1

Это не правда, что . Например, .(nk)k<(nk)(92)=36<49=(92)2

Я (пока) не нашел тонкого решения с использованием арифметических свойств биномиальных коэффициентов, однако могу предложить несколько грубых, если это поможет :-)

Для каждого вы можете решить для , взяв начальное предположение (скажем, ) и используя аналитический метод, такой как Ньютон-Рафсон. Вы хотите решить . Производная левой части по имеет вид где - функция дигаммы, которую легко вычислить ,knk!mk(nk)m=0n(ψ(n+1)ψ(nk+1))(nk)ψ

Сложность поиска Ньютона-Рафсона зависит только от сложности вычисления функции и ее производной, а также от количества цифр, необходимых для решения (в нашем случае нам просто нужно ближайшее целое число).

Таким образом, в целом для каждого поиск должен быть (при условии, что, как вы, кажется, и сделали, вычисление биномиального коэффициента занимает постоянное время), следовательно, общая сложность алгоритма, использующего ваши оценки для , будет .kO(1)kO(log(m))

Дэвид Даррлман
источник
2
Хотя я согласен, что границы были отменены (см. Редактирование, спасибо за это), можете ли вы объяснить, почему поиск, учитывая принимает ? kO(1)
РБ