Обчислювальна сума розріджених многочленів у квадраті за час O (n log n)?


18

Припустимо , що ми маємо поліноми p1,...,pm ступеня не більше n , , так що загальна кількість ненульових коефіцієнтів дорівнює (тобто поліноми рідкі). Мене цікавить ефективний алгоритм обчислення полінома:n>mn

∑ipi(x)2

Оскільки цей многочлен має ступінь не більше , розмір вводу та виходу становить . У випадку ми можемо обчислити результат, використовуючи FFT за час . Чи можна це зробити для будь-якого ? Якщо це має якусь різницю, мене цікавить особливий випадок, коли коефіцієнти дорівнюють 0 і 1, а обчислення слід робити через цілі числа.O ( n ) m = 1 O ( n log n ) m < n2nO(n)m=1O(nlog⁡n)m<n

Оновлення. Я зрозумів, що швидке рішення для вищезазначеного означатиме досягнення швидкого множення матриці. Зокрема, якщо ми можемо прочитати як коефіцієнт в . Таким чином, обчислення відповідає обчисленню зовнішнього добутку двох векторів, а обчислення суми відповідає обчислення матричного добутку. Якщо для обчислення є рішення, що використовує час то ми можемо помножити дві -by- матриць на час a i k b k j x i + n j p k ( x ) 2 p k ( x ) 2 ∑ k p k ( x ) 2 f (pk(x)=∑i=1naikxi+∑j=1nbkjxnjaikbkjxi+njpk(x)2pk(x)2∑kpk(x)2f(n,m)∑kpk(x)2nнf(н2,н), що означає, що для потребує значного прориву. Але , де є поточним показником множення матриці, можливо. Ідеї, хтось?f(n,m)=O(nlog⁡n)m≤nf(n,m)=nω/2ω


1
Привіт Расмусе. Думаю, ви мали намір для цього перейти на головний сайт. Це мета-сайт для запитань про сайт.
— Суреш Венкат

Відповіді:


3

Розпрямивши многочлен з ненульовими коефіцієнтами займає багато часу висновок ( х 2 я ) , використовуючи звичайний термін-на-перспективи множення, так що це повинно бути кращим , щоб БПФ для цих поліномів , де х я < √xiO(xi2) . Якщо∑ixi=n, то кількість многочленів зxiперевищує √xi<nlog⁡n∑ixi=nxi -O( √nlog⁡n, і це буде потрібно часO(N 3 / 2 (логп) 1 / 2 )до площі та об'єднати (як буде інші поліноми). Це поліпшення порівняно з очевиднимO(mnlogn),пов'язаним, колиmдорівнюєΘ( √O(n/log⁡n)O(n3/2(log⁡n)1/2)O(mnlog⁡n)м.Θ(н/журнал⁡н)


1
Мене цікавить метод, який обчислює суму, не обчислюючи кожен термін. Робити FFT або розмножувати термін за кожним продуктом буде занадто повільно для застосування, яке я маю на увазі.
— Расмус Паг

2

Не повна відповідь, але може бути корисною.

Caveat: Він добре працює, лише якщо опори невеликі.pi2

Для многочлена , нехай S q = { i ∣ a i ≠ 0 } є його опорою, а s q = | S q | бути розміром опори. Більшість p i буде розрідженою, тобто матиме невелику підтримку.q=a0+a1x+⋯+anxnSq={i∣ai≠0}sq=|Sq|pi

Існують алгоритми множення розріджених многочленів і b у квазілінійний час на величину опори виробу a b , див., Наприклад, http://arxiv.org/abs/0901.4323abab

Підтримка (міститься в) S a + S b , де сума двох множин S і T визначається як S + T : = { s + t ∣ s ∈ S , t ∈ T } . Якщо опори всіх виробів невеликі, скажімо, лінійні в n загалом, то можна просто обчислити продукти і скласти всі мономеї.abSa+SbSTS+T:={s+t∣s∈S,t∈T}n

Однак дуже просто знайти поліноми і b такі, що розмір опори a b є квадратичним за розмірами опори a і b . У цій конкретній програмі ми проводимо квадрати многочленів. Таким чином, питання в тому , наскільки більше S + S по порівнянні з S . Звичайною мірою для цього є подвоєне число | S + S | / | S | . Є набори з необмеженим подвоєним номером. Але якщо ви можете виключити набори з великим подвоєним числом як опори p iabababS+SS|S+S|/|S|pi, тоді ви можете отримати швидкий алгоритм для вашої проблеми.


1
Хоча я не знайомий з адитивною комбінаторикою, я вважаю, що узагальнені арифметичні прогресії та теорема Фреймана-Рузси - це множини з малим подвоєнням.
— Цуйосі Іто

@Tsuyoshi: Ти маєш рацію, я відредагую свою відповідь. Тим не менш, є GAP з великою постійною подвоєнням.
— 5501,

Особисто я не вважаю, що такий підхід є перспективним. (Досить неточним) наслідком теореми Фреймана-Рузси є те, що | S + S | / | S | невеликий лише в окремих випадках, і тому частина "Якщо ви можете виключити набори з більшим подвоєним числом як опори p_i", дуже велика, якщо . Однак, як я вже говорив, я не знайомий з комбінаторною добавкою, і ви повинні сприймати мої слова на ній із зерном солі.
— Цуйосі Іто

Звичайно, це працює лише в тому випадку, якщо програма на увазі (яку я не знаю) дає приємні підтримки.
— 5501

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

2

Просто хотів відзначити алгоритм природного наближення. Це, однак, не використовує переваги вкрай.

Ви можете використовувати випадкову послідовність (σi)i∈[n] , приймаючи X=∑iσipi(x) ми можемо обчислити X2 в nlog⁡n раз , використовуючи швидке перетворення Фур'є. Тоді EX2=∑ipi(x)2=S і VX2=O(S). Таким чином, ви можете отриматинаближення1+εу часіO(ε−2nlog⁡n).


Гарний підхід! Але вам не потрібно більше повторень, щоб з великою часткою ймовірності виправити всі коефіцієнти?
— Расмус Паг

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