8644
Goto Top

Ansatz für Funktion gesucht - Ermittlung von Werten

Kleine Nuss, mit der ich mich schon eine Weile herum schlage face-wink

Hallo Forum!

Folgende Problematik:
Gegeben ist eine Liste mit Werten (Preisen), eine Anzahl und ein Gesamtwert.
Bsp.

Die Liste : 25,28,30 ... 3500 (ca. 170 Werte, jeweils mit einem Index versehen)
Anzahl = 456
Gesamtwert = 50678

Das Ergebnis könnte in etwa so aussehen:

20 * 30 = 600
100 * 25 = 2500
usw.
Am Ende müssen die Summen für Anzahl und Gesamtwert mit den gegebenen Werten übereinstimmen.

Wie würdet ihr an die Sache gehen? Bei mir muss es Delphi sein, aber ein Ansatz in einer anderen Sprache würde mir schon weiter helfen.

Danke

Psycho

Content-Key: 56368

Url: https://administrator.de/contentid/56368

Printed on: April 19, 2024 at 05:04 o'clock

Member: filippg
filippg Apr 11, 2007 at 14:34:23 (UTC)
Goto Top
Hallo,

also irgendwie hast du deine Frage nicht so wirklich prickelnd formuliert. Sehe ich das so richtig: Du hast Artikel und dazugehörige Preise. Dann hast du einen Warenkorb, von dem du nicht weisst, was drinne ist, sondern nur wie viele Artikel das insgesamt sind, und wie viel der ganze Korb wert ist.

Dann ist das eine Erweiterung des klassischen Rucksackproblems und als solches wohl NP-Vollständig. Mit anderen Worten: da hilft nicht viel ausser Ausprobieren, gegebenenfalls noch mit einer Heuristik als Unterstützung. Zum Rucksackproblem findet sich einiges im Internet.

Filipp
Mitglied: 8644
8644 Apr 13, 2007 at 09:09:26 (UTC)
Goto Top
Hallo Filipp,

sorry, dass ich mich ungeschickt ausgedrückt habe! Da du aber mein Problem richtig interpretiert hast, kann es ja so schlimm nicht gewesen sein face-wink!
Du triffst den Nagel auf den Kopf! Hab mich auch schon im Internet umgesehen, dort gibt es zwar viele Erklärungen (schön, dass ich jetzt weiss, dass mein Problem auch einen Namen hat!), aber eine richtige Lösung ist wohl wirklich nur durch etliche Versuche zu bekommen.
Ich werde mich am WE mal intensiver damit befassen und wenn mir was gelingt, melde ich mich wieder!

Psycho
Mitglied: 8644
8644 Apr 26, 2007 at 14:59:23 (UTC)
Goto Top
So, es war dann doch zu warm zum Grübeln!
Ich habe mir eine Prozedur gebastelt, die für mein Problem geeignet ist.
Da das Ganze aber zu speziell ist, klemme ich es mir, den Code hier zu posten.

Also gelöst!

Psycho
Member: filippg
filippg Apr 26, 2007 at 15:19:46 (UTC)
Goto Top
Hallo,

aber ich vermute mal, die Prozedur tut auch nichts anderes als (evtl. geschicktes) Ausprobieren?

Filipp
Mitglied: 8644
8644 Apr 26, 2007 at 16:21:52 (UTC)
Goto Top
Hi Filipp

aber ich vermute mal, die Prozedur tut auch
nichts anderes als (evtl. geschicktes)
Ausprobieren?

Im Prinzip schon, ich nenne es jetzt aber mal "Annähern" face-wink

Ich mache einige Schleifendurchläufe, in denen ich zuererst eine Division - Rest der Summe durch Rest der Anzahl - durchführe. Dann durchlaufe ich die Liste rückwärts, bis ich den Wert finde, der vorhanden ist und kleiner als das Ergebnis der Division. Jetzt multipliziere ich bei Anzahl = 1 (und dann natürlich das Inkrement) angefangen solange mit dem gefundenen Wert bis entweder eine Ganzzahldivision durch einen vorhandenen Wert möglich ist oder ein nächst höherer Wert gefunden wurde!

Bis jetzt ging es immer auf!

Ich glaube zwar nicht, dass das jetzt jemand verstanden hat, aber irgend was ist ja immer face-wink

Falls Interesse besteht, maile ich dir die Prozedur mal.

Psycho