Das 3SUM- Problem versucht, 3 ganze Zahlen aus einer Menge der Größe zu identifizieren so dass .S n a + b + c = 0
Es wird vermutet, dass es keine bessere Lösung als quadratisch gibt, dh . Oder anders ausgedrückt: .o ( n log ( n ) + n 2 )
Ich habe mich also gefragt, ob dies auf das verallgemeinerte Problem zutrifft: Finde ganze Zahlen für in einer Menge der Größe so dass . i ∈ [ 1 .. k ] S n Σ i ∈ [ 1 .. k ] a i = 0
Ich denke, Sie können dies in für tun (es ist trivial, den einfachen Algorithmus zu verallgemeinern ).
Aber gibt es bessere Algorithmen für andere Werte von ?k ≥ 2 k = 3 k
Antworten:
Für gerade :k S k / 2 S x - x O ( n k / 2 log n ) Berechne eine sortierte Liste aller Summen von Eingabeelementen. Überprüfen Sie, ob sowohl eine Zahl als auch die Negation . Der Algorithmus läuft in der Zeit .S k/2 S x −x O(nk/2logn)
Für ungerades :k S ( k - 1 ) / 2 a S x - a - x x O ( n 2 ) O ( n ( k + 1 ) / 2 ) Berechne die sortierte Liste aller Summen von Eingabeelementen. Überprüfen Sie für jedes Eingabeelement , ob sowohl als auch enthält, und für eine Zahl . (Der zweite Schritt ist im Wesentlichen der -Zeitalgorithmus für 3SUM.) Der Algorithmus wird in der Zeit ausgeführt.S (k−1)/2 a S x −a−x x O(n2) O(n(k+1)/2)
Beide Algorithmen sind für jede Konstante in einer bestimmten schwachen, aber natürlichen Einschränkung des linearen Entscheidungsbaummodells der Berechnung optimal (außer möglicherweise für den logarithmischen Faktor, wenn gerade und größer als ) . Weitere Einzelheiten finden Sie unter:k 2 k
Nir Ailon und Bernard Chazelle. Untere Schranken für lineare Entartungstests . JACM 2005.
Jeff Erickson. Untergrenzen für lineare Erfüllbarkeitsprobleme . CJTCS 1999.
quelle
n Ω ( d )d SUM benötigt die Zeit sei denn, k-SAT kann in Zeit für eine Konstante k gelöst werden . Dies wurde in einem gezeigten Papier von Mihai Patrascu und Ryan Williams (1).nΩ(d) 2o(n)
Mit anderen Worten, unter der Annahme der Exponentialzeithypothese ist Ihr Algorithmus bis zu einem konstanten Faktor im Exponenten (einem Polynomfaktor in ) optimal.n
(1) Mihai Patrascu und Ryan Williams. Zur Möglichkeit schnellerer SAT-Algorithmen. Proc. 21. ACM / SIAM-Symposium zu diskreten Algorithmen (SODA2010)
quelle
Hier sind einige einfache Beobachtungen.
Für können Sie dies in tun, indem Sie das Array nach einer Null durchsuchen. Für können Sie dies tun, ohne in der Zeit haschen. Sortieren Sie das Array und scannen Sie es dann. Für jedes Element tun , um eine binäre Suche nach . Dies führt zu einer Gesamtkomplexität von . Für den Fall können Sie dies in Zeit tun, indem Sie das Array akkumulieren und das Ergebnis überprüfen.Θ ( n ) , k = 2 Θ ( n log n ) i - i Θ ( n log n ) , k = n Θ ( n )k=1 Θ(n) k=2 Θ(nlogn) i −i Θ(nlogn) k=n Θ(n)
Weitere Referenzen finden Sie auf der Seite Open Problems Project für 3SUM .
quelle
Siehe http://arxiv.org/abs/1407.4640
Ein neuer Algorithmus zur Lösung des rSUM-Problems Valerii Sopin
Abstrakt:
Es wird ein bestimmter Algorithmus zur Lösung des rSUM-Problems für ein beliebiges natürliches r mit einer subquadratischen Bewertung der zeitlichen Komplexität in einigen Fällen vorgestellt. In Bezug auf die Menge des verwendeten Speichers weist der erhaltene Algorithmus auch eine subquadratische Ordnung auf. Die Idee des erhaltenen Algorithmus basiert nicht auf der Berücksichtigung von Ganzzahlen, sondern auf kN aufeinanderfolgenden Bits dieser Zahlen im Binärzahlensystem. Es wird gezeigt, dass, wenn eine Summe von ganzen Zahlen gleich Null ist, die Summe von Zahlen, die durch k aufeinanderfolgende Bits dieser Zahlen dargestellt werden, ausreichend "nahe" bei Null sein muss. Dadurch ist es möglich, die Zahlen zu verwerfen, die erst recht keine Lösung begründen.
Es ist etwas Neues in dieser Ausgabe.
quelle