Berechnung des N-ten Permutationsschritts?

Ich habe ein Zeichen [26] für die Buchstaben a-z und über geschachtelt für Anweisungen erzeuge ich eine Liste von Sequenzen wie:

aaa, aaz... aba, abb, abz, ... zzy, zzz.

erzeit wird die Software so geschrieben, dass sie die Liste aller möglichen Werte von aaa-zzz generiert, einen Index verwaltet und von jedem einzelnen eine Operation ausführ

Die Liste ist offensichtlich groß, nicht lächerlich groß, aber so weit fortgeschritten, dass der Speicherbedarf zu groß ist (es werden auch andere Bereiche betrachtet, aber dies ist einer, den ich habe).

Ich versuche, eine Formel zu erstellen, in der ich den Index behalten kann, aber die Liste der Sequenzen weglasse und die aktuelle Sequenz basierend auf dem aktuellen Index berechne (da die Zeit zwischen den Operationen zwischen den Sequenzen lang ist).

Z.B

char[] characters = {a, b, c... z};
int currentIndex = 29; // abd

public string CurrentSequence(int currentIndex)
{
    int ndx1 = getIndex1(currentIndex); // = 0
    int ndx2 = getIndex2(currentIndex); // = 1
    int ndx3 = getIndex3(currentIndex); // = 3

    return string.Format(
        "{0}{1}{2}", 
        characters[ndx1], 
        characters[ndx2], 
        characters[ndx3]); // abd
}

Ich habe versucht, ein kleines Beispiel mit einer Teilmenge (abc) zu erarbeiten und mit der Modulo-Division in diese zu indizieren, aber ich habe heute Probleme beim Denken und bin ratlos.

Ich bitte nicht um eine Antwort, nur irgendeine Art von Hilfe. Vielleicht ein Kick in die richtige Richtung?

Antworten auf die Frage(8)

Ihre Antwort auf die Frage