Cela fonctionne en Python pour afficher tous les 3-permutations de [0, 1, 2, 3, 4]
:Énumérer 3 permutations avec des numéros plus bas en premier en Python
import itertools
N = 5
for p in itertools.permutations(range(N), r=3):
print p
#(0, 1, 2)
#(0, 1, 3)
#(0, 1, 4)
#(0, 2, 1)
#(0, 2, 3)
#(0, 2, 4)
#(0, 3, 1)
#...
Mais je voudrais les ont énumérés dans cet ordre: premières fois nombre plus bas, à savoir :
#display 3-permutations of [0]
# (none)
#display 3-permutations of [0, 1] that haven't been displayed before
# (none)
#display 3-permutations of [0, 1, 2] that haven't been displayed before
(0, 1, 2)
(0, 2, 1)
(1, 0, 2)
(1, 2, 0)
(2, 0, 1)
(2, 1, 0)
#display 3-permutations of [0, 1, 2, 3] that haven't been displayed before
(0, 1, 3)
(0, 2, 3)
(0, 3, 1)
(0, 3, 2)
...
#display remaining 3-permutations of [0, 1, 2, 3, 4] that haven't been displayed before
...
Est-il possible d'énumérer rapidement 3 permutations de [0, ..., N-1] avec cet ordre?
Note: Dans mon cas d'utilisation, N > 2000
, donc il doit être rapide (j'utilise Cython aussi bien pour d'autres calculs pour le rendre rapide, mais cela est un autre sujet). Éditer (grâce à @RoryDaulton): l'ordre dans chaque groupe n'a pas d'importance et je me soucie seulement du groupement.
Cela semble une solution géniale, ce qui évite d'avoir à faire une recherche fastidieuse dans un ensemble en pleine croissance. Je devrais faire quelques tests de synchronisation pour voir l'interaction entre 2 combinaisons avec des insertions multiples et 3 combinaisons, mais indépendamment du résultat de ce test, imaginez-moi impressionné. – Uvar
Bonne idée. Je l'ai légèrement modifié et ajouté une implémentation à ma réponse. Malheureusement, je ne peux pas trouver un moyen simple d'obtenir cet algorithme pour produire les permutations dans le même ordre que Basj et mes algorithmes. –