Множення цілого числа, коли фіксується одне ціле число


35

Нехай - фіксоване додатне ціле число розміру біт.нAn

Дозволяється попередньо обробити це ціле число за необхідності.

Враховуючи ще одне додатне ціле число розміром біт, яка складність множення ?м А ВBmAB

Зверніть увагу, у нас уже є алгоритми. Питання тут полягає в тому, чи можемо ми взяти \ epsilon = 0 чим-небудь розумнішим? ϵ = 0(max(n,m))1+ϵϵ=0


6
З огляду на A , просто побудуйте таблицю пошуку з 2n записів. (Очевидно, це не те, чого ви хотіли, але я думаю, ви повинні зробити свої вимоги більш конкретними ...)
Jukka Suomela

9
Я думаю, що питання має ідеальний сенс у стандартній булевій моделі схеми.
Ноам

4
Чи можете ви підсумувати очевидні верхні та нижні межі та найкращі результати, які вам відомі? Це показує, що ви дбаєте про проблему і що ви думали над нею, і це дає всім більше стимулів подумати над вашою проблемою.
Робін Котарі

4
Я думаю, що запитувач неявно означає, що попередньо оброблена частина повинна займати лише nO(1) простір. (Матриця-векторний мульти має таку властивість.)
Райан Вільямс,

Я хотів би знати саме те, що ти хотів би; Я відчуваю, що можу пройти через нескінченні випадки. Це моя перша відповідь, тому я особливо радий спробувати дати вам якомога більше інформації. Якщо ви хочете, ви можете надіслати мені електронну пошту на mgroff100@hotmail.com, і я буду радий співпрацювати з вами набагато більше.
Метт Грофф

Відповіді:


20

Хоча це не завжди буде найефективнішим алгоритмом, це питання має дуже тісний взаємозв'язок з ланцюгами додавання; будь-який алгоритм для обчислення швидко адитивних ланцюжків переводить в алгоритм для обчислення шляхом багаторазового складання (кожен додаток, звичайно, будучи операції). Навпаки, швидкий алгоритм обчислення для будь-якого призводить до швидкого алгоритму обчислення , але, звичайно, цей алгоритм не обов'язково повинен мати форму ланцюга додавання; все-таки, це здається чудовим місцем для початку. Погляньте на сторінку http://en.wikipedia.org/wiki/Addition_chain або ознайомтесь з об. 2 офf ( B ) = A B O ( n ) A B B AAf(B)=ABO(n)ABBAДокладніші відомості про мистецтво комп'ютерного програмування .


17

Щоб розширити ідею Стівена Стадницького, ми можемо швидко побудувати наївний алгоритм, який краще, ніж матричне множення, використовуючи дискретні перетворення Фур'є.

Ми розраховуємо кількість одиниць в . Якщо менше половини бітів є одиницями, ми будуємо пов'язаний список їх позицій. Щоб помножити, ми просто зміщуємо ліворуч на кожну позицію у списку (множимо на той біт, який представлений) і додаємо результати.БAB

Якщо більше половини бітів є одиницями, ми робимо те саме, що вище, але замість нулів використовуємо для заповнення списку позицій. Ідея полягає в тому, що ми віднімемо цю суму від суми, яка була б отримана шляхом множення на всі. Щоб отримати суму всіх одиниць, зсуваємо на кількість бітів в і віднімаємо від цьогоТоді ми можемо відняти отриману суму із пов'язаного списку.А БBAB

Це можна назвати алгоритмом наївного зв'язаного списку. Час його роботи становить в гіршому випадку, але в середньому випадку, що швидше, ніж DFT для малих.O ( | B | O(n2)| А|O(|B||A|2π)|A|

Щоб оптимально використовувати ідею списків, ми використовуємо ділити і перемагай. Ми розділимо навпіл і знайдемо розміри пов'язаних списків за допомогою наївного алгоритму. Якщо їх більше 5, ми знову викликаємо алгоритм наївності на половини, більші за 5, поки нам не вдасться розрізати всі половинки на менше п'яти. (Це тому, що ми можемо зменшити це до 4 віднімань)A

Ще краще, ми вдосконалюємо наш алгоритм розділення і перемоги. Ми повторюємо всі можливі комбінації розгалуження, жадібно підбираючи найкраще. Ця попередня обробка займає приблизно стільки ж часу, скільки і фактичне множення.

Якщо нам дозволяється нескінченна свобода з попередньою обробкою, ми оптимально вирішуємо оптимізований алгоритм ділення і перемоги для всіх гілок. Це вимагає часу в гіршому випадку, але це повинно бути оптимальним методами ланцюгового додавання.O(2|A|)

