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


12

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

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


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

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

Відповіді:


4

O(nlog⁡nlog∗⁡n)nlog⁡nlog⁡log⁡n

Θ(f(n))Θ(∑k=0lg⁡nf(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.