Leser, Nun, ich denke, ich habe gerade ein wenig gehirn gefickt. Ich implementiere Rucksack, und ich dachte darüber nach, ich implementierte Brute-Force-Algorithmus wie 1 oder 2 mal. Also habe ich beschlossen, noch eins zu machen. Und hier ist, was ich in chocked.C++ Teil des Brute-Force-Rucksacks
Lassen Sie uns entscheiden, W ist das maximale Gewicht, und w (min) ist minimal-Gewicht Element können wir in Rucksack wie k=W/w(min)
mal. Ich erkläre das, weil Sie, Leser, besser wissen, warum ich meine Frage stellen muss.
Jetzt. Wenn wir uns vorstellen, dass wir 3 Arten von Dingen haben, die wir in den Rucksack stecken können, und unser Rucksack kann 15 Masseneinheiten speichern, zählen wir jedes Stückgewicht als seine Zahl. Wir können also 15 Dinge vom 1. Typ oder 7 Dinge vom 2. Typ und 1 vom 1. Typ platzieren. aber Kombinationen wie 22222221[7ed]
und 12222222[7ed]
werden für uns dasselbe bedeuten. und sie zu zählen ist eine Verschwendung jeglicher Art von Ressourcen, die wir für die Entscheidung bezahlen. (Es ist ein Witz, weil bf eine Verschwendung ist, wenn wir einen billigeren Algorithmus haben, aber ich bin sehr interessiert)
Wie ich denke, die Art der Auswahlen, die wir durch alle möglichen Kombinationen durchlaufen müssen, heißt "Kombinationen mit Wiederholungen ". Die Nummer C'(n,k)
zählt als (n+k-1)!/(n-1)!k!
. (während ich meine Nachricht eintippte, habe ich gerade ein Loch in meiner Theorie entdeckt. Wir werden wahrscheinlich ein leeres, Null-gewichtet-Null-Preis-Element hinzufügen müssen, um es frei zu halten.)
so , Was ist los.
https://rosettacode.org/wiki/Combinations_with_repetitions
wie dieses Problem ist gut beschrieben hier oben^Ich will nicht wirklich Stapel auf diese Weise verwenden, möchte ich Variationen in einzelnen Zyklus erzeugen, die from i=0 to i<C'(n,k)
geht.
also, wenn ich es schaffen kann, wie es funktioniert?
Maske, Straße - ist ein Array von Indizes, die jeweils von 0 bis n gleich sein können; und müssen erzeugt werden als C '(n, k) (siehe oben) von {0, 1, 2, ..., n} durch k Elemente in jeder Auswahl (Kombination mit Wiederholungen, bei denen die Reihenfolge unwichtig ist)
das ist es. beweise mich falsch oder hilf mir. Vielen Dank im Voraus _
und ja, natürlich Algorithmus wird die Hölle viel Zeit nehmen, aber es sieht aus wie es sollte funktionieren. und ich bin sehr interessant darin.
UPDATE:
was ich vermisse?
http://pastexen.com/code.php?file=EMcn3F9ceC.txt
ich nicht herausfinden können, was Sie –
fragst was ich wissen muss, wie rcomb (n, k) Elemente zu erzeugen, 1 zu einem Zeitpunkt im Zyklus, der von Null bis NumberOfrcomb (n, k) geht. – 0x9093717
wie wenn wir n = 4 haben; (Elemente von 0 bis 3) und k = 3; wie erzeuge ich in einem Zyklus ohne Funktionen, die sich selbst nennen, Kombinationen wie – 0x9093717