84 votes

Génération de permutations paresseuses

Je cherche un algorithme pour générer les permutations d'un ensemble de telle sorte que je puisse en faire une liste paresseuse en Clojure. C'est-à-dire que j'aimerais itérer sur une liste de permutations où chaque permutation n'est pas calculée avant que je ne le demande, et où toutes les permutations n'ont pas besoin d'être stockées en mémoire en une seule fois.

Alternativement, je cherche un algorithme qui, étant donné un certain ensemble, renvoie la permutation "suivante" de cet ensemble, de telle sorte que l'appel répété de la fonction sur sa propre sortie fera défiler toutes les permutations de l'ensemble original, dans un certain ordre (l'ordre n'a pas d'importance).

Existe-t-il un tel algorithme ? La plupart des algorithmes de génération de permutations que j'ai vus ont tendance à les générer tous en même temps (généralement de manière récursive), ce qui n'est pas adapté aux très grands ensembles. Une implémentation en Clojure (ou un autre langage fonctionnel) serait utile, mais je peux me débrouiller à partir du pseudo-code.

0voto

Drew Noakes Points 69288

J'ai fourni une solution en C# qui produit de telles permutations paresseusement.

Voir ma réponse ici .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X