Satz von Paaren finden, die einer Summenliste entsprechen

8

Gegeben zwei Listen von Zahlen und eine Liste von Summen (keine in einer bestimmten Reihenfolge):

%Vor%

Wie finde ich alle Mengen von Paaren d wo d[k] = (a[i], b[j]) so dass c[k] = a[i] + b[j] wo Paare von a und b ohne Ersatz verwendet werden? (Alle Listen können Duplikate haben)

%Vor%

Für c = [7,7,7] :

%Vor%

(1 Antwort, weil alle Permutationen im Wesentlichen äquivalent sind)

Ich möchte das mit Listen der Länge ~ 500 machen, so dass eine naive Suche nach Übereinstimmung / Zurückverfolgung nicht in Frage kommt.

    
georgeyiu 28.02.2013, 09:38
quelle

2 Antworten

1

Okay, da ist der Brute-Force-Ansatz mit dem Beschneiden. Dies benötigt O (N ^ 3)

Zur Erleichterung der Demonstration gehe ich durch ein N-mal-N-Quadrat, das die Summe von a und b

hat %Vor%

Und ich suche c = {6,7,8}
zu bauen Ich finde eine 6 in S . Ich entferne es und markiere seine Zeile und Spalte als nicht verfügbar

%Vor%

Dann versuche ich eine '7'

zu finden %Vor%

Und schließlich die '6'

%Vor%

Die erste Schleife (die für '6') wird fortgesetzt und findet ein weiteres Spiel: (2,4). Dies wird dann die zweite Lösung bilden {(2,4) (1,6) (3,5)}

Nun, eine Möglichkeit, dies zu verbessern, ist eine dynamische Programmierung: Finde alle möglichen Kombinationen heraus, die das Ergebnis vorher ergeben.

%Vor%

Und nun wird derselbe Algorithmus mit gegebenen Heuristiken in O (S_l1 * S_l2 * ... S_lN) laufen, wobei S_li die Länge von S_i bezeichnet.

Dieser kann im Durchschnitt einen Faktor schneller ausführen. Es behandelt auch den c = {7,7,7} Fall richtig.

Das ist so ziemlich alles, was ich habe.

    
aec 28.06.2013 06:02
quelle
0

Hier ist ein Brute-Force-Ansatz in C ++. Es beschneidet nicht äquivalente Permutationen, z. für c = [7,7,7].

%Vor%     
brooksbp 06.03.2013 04:11
quelle

Tags und Links