Angenommen, wir haben verschiedene ganze Zahlen , so dass für eine Konstante und für alle .
Wir sind daran interessiert, die Anzahl aller möglichen paarweisen Summen . ( i = j ist erlaubt).
Ein Algorithmus ist das Polynom zu konstruieren , vom Grad ≤ k n und berechnen dessen Quadrat unter Verwendung der Fourier - Transformationsverfahren und die Kräfte mit ihren Koeffizienten in dem resultierenden Polynoms abgelesen. Dies ist ein O ( n log n ) -Zeitalgorithmus.
Ich habe zwei Fragen:
Gibt es einen -Algorithmus, der keine FFT verwendet?
Sind bessere Algorithmen bekannt (dh )? (FFT erlaubt).
algorithms
time-complexity
fourier-transform
Aryabhata
quelle
quelle
Antworten:
Es scheint, dass dieses Problem der Quadratur von Ganzzahlen / Polynomen entspricht:
1. Es ist bekannt, dass die Polynommultiplikation der ganzzahligen Multiplikation entspricht .
2. Offensichtlich haben Sie das Problem bereits auf Polynom / Integer-Quadratur reduziert.Daher ist dieses Problem höchstens so schwer wie das Quadrieren.
Jetzt werde ich die Quadratur von ganzen Zahlen auf dieses Problem reduzieren:
Angenommen, Sie hatten einen Algorithmus:
Dieser Algorithmus ist im Wesentlichen der Algorithmus, den Sie in Ihrer Frage anfordern. Wenn ich also einen magischen Algorithmus hätte, der dies kann, könnte ich eine Funktion erstellen , , die die ganze Zahl y quadriert ( oh ja, ich liebe mathjax: P ):SQUARE(y) y
Python (test with codepad):
3. Thus, squaring is at most as hard as this problem.
4. Therefore, integer squaring is equivalent to this problem. (they are each at most as hard as each-other, due to (2,3,1))
Now it is unknown if integer/polynomial multiplication admits bounds better thanO(nlogn) ; in fact the best multiplication algorithms currently all use FFT and have run-times like O(nlognloglogn) (Schönhage-Strassen algorithm) and O(nlogn2O(log∗n)) (Fürer's algorithm). Arnold Schönhage and Volker Strassen conjectured a lower bound of Ω(nlogn) , and so far this seems to be holding.
This doesn't mean your use of FFT is quicker;O(nlogn) for FFT is the number of operations (I think), not the bit complexity; hence it ignores some factors of smaller multiplications; when used recursively, it would become closer to the FFT multiplication algorithms listed above (see Where is the mistake in this apparently-O(n lg n) multiplication algorithm?).
5. Now, your problem is not exactly multiplication, it is squaring. So is squaring easier? Well, it is an open problem (no for now): squaring is not known to have a faster algorithm than multiplication. If you could find a better algorithm for your problem than using multiplication; then this would likely be a breakthrough.
So as of now, the answer to both your questions is: no, as of now, all the ~O(nlogn) multiplication algorithms use FFT; and as of now squaring is as hard as multiplication. And no, unless a faster algorithm for squaring is found, or multiplication breaks the O(nlogn) barrier, your problem cannot be solved faster than O(nlogn) ; in fact, it cannot currently be solved in O(nlogn) either, as the best multiplication algorithm only approaches that complexity.
quelle