Ich möchte N gegebene Zahlen (kann gleich sein oder nicht) in 2 Teilmengen aufteilen, so dass die 2 Teilmengen eine möglichst nahe Summe haben und auch die Kardinalität der Mengen gleich ist (wenn n gerade ist) oder sich nur um 1 unterscheidet ( wenn n ungerade ist).
Ich denke, wir können dies in der Pseudopolynomzeit tun , wobei die Summe der Zahlen in der Menge ist.A.
Kann ich es besser machen? Gibt es nämlich einen Pseudo-Polynom-Zeitalgorithmus, der in der Zeit mit läuft ?c < 2
Danke im Voraus!
ds.algorithms
co.combinatorics
partition-problem
Firebrandt
quelle
quelle
Antworten:
Man kann das Entscheidungsproblem in Zeit lösen .O~(nA)
Lassen Sie die Reihenfolge der Zahlen . Definieren Sie als eine Menge, so dass wenn eine Teilfolge von der Länge , die sich zu summiert . Wenn wir berechnet haben , benötigen wir nur zusätzliche Zeit, um gründlich zu durchlaufen und Ihr Problem zu lösen.F S ( i , j ) ∈ F S.S FS (i,j)∈FS j i F S O ( n A ) F S.S j i FS O(nA) FS
Wenn und zwei sind, die partitionieren , dannS 2 S.S1 S2 S
wobei ist die Minkowski-Summe, und die Addition zwischen Tupeln wird koordinatenweise definiert.A+B={a+b|a∈A,b∈B}
Behauptung: Die Berechnung von aus und dauert .F S 1FS FS1 FS2 O~(|S|A)
Beweis: Wenden Sie die 2D-Faltung auf zwei Tabellen der Größe.A×|S|
Der Algorithmus unterteilt die Sequenz in zwei gleich große Sequenzen, wendet jeweils eine Rekursion an und nimmt die Minkowski-Summe des Ergebnisses. Sei die Laufzeit im ungünstigsten Fall, wenn die Eingabe in den Algorithmus Elemente enthält und eine Obergrenze der Summe ist. Wir haben was .TA(n) n A
Der versteckte Faktor ist .log lognlognA
quelle
Wenn sich jemand um die Faktoren kümmert , können wir durch sorgfältige Analyse nachweisen, dass die zeitliche Komplexität für Chaos Algorithmus .log O(nAlog(nA))
Beweis. In der geraden Schicht des Rekursionsbaums teilen wir die Menge in zwei gleich große Mengen und , was und auf der ungeraden Schicht des Rekursionsbaums teilen wir die Menge in zwei "gleich summierte" Mengen und . Um genau zu sein, können wir eine Menge mit der Summe in zwei Mengen und wobei jede von ihnen eine Summe von ergibt , wobei höchstens ein Element übrig bleibt. Wir können dieses Element mit trivialer dynamischer Programmierung inS S1 S2
quelle