![]() |
AW: Permutation (mögliche Kombinationen)
So richtig kann ich damit leider nichts anfangen.
Was ich suche ist eigentlich ein Generator der mir bei einer Vorgabe von n möglichen Eingangswerten alle möglichen Kombinationen dieser n Eingangswerte wiedergibt. Maximal können dieses 99 Eingangswerte sein. Bis 11 Eingangswerte ging dieses gut, aber dann gab es dieses Problem. |
AW: Permutation (mögliche Kombinationen)
Zitat:
Was soll bei drei Eingabewerten herauskommen, die die Werte A, B oder C annehmen können? Was erwartest Du eigentlich bei 99 Eingabewerten? Was machst Du mit den Ausgaben? Wie lange willst Du warten? |
AW: Permutation (mögliche Kombinationen)
Zitat:
|
AW: Permutation (mögliche Kombinationen)
Bei n=99 wird es ein Ergebnis von rund 93326215443944152681699238856267000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 000000 Datensätzen geben (laut Windows Taschenrechner, und wenn ich bei den Nullen nicht 1-2 falsch gezählt habe - aber eh unwichtig). Wenn jedes der 99 Elemente ein Byte groß ist, wird das Ergebnis grob 84030901497958176291724381797125000000000000000000 00000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000 Terabyte umfassen. (Ebenfalls die gleiche Unsicherheit mit den Nullen, aber auch hier ziemlich egal.)
So. Selbst wenn man es so machen würde, dass man nicht alle Ergebnise vorab speichert (was diverse Erden an Gesamtkapazität aller je gebauten Speichermedien konsumieren dürfte...), müsste man diese dennoch alle durchprüfen. Selbst wenn man dies jetzt bloß auf den Datendurchsatz aktuellen DDR3 RAMs berechnen würde, kann ich mir gut vorstellen, dass man das Endergebnis der Auswertung ungefähr kurz vor der Supernova unserer Sonne ablesen könnte. So ganz grob geschätzt. Fazit: Entweder du kannst Einschränkungen machen, oder das Vorhaben ist von Anfang an komplett und vollständig, ohne Wenn und Aber, schlicht und ergreifend unmöglich. Ein Integer-Überlauf ist hier mit sicherheit das kleinste aller Probleme. |
AW: Permutation (mögliche Kombinationen)
Ist einleuchtend.
Danke für die Antwort. Vielleicht gibt es nächsten Jahrtausend eine Antwort darauf. Zwischenspeichern muss ich übrigens immer nur eine Variante (Kombination), da ich mit jeder Ausgabe einer Kombination teste ob sie bestimmte Kriterien erfüllt. Die Variante (Reihenfolge der Werte) die am dichtesten am Ziel liegt wird sich gemerkt. Wenn eine bessre gefunden ist, wird die alte überschrieben. |
AW: Permutation (mögliche Kombinationen)
|
AW: Permutation (mögliche Kombinationen)
Zitat:
Gehe ich recht in der Annahme, dass jedes Element in einer Kombination nur einmal auftauchen darf?
Code:
Wenn du die beste Kombination haben möchtest, warum willst du dann erst alle Kombinationen zusammenbauen?
Menge (1,2,3,4)
gültig sind (1,2), (1,3), (1,2,3) ungültig sind (1,1), (1,2,2) Wenn (1,2) die Kriterien nicht erfüllt und man weiß, dass diese Kombination auch nicht besser wird, wenn die mit einem anderen Element kombiniert wird, dann kann man diese Kombinationen schon mal komplett ausnehmen und spart sich eine Menge weiterer Prüfungen. |
AW: Permutation (mögliche Kombinationen)
Das nennt sich 'pruning', das der Traversierungsbaum beschnitten (engl: to prune) wird. Wenn man z.B. weiß, das (1,2) vollkommener Schrott ist und auch (1,2,x,y,z...) dann kann man getrost alle Derivate ignorieren. So wird in der klassischen Spieletheorie der Suchbaum (Schach z.B.) drastisch verkürzt.
Aber da der Fragesteller wohl selbst nicht weiß, was er will und Fragen nicht beantworten kann, soll er halt weiter friemeln. |
AW: Permutation (mögliche Kombinationen)
Vielleicht braucht man ja auch nicht suchen, sondern kann das Ergebnis konstruieren. Wer weiß?
Ohne ein wenig Details zu Bedingungen kann man noch nicht mal versuchen, eine ordentliche Vermutung anstellen. Wenn du wirklich nichts verraten willst oder das Problem zu kompliziert ist und das Problem nicht unbedingt mit Delphi lösen musst, kannst du dir mal ![]() |
AW: Permutation (mögliche Kombinationen)
Zitat:
Da Rekursion einer der zentralen Deklarationsmetapher von Prolog ist, dürfte die Implementierung auch alles andere als Obersuperoptimal sein, obwohl ein Prolog-Interpreter tail recursion iterativ auflösen sollte. Prolog wird teilweise bei Expertensystemen eingesetzt, sodass man hier prüfen müsste, inwieweit der TE ein derartiges System benötigt. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:21 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz