Ich habe Artikel mit ID 1, 3, 4, 5, 6, 7
. Jetzt habe ich Daten wie folgt. Für jede Zeile gibt es eine offerId. Array of Ids
bestehen aus der Kombination der ID
in einem Array. Discount
ist der Wert für die offerId
Algorithmus, um die beste Kombination zu erhalten
offerId : Array of Ids : Discount
o1 : [1] : 45
o2 : [1 3 4] : 100
o3 : [3 5] : 55
o4 : [5] : 40
o5 : [6] : 30
o6 : [6 7] : 20
Jetzt muss ich alle offerIds auszuwählen, die mir geben beste Kombination von Ids das heißt maximale Gesamt Rabatt.
Zum Beispiel in obigem Fall: mögliche Ergebnisse können sein:
[o2, o4, o5] maximaler Rabatt ist 170(100 + 40 + 30)
.
Hinweis. Das Ergebnis offerId sollte so aussehen, dass IDs nicht wiederholt werden. Beispiel für o2,o4,o6
ids sind [1,3,4], [5], [6] alle sind verschieden.
Andere Kombination können sein: o1, o3, 06
für die IDs sind [1], [3,5], [6,7] Jedoch ist die Gesamt 120 (45 + 55 + 20), die weniger als 170
ist wie in den vorangegangenen Fall.
Ich brauche einen Algorithmus/Code, der mir combination of offerIds
zu identifizieren helfen, die maximum discount
geben wird, wenn man bedenkt, dass jedes Angebot unterschiedliche Ids
enthalten soll.
HINWEIS Ich schreibe meinen Code in go
Sprache. Aber Lösungen/Logik in jeder Sprache werden hilfreich sein.
HINWEIS: Ich hoffe, dass ich meine Anforderung richtig erklären kann. Bitte kommentieren Sie, wenn zusätzliche Informationen benötigt werden. Vielen Dank.
Ich bin mir nicht sicher, ob dies der richtige Ort ist, um diese Frage zu stellen. Bitte nicht ablehnen. – Jagrati
Das sieht nicht einfacher als [genaues Cover-Problem] (https://en.wikipedia.org/wiki/Exact_cover) aber mit Gewichten, so würde ich sagen, dass eine polynomiale Lösung unwahrscheinlich ist. – Gassa
In diesem Problem, wenn es nur wenige IDs (sagen wir, höchstens 20), würde ich mit einer dynamischen Programmierlösung gehen: f ('s': Teilmenge der IDs) = maximal möglichen Rabatt für jede Menge von Angeboten genau geben Teilmenge "s". – Gassa