Я працюю над обчисленням більш точних значень для вищезазначених алгоритмів.


Привіт Метт: Що таке та | Б | ? |A||B|
Т ....

є розмір А ,основному, кількість елементів в A . Це еквівалентно вашому n , тобто | А | п . Те саме для | Б | . Тимменше, ця формула залишаєтьсясиліколи п різна дляі B . |A|AAn|A|n|B|nAB
Метт Грофф

17

Папір, що називається Множення на постійну, є підлінійною ( PDF ), дає алгоритм для операції зсуву / додавання, деn- розмір константи.O(nlogn)n

По суті, він працює, шукаючи біт у постійній, зміщуючи та додаючи число, яке потрібно помножити лише для тих 1 біт на константу (як довге множення для двійкового, де 0- біт у нижньому числі, який потрібно помножити, означає верхня частина не зміщується і не додається, тоді як 1 біт означає, що верхня частина зміщується і додається). Однак це все-таки O ( n ) , оскільки в константі можуть бути O ( n ) 1 -біти.1101O(n)O(n) 1

Далі у статті йдеться про зміну представлення чисел постійної в системі подвійних базових чисел, де, мабуть, не- -біти є меншими, якщо перетворення виконано правильно (це дуже надмірна система числення). Вони підраховують, наскільки це рідко; кількість ненульових бітів обмежено менше, ніж O ( n ) , тому потрібна підлінійна кількість доповнень. Однак це все ще O ( n m0O(n)фактичні операції, обумовленіO(m)вартістю кожного додавання (деn- розмір постійної, аm- розмір іншого числа).O(nmlogn)O(m)nm

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


@JAS - це моя спеціальність: D.
Realz Slaw

3
Це з'явилося в ARITH 2007 як dx.doi.org/10.1109/ARITH.2007.24 (для повноти).
Андрас Саламон

10

Як запропонував Метт Грофф, вам може бути цікаво вивчити практичне співтовариство для натхнення (або якщо у вашій ситуації знаходиться в межах бітової ширини поточного процесора). Дійсно, проблема множення чисел на константу була розглянута багатьма авторами-компіляторами та конструкторами схем, хоча вони, як правило, зацікавлені у "множник-менший множник" (множити за допомогою зсуву, додавання та віднімання). Одне з ранніх посилань, про які я знаю, - це я дізнався з розділу 8.4.n

Бернштейн, Р. (1986), Множення на цілі константи. Програмне забезпечення: Практика та досвід, 16: 641–652. doi: 10.1002 / spe.4380160704

Більш сучасну роботу Вінсента Лефевра можна знайти тут (не забудьте побачити подальші роботи до нього), а також він зазначив проект КМУ щодо ефективного синтезу ланцюга (див. Посилання там). Останній проект навіть розглядає одночасне множення на набір констант.

PS Я рекомендую вам розглянути можливість зміни свого імені користувача на щось впізнаване.


9

Я не впевнений, чи це безпосередньо стосується питання, але наступний елементарний результат може зацікавити. З урахуванням фіксованого натурального числа , операція n k n може бути реалізована послідовним автоматом, за умови, що n записується у зворотному двійковому позначенні (тобто, Найменше значущий біт спочатку). Кількість станів автомата дорівнює k / 2 r, де 2 r - найбільша потужність 2 ділення k . Наприклад, операція n 6 n реалізується наступним автоматом. knknnk/2r2r2kn6nenter image description here

Наприклад, і 6 × 185 = 1110 = 2 + 4 + 16 + 64 + 1024 . Таким чином, у зворотному двійковому форматі 185 записується як 10011101, а 1110 (поганий вибір, я знаю ...) як 01101010001 . Обробка запису 10011101 на цьому автоматі дає шлях 0 0 11 1185=1+8+16+32+1286×185=1110=2+4+16+64+10241851001110111100110101000110011101 що дає правильний вихід01101010001. Тип послідовного автомата, який я тут використовую, Schützenbergerназвавпослідовним: як ви бачите, єпочатковий префікс(зеленим кольором) іфункція кінцевого виходу

0011101000011110211200110201
01101010001(також зеленим кольором). Детальніше про те, як цю послідовну машину можна обчислити систематично, дивіться за цим посиланням .

Не могли б ви детальніше розказати свій коментар?
Ж.-Є.

є простим > 2 . k>2
Т ....

Побудова послідовного автомата, що реалізує операцію може бути виконана для будь-якого k . Однак обчислення цього автомата може бути простішим для k прости. nknkk
Ж.-Є.

- експоненціальна. k2r
Т ....

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