Stellen Sie sich ein 3x3:Grid Permutation Algorithm - Fest Row Bestellen
[A, B, %]
[C, %, D]
[E, F, G]
Die Prozent %
für leere Räume/Positionen stehen.
Die Reihen kann wie Perlen auf einer Schnur bewegt werden, so daß die Permutationen für die Konfigurationen für die erste Zeile einer der sein könnten:
[A, B, %] or [A, %, B] or [%, A, B]
ähnliche Weise für die zweite Reihe. Die dritte Zeile enthält keine leeren Slots und kann daher nicht geändert werden.
Ich versuche, alle möglichen Gitter zu produzieren, gegeben die möglichen Permutationen jeder Reihe.
Der Ausgang sollte die folgenden Rastern erzeugen:
[A, B, %] [A, B, %] [A, B, %]
[C, D, %] [C, %, D] [%, C, D]
[E, F, G] [E, F, G] [E, F, G]
[A, %, B] [A, %, B] [A, %, B]
[C, D, %] [C, %, D] [%, C, D]
[E, F, G] [E, F, G] [E, F, G]
[%, A, B] [%, A, B] [%, A, B]
[C, D, %] [C, %, D] [%, C, D]
[E, F, G] [E, F, G] [E, F, G]
habe ich versucht, ein Verfahren zur Herstellung durch jede Reihe der Suche und Verschieben der Raum links und rechts, dann neue Netze und ausgeschaltet, dass recursing erzeugen. Ich behalte alle Gitter in einem Satz und stelle sicher, dass ich nur Positionen erzeuge, die noch nicht untersucht wurden, um eine unendliche Rekursion zu verhindern.
Allerdings scheint mein Algorithmus horrend ineffizient zu sein (~ 1s pro Permutation !!) und sieht auch nicht sehr gut aus. Ich habe mich gefragt, ob es einen beredten Weg gab, dies zu tun? In Python insbesondere.
Ich habe einige vage Ideen, aber ich bin mir sicher, dass es eine Möglichkeit gibt, dies zu tun, die kurz und einfach ist, die ich übersehe.
EDIT: 3x3 ist nur ein Beispiel. Gitter könnte jede Größe haben und es sind wirklich die Reihenkombinationen, die wichtig sind. Zum Beispiel:
[A, %, C]
[D, E, %, G]
[H, I]
ist auch ein gültiges Raster.
EDIT 2: Die Buchstaben müssen ihre Reihenfolge beibehalten. Zum Beispiel [A, %, B] != [B, %, A]
und [B, A, %]
ist nicht gültig
Muss dies für Raster beliebiger Größe funktionieren? –
wird ["A", "B", "%] als betrachtet! = [" B "," A ","% "]? – luke14free
Das Raster wird von beliebiger Größe sein, möglicherweise könnte jede Zeile auch eine andere Länge haben 3x3 war nur ein Beispiel –