Załóżmy, że mamy wielomiany stopnia co najwyżej , , tak że całkowita liczba niezerowych współczynników wynosi (tzn. Wielomiany są rzadkie). Interesuje mnie wydajny algorytm obliczania wielomianu:n > m n
Ponieważ ten wielomian ma stopień co najwyżej , zarówno wielkość wejściowa, jak i wyjściowa wynosi . W przypadku możemy obliczyć wynik za pomocą FFT w czasie . Czy można to zrobić dla dowolnego ? Jeśli robi to jakąkolwiek różnicę, interesuje mnie szczególny przypadek, w którym współczynniki wynoszą 0 i 1, a obliczenia powinny być wykonywane na liczbach całkowitych.
Aktualizacja. Uświadomiłem sobie, że szybkie rozwiązanie powyższego oznaczałoby postęp w szybkim mnożeniu macierzy. W szczególności, jeśli to możemy odczytać jako współczynnik w . Zatem obliczenie odpowiada obliczeniu iloczynu zewnętrznego dwóch wektorów, a obliczenie sumy odpowiada obliczeniu iloczynu macierzowego. Jeśli istnieje rozwiązanie wykorzystujące czas do obliczenia wówczas możemy pomnożyć dwie -przez macierzy w czasie , co oznacza, że dla wymagałoby poważnego przełomu. Ale , gdzie jest bieżącym wykładnikiem mnożenia macierzy, może być możliwe. Pomysły, ktoś?
źródło
Odpowiedzi:
Wyrównywanie wielomianu z niezerowymi współczynnikami zajmuje czas przy użyciu zwykłego zwielokrotnienia semestralnego, więc powinno być to lepsze niż FFT dla tych wielomianów, w których . Jeśli , to liczba wielomianów o większej niż wynosi , a to zajmie czas do kwadratu i łączenia (podobnie jak pozostałe wielomiany). Jest to poprawa w stosunku do oczywistego ograniczenia gdy to . O ( x 2 i ) x i < √xi O(x2i) ∑ixi=nxi √xi<nlogn−−−−−√ ∑ixi=n xi O( √nlogn−−−−−√ O(n 3 / 2 (logn) 1 / 2 )O(mnlogn)mΘ( √O(n/logn−−−−−−√) O(n3/2(logn)1/2) O(mnlogn) m Θ(n/logn−−−−−−√)
źródło
Nie pełna odpowiedź, ale może pomocna.
Uwaga: Działa dobrze tylko wtedy, gdy podpory są małe.p2i
W przypadku wielomianu , niech będzie jego wsparciem, abyć wielkością wsparcia. Większość będzie rzadka, tj. Będzie miała niewielkie wsparcie.S q = { i ∣ a i ≠ 0 } s q = | S q | p iq=a0+a1x+⋯+anxn Sq={i∣ai≠0} sq=|Sq| pi
Są algorytmy do namnażania się rzadki wielomiany i quasi liniowe w czasie rozmiaru nośnika produktu , patrz np http://arxiv.org/abs/0901.4323b a ba b ab
Obsługa jest (zawarta w) , gdzie suma dwóch zbiorów i jest zdefiniowana jako . Jeśli podpory wszystkich produktów są małe, powiedzmy, liniowe w sumie , wówczas można po prostu obliczyć produkty i zsumować wszystkie jednomianowe.S a + S b S T S + T : = { s + t ∣ s ∈ S , t ∈ T } nab Sa+Sb S T S+T:={s+t∣s∈S,t∈T} n
Jednak bardzo łatwo jest znaleźć wielomian i tak że rozmiar podparcia jest kwadratowy w rozmiarach podparcia i . W tej konkretnej aplikacji zajmujemy kwadrat wielomianów. Więc pytanie brzmi, jak dużo większe w porównaniu do . Zwykle stosowaną miarą jest liczba podwajająca. Istnieją zestawy z nieograniczoną liczbą podwajania. Ale jeśli możesz wykluczyć zestawy z dużą liczbą podwajającą jako wsparcie dla , możesz uzyskać szybki algorytm dla swojego problemu.a b ab a b S+S S |S+S|/|S| pi
źródło
Chciałem tylko zwrócić uwagę na algorytm naturalnego przybliżenia. Nie wykorzystuje to jednak rzadkości.
Możesz użyć losowej sekwencji(σi)i∈[n]
Biorąc X=∑iσipi(x) możemy obliczyć X2 w nlogn czasie za pomocą FFT. Następnie EX2=∑ipi(x)2=S i VX2−−−−√=O(S) . Możesz więc uzyskaćprzybliżenie1+ε w czasieO(ε−2nlogn) .
źródło