Ich bin mir nicht sicher, wie ich meine Frage in knapper Form stellen soll, also werde ich mit Beispielen beginnen und von dort aus expandieren. Ich arbeite mit VBA, aber ich denke, dass dieses Problem nicht sprachspezifisch ist und nur einen hellen Verstand erfordern würde, der ein Pseudo-Code-Framework bereitstellen kann. Vielen Dank im Voraus für die Hilfe!
Beispiel: Ich habe 3 Character Arrays wie So:
%Vor%Ich möchte ALLE möglichen Permutationen der Zeichenarrays wie folgt erzeugen:
%Vor%Dies kann einfach mit 3 while-Schleifen oder for-Schleifen gelöst werden. Meine Frage ist, wie löse ich dafür, wenn die Anzahl der Arrays unbekannt ist und die Länge jedes Arrays unbekannt ist?
Also ein Beispiel mit 4-Zeichen-Arrays:
%Vor%Ich müsste generieren:
%Vor%Das verallgemeinerte Beispiel wäre also:
%Vor%Gibt es eine Möglichkeit, eine Funktion zu strukturieren, die eine unbekannte Anzahl von Schleifen erzeugt und die Länge jedes Arrays durchläuft, um die Permutationen zu erzeugen? Oder vielleicht gibt es eine bessere Möglichkeit, über das Problem nachzudenken?
Danke allen!
Dies ist die einfachste und einfachste Lösung. Das Folgende ist in Java, aber es sollte aufschlussreich sein:
%Vor% Hinweis: Java-Arrays sind 0-basiert, daher geht k
von 0..arrs.length-1
während der Rekursion bis k == arrs.length
, wenn es das Ende der Rekursion ist.
Es ist auch möglich, eine nicht-rekursive Lösung zu schreiben, aber das ist ehrlich gesagt weniger intuitiv. Dies ist tatsächlich sehr ähnlich zur Basenumwandlung, z.B. von dezimal zu hexadezimal; Es ist eine verallgemeinerte Form, bei der jede Position ihre eigenen Werte hat.
%Vor%( sehen Sie die vollständige Ausgabe )
Dies erzeugt die Tuplets in einer anderen Reihenfolge. Wenn Sie sie in der gleichen Reihenfolge wie die rekursive Lösung generieren möchten, durchlaufen Sie arrs
"backward" während decode
wie folgt:
BEARBEITEN : Hier ist eine Rubin-Lösung. Es ist ungefähr dasselbe wie meine andere Lösung, aber angenommen, Ihre Eingabe-Zeichen-Arrays sind Wörter: Sie können also Folgendes eingeben:
%Vor%~ / bin / perm.rb
%Vor%OLD - Ich habe ein Skript, um dies in MEL zu machen (Maya's Embedded Language) - Ich werde versuchen, etwas in C zu übersetzen, aber erwarte nicht, dass es ohne etwas läuft der Fixierung;) Es funktioniert jedoch in Maya.
Zuerst - werfen Sie alle Arrays in einem langen Array mit Trennzeichen zusammen. (Ich überlasse das Ihnen - weil es in meinem System die Werte aus einer Benutzeroberfläche herausreißt). Das bedeutet, dass die Begrenzer zusätzliche Slots belegen: Um Ihre Beispieldaten oben zu verwenden:
%Vor%Natürlich können Sie so viele Arrays verketten, wie Sie möchten.
%Vor%Wenn ich die Frage richtig verstehe, denke ich, dass Sie alle Ihre Arrays in ein anderes Array einfügen könnten, wodurch ein gezacktes Array entsteht.
Durchlaufen Sie dann alle Arrays in Ihrem gezackten Array und erstellen Sie alle benötigten Permutationen.
Macht das Sinn?
Tags und Links arrays permutation computer-science arraylist multidimensional-array