Mein Problem kann wie folgt vereinfacht werden.alle Kombinationen finden, die die Bedingung erfüllt?
Es gibt s
Bins, und innerhalb jedes Bins gibt es k
Zahlen.
Eine Kombination besteht aus einer Nummer aus jedem Fach, insgesamt also k^s
mögliche Kombinationen.
Die Punktzahl einer Kombination ist die Summe von s
Zahlen, die es enthält.
Wie kann ich alle Kombinationen mit einem Wert unter einem Wert von r
finden?
Gerade jetzt, was ich tue ist,
1) in jedem Fach die Zahlen sortieren.
2) Beginnen Sie mit einer Prioritätswarteschlange, die nur die Kombination der kleinsten Zahl aus jedem Fach enthält.
3) rufen Sie eine Kombination aus der Warteschlange auf, fügen Sie s
untergeordnete Elemente dieser Kombination hinzu, um sie in die Warteschlange aufzunehmen. (Ein Kind einer Kombination besteht aus dem Ersetzen einer Nummer der Kombination durch die nächst größere Zahl in demselben Fach, also s
Kinder einer Kombination.)
4) Wiederholen Sie 3) bis die Kombination größer als ist r
. Wenn wir n
Kombinationen kleiner als r
finden, ist die zeitliche Komplexität dieses Algorithmus dann O(nlog(s-1)n + sklogk)
.
Natürlich ist dieser Algorithmus nicht optimal. Anstatt beispielsweise mit der kleinsten Kombination zu beginnen, können wir mit einer bekannten unteren Grenze beginnen. Und ich habe das Gefühl, dass dynamische Programmierung auch hier angewendet werden kann, aber ich habe nicht herausgefunden, wie es geht.
Alle Vorschläge sind willkommen, danke.