Finden des N-ten Elements in einer Liste aller möglichen Zahlen

Dies ist eine Erweiterung meiner Frage hier :

Bei einer bestimmten Anzahl von Ziffern, von denen jede einen bestimmten Bereich von 1 bis zu einer bestimmten Zahl hat, was wäre das N-te Element in der Liste aller Permutationen von ihnen, die gefunden werden, indem zuerst die innersten Ziffern modifiziert werden.

Beispiel: Bei 3 Ziffern, wobei die erste einen Bereich von [1..3], die zweite [1..2] und die dritte [1..4] hat, wäre die Liste

1 1 1
1 1 2
1 1 3
1 1 4
1 2 1
1 2 2
1 2 3
1 2 4
2 1 1
2 1 2
2 1 3
 ...

Wie würden Sie das N-te Element dieser Arten von Mengen finden? Umgekehrt, bei einer gegebenen Zahl, wie würden Sie die Position in dieser Menge finden?

Kennen Sie das kartesische Produkt?
Ich sehe, wie es verwendet werden könnte, um das gewünschte Set zu generieren, aber ich sehe nicht, wie es hilft, ein bestimmtes Element davon zu finden.
Sie haben Tags für diskrete Mathematik, reelle Analyse und Fourier-Transformation vergessen.

Antworten (1)

Lassen S sei die Liste der Anzahl möglicher Werte für jede Position in der Liste und let N die Position in der Liste sein. Lassen ich Anfangs die Länge der Elemente der Liste sein. Der Prozess zum Erhalt des Elements ist: Q = N / ( P R Ö D X = 0 ich S ich )

N = N Mod P R Ö D X = 0 ich S ich + 1

ich = ich 1

Und jeder nachfolgende Wert von N ist der ich te Ziffer des Elements.

Bei einem gegebenen Element ist die Position X = 0 Länge der Elemente der Liste X = 0 ich × ( x-te Ziffer des Elements von links nach rechts 1 )

Grundsätzlich ist dieses Problem ein degenerierter Fall (ein allgemeiner Fall) der Umwandlung in Basen, außer dass 1 für 0, 2 für 1 verwendet wird (also würde 1111 in dieser Liste 0000 zuordnen) usw. Ich werde bald einen Beweis veröffentlichen . Nicht sicher, ob es richtig ist; werde dies später verifizieren. Auch die Ausgabe/Eingabe kann nullindiziert sein (beginnend bei Null).

In der ersten Formel wurde ein Produkt mit dem Index x verwendet, aber ich sehe dieses x nicht im S_i. Sollte das S_x sein? Könnten Sie bitte die Verwendung anhand eines Beispiels demonstrieren?
Würden Sie nicht auch ein Modulo benötigen, um die Schleife zu berücksichtigen?