Який найефективніший алгоритм розділення?


12

Який найефективніший (за часовою складністю) алгоритм, відомий сьогодні для вирішення проблеми поділення: якщо два цілих числа, скажімо, і b , чи має ділення b ? Нехай буде зрозуміло, що те, що я прошу, не є (обов'язково) алгоритмом для обчислення залишків. Я просто хочу знати, з ділить Ь чи ні. Більш конкретно, моє питання полягає в тому, чи існує чи ні останній алгоритм поділу з часовою складністю кращий, ніж O ( m log m log log m ) , де m - кількість бітів max { aabababO(mlogmloglogm)m . Далі, чи є Ω ( m log m log log m ) нижньою межею цієї проблеми?max{a,b}Ω(mlogmloglogm)

Дякую і з повагою, і вибачте, якщо це таке наївне питання.


AFAIK невідомі нижчі межі відомі. Я вважаю, що, як відомо, множення і ділення мають по суті однакову складність (хоча це, можливо, відповідає коефіцієнту журналу журналу?) Методом Ньютона, і оскільки не існує відомої нелінійної нижньої межі множення, я думаю, будь-яка нижня межа форми Ви констатуєте, що це буде головним результатом.
Стівен Стадницький

(Насправді, дивлячись на це зараз, я думаю, що коефіцієнт журналу журналу відходить, тому що, коли ви робите непостійне число множень, вони не однакової довжини, тому надлінійні фактори можуть бути поглинені так само, як, наприклад, все ще лінійно вn,хоча в ньому є незмінна кількість "лінійних" факторів.)k=1lgnn2kn
Steven Stadnicki

Відповіді:


4

O(nlognlogn)nlognloglogn

Θ(f(n))Θ(k=0lgnf(n2k))Θ(f(n))


2
Нітпік: Я не бачу, як ви отримуєте нижню межу від такого роду міркувань, навіть якщо ми припускаємо, що немає кращих алгоритмів множення, ніж найкращі з відомих на даний момент. Ваші скорочення означають, що подільність не є більш важкою, ніж множення. Але все ще існує можливість, що подільність може бути простішою за поділ і легшою, ніж множення, оскільки подільність вимагає відповіді «так / ні» замість числа. (Принаймні, зменшення, яке ви згадуєте, не виключає цього.)
DW

2
@DW Погодився, і це прекрасний момент; але я не намагався отримати нижню межу. Скоріше, справа в тому, що будь-яка нижня межа подільності передбачає відповідну нижню межу множення, і оскільки жодні такі межі не відомі за межі тривіальної лінійної межі, то отримуючи будь-яку кращу, ніж лінійну нижню межу поділу (що є частиною того, що ОП просили) малоймовірно.
Стівен Стадницький

@DW Я не був би в шоці, дізнавшись про лінійну верхню межу поділу, і, як ви кажете, це не означало б конкретно нічого про верхні межі щодо множення, але конкретних результатів у цьому напрямку AFAIK не існує.
Стівен Стадницький

-2

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

Але загалом кажучи, швидше за все алгоритм поділу є нормою.

Найкращий, про який я знаю, не дивлячись - це алгоритм D із семиметрічних методів Кнута ... Хоча ніколи не перевіряв його правильність. Він працює в більш-менш O (mn-n ^ 2), де m і n - дивіденд і дільник ... без множинної множинної складності ...

Однак нижня межа може бути надзвичайно низькою, оскільки ваше питання стосується лише проблеми рішення.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.