Effizienter Algorithmus zum Finden einer Kombination, die einer bekannten Zahl entspricht, in einer Menge von Zahlen

7

Nehmen wir an, es gibt eine Reihe von Zahlen

  

1, 2, 3, 4, 5, 6, 7, 8, 9, 10

Ich möchte mehrere Kombinationen in der Menge der Zahl herausfinden, so dass die Summe derselben einer bekannten Zahl entspricht, zum Beispiel 18. Wir können herausfinden, dass 5, 6, 7 übereinstimmt (5 + 6 + 7 = 18).

Zahlen in einer Kombination können nicht wiederholt werden und die Anzahl in einem Satz darf nicht fortlaufend sein.

Ich habe ein C # -Programm dafür geschrieben. Das Programm ist zufällig, um die Zahl zu einer Kombination aufzunehmen und zu prüfen, ob die Summe der Kombination einer bekannten Zahl entspricht. Die Kombination des gefundenen Programms kann jedoch wiederholt werden und macht den Fortschritt nicht effektiv.

Ich frage mich, ob es einen effizienten Algorithmus gibt, um eine solche Kombination herauszufinden.

Hier ist ein Teil meines Codes.

%Vor%     
Ben 24.05.2012, 13:57
quelle

2 Antworten

19

Sie können Rekursion verwenden. Suchen Sie für jede gegebene Zahl in der Menge die Kombinationen kleinerer Zahlen, die zu der Zahl addiert werden:

%Vor%

Verwendung:

%Vor%

Ausgabe:

%Vor%     
Guffa 24.05.2012, 14:12
quelle
1

Eine mögliche alternative Methode. Mit einem kleinen Set wie diesem könnten Sie rohe Gewalt anwenden. Ihr Set {1, 2, 3, 4, 5, 6, 7, 8, 9, 10} hat 10 Elemente und jedes Element kann vorhanden oder nicht vorhanden sein. Dies kann auf eine Binärzahl zwischen 0 (= 0b0000000000) und 1023 (= 0b1111111111) abgebildet werden. Durchlaufen Sie die Zahlen von 0 bis einschließlich 1023 und überprüfen Sie die Summe für die Teilmenge, die den gesetzten Bits der Binärdarstellung der Zahl entspricht.

Vielleicht nicht das nützlichste für diese spezielle Frage, aber eine gute Möglichkeit, alle möglichen Teilmengen einer gegebenen Menge zu erzeugen.

    
rossum 24.05.2012 15:22
quelle

Tags und Links