PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Permutationen in bestimmter Reihenfolge erzeugen?


Senior Sanchez
2013-09-24, 15:58:45
Hallo,

ich habe entweder gerade ein Brett vor dem Kopf oder es handelt sich um ein nicht ganz so triviales Problem. Es geht darum, dass ich aus sechs Listen alle Permutationen erzeugen will und anschließend eine Güte der Kombination bestimme. Das ist ja nicht schwer, denn dafür könnte ich sechs ineinander geschachtelte For-Schleifen nehmen.

Nun ist es aber so, dass die Listen nach einem eigenen Gütekriterium aufsteigend sortiert sind und Kombinationen der ersten Listenelemente wahrscheinlich zu besseren Ergebnissen führen werden als Kombinationen von Elementen, die weiter hinten in ihren Listen stehen.

Die Frage ist nun: wie realisiere ich das am besten? Die beste Reihenfolge wäre aus meiner Sicht:


Liste A\Liste B 1 2 3 4
-------------------------------------
1 | 1 2 4 7
2 | 3 5 8 11
3 | 6 9 12 14
4 |10 13 15 16


Man würde also diagonal durchgehen. Nur wie iteriere ich darüber? Bei zwei Dimensionen ist das ja noch einfach, aber wie macht man das bei sechs?

Danke

pest
2013-09-24, 19:07:36
ich bezweifle, dass irgendjemand versteht, was du möchtest.

Trap
2013-09-24, 19:35:17
In 6 Dimensionen hat man halt 6 Parameter. Wobei jeder Parameter der Position in der sortierten Liste ist. Dann zählt man die möglichen Kombinationen nach aufsteigender Summe der Parameter auf.

Wie genau du die gleichwertigen durchzählst musst du wissen...

Senior Sanchez
2013-09-24, 19:37:32
In 6 Dimensionen hat man halt 6 Parameter. Wobei jeder Parameter der Position in der sortierten Liste ist. Dann zählt man die möglichen Kombinationen nach aufsteigender Summe der Parameter auf.

Wie genau du die gleichwertigen durchzählst musst du wissen...

Genau diesen Ansatz möchte ich verfolgen, nur ist halt die Frage, wie ich zu jeder Summe schnell an alle möglichen Kombinationen komme.

Trap
2013-09-24, 19:41:38
for summe in 0..max
for p1 in 0..maxp1
for p2 in 0..min(maxp2,summe-p1)
for p3 in 0..min(maxp3,summe-(p1+p2))
usw.

Das wäre ein Möglichkeit. Gibt viele andere.

Senior Sanchez
2013-09-24, 20:19:03
*ditsch*
Du hast Recht, ist eigentlich eine ganz einfache Geschichte. Ich hab heute anscheinend zu viele Powerpoint-Präsentationen gesehen, dass schränkt das Denkvermögen ein. ;)

Ich danke dir!