Какой самый эффективный алгоритм делимости?

12

abababO(mlogmloglogm)mmax{a,b}Ω(mlogmloglogm) нижняя граница этой проблемы?

Спасибо и всего наилучшего, и извините, если это такой наивный вопрос.

Леандро Затеско
источник
AFAIK нет никаких нетривиальных нижних границ, известных. Я полагаю, что умножение и деление, как известно, имеют, по существу, одинаковую сложность (хотя, возможно, это зависит от коэффициента логарифмирования?) С помощью метода Ньютона, и поскольку нет известной нелинейной нижней границы умножения, я думаю, что любая нижняя граница формы Вы заявляете, что это будет основным результатом.
Стивен Стадницки
(На самом деле, глядя на это сейчас, я думаю, что логарифмический коэффициент исчезает, потому что, хотя вы выполняете непостоянное число умножений, они не все имеют одинаковую длину, поэтому суперлинейные факторы могут быть поглощены так же, как, например, по-прежнему линейен по хотя и имеет непостоянное число «линейных» факторов.)k=1lgnn2kn
Стивен Stadnicki

Ответы:

4

Изложите мои комментарии в ответ: поскольку делимость (тривиально) сводима к делению, а поскольку деление (нетривиально) сводимо к умножению с помощью подходов, подобных методу Ньютона, тогда ваша задача должна иметь такую ​​же временную сложность, что и целочисленное умножение. AFAIK, нет известных нижних границ умножения лучше, чем тривиальный линейный, поэтому то же самое должно быть справедливо для вашей задачи - и, в частности, поскольку известно, что умножение имеет (по существу) алгоритмы, ваши надежды на нижнюю границу почти наверняка напрасны.O(nlognlogn)nlognloglogn

Причина, по которой деление сводится именно к сложности умножения, насколько я понимаю, заключается в том, что метод Ньютона будет выполнять последовательность умножений разных возрастающих размеров; это означает, что если есть алгоритм умножения со сложностью то сложность алгоритма деления, использующего этот алгоритм умножения в качестве промежуточного шага, будет такой же, как у - и для всех обсуждаемых классов сложности это просто .Θ(f(n))Θ(k=0lgnf(n2k))Θ(f(n))

Стивен Стадницки
источник
2
Nitpick: Я не вижу, как вы получаете нижнюю границу от такого рода рассуждений, даже если мы предполагаем, что нет лучших алгоритмов для умножения, чем лучшие из известных в настоящее время. Ваши сокращения подразумевают, что делимость не сложнее, чем умножение. Но все же существует вероятность того, что делимость может быть проще, чем деление, и проще, чем умножение, поскольку делимость требует только ответа «да / нет» вместо числа. (По крайней мере, упомянутое вами сокращение не исключает этого).
DW
2
@DW Согласен, и это отличный момент; но я не пытался получить нижнюю границу. Скорее, дело в том, что любая нижняя граница делимости подразумевает соответствующую нижнюю границу умножения, и, поскольку такие границы не известны за пределами тривиальной линейной границы, тогда получается любая лучшая нижняя граница делимости (которая является частью того, что ОП попросила) вряд ли.
Стивен Стадницки,
@DW Я не был бы полностью шокирован, узнав о линейной верхней границе делимости, и, как вы говорите, это конкретно не подразумевало бы ничего о верхних границах умножения, но конкретных результатов в этом направлении AFAIK нет.
Стивен Стадницки,
-2

Я думаю, что для некоторых чисел, оканчивающихся на 3,7 и т. Д., Есть хиты Ведического типа или базовые 2 ^ n делителей ...

Но, вообще говоря, самый быстрый алгоритм деления кажется нормой.

Лучший из известных мне, не обращая внимания, - это Алгоритм D Получисленных методов Кнута, хотя никогда не проверял его правильность. Он работает в более или менее O (mn-n ^ 2), где m и n - дивиденды и делители ... без учета сложности умножения ...

Однако нижняя граница может быть на удивление низкой, поскольку ваш вопрос касается только решения проблемы.

Фил
источник