Załóżmy, że podano różnych liczb całkowitych , takich, że dla pewnej stałej i dla wszystkich .
Interesuje nas znalezienie zliczeń wszystkich możliwych sum . ( jest dozwolone).
Jednym z algorytmów jest skonstruowanie wielomianu stopnia , i obliczenie jego kwadratu za pomocą metody transformacji Fouriera i odczytanie mocy z ich współczynniki w wynikowym wielomianu. Jest to algorytm czasu .
Mam dwa pytania:
Czy istnieje algorytm , który nie korzysta z FFT?
Czy znane są lepsze algorytmy (tj. )? (FFT dozwolone).
algorithms
time-complexity
fourier-transform
Aryabhata
źródło
źródło
Odpowiedzi:
Wydaje się, że ten problem jest równoważny kwadratowi całkowitemu / wielomianowemu:
1. Wiadomo, że mnożenie wielomianowe jest równoważne mnożeniu liczb całkowitych .
2. Oczywiście, zredukowałeś już problem do kwadratu wielomianowego / całkowitego; dlatego ten problem jest co najwyżej tak trudny jak wyprostowanie.
Teraz zredukuję kwadrat całkowity do tego problemu:
Załóżmy, że masz algorytm:
Ten algorytm jest zasadniczo algorytmem, o który prosisz w swoim pytaniu. Tak więc, jeśli mam magiczny algorytm, który może to zrobić, mogę wykonać funkcję która wyrówna liczbę całkowitą y ( o tak, kocham mathjax: P ):SQUARE(y) y
Python ( test przy pomocy codepad ):
3. Zatem kwadratowanie jest co najwyżej tak trudne, jak ten problem.
4. Dlatego kwadratowanie liczb całkowitych jest równoważne temu problemowi. (każda z nich jest co najwyżej tak trudna ze względu na ( 2 , 3 , 1 ))
5. Teraz twój problem nie polega na mnożeniu, lecz na kwadracie. Czy kwadratura jest łatwiejsza? Cóż, jest to otwarty problem (na razie nie) : nie wiadomo, że w kwadracie występuje szybszy algorytm niż mnożenie. Jeśli możesz znaleźć lepszy algorytm dla swojego problemu niż użycie mnożenia; to prawdopodobnie byłby przełom.
źródło