std::next_permutation Explication de la mise en œuvre
Question :
Comment le L'algorithme std::next_permutation fonctionne ? Que représentent les variables i, j et k et comment leurs valeurs changent-elles au cours de l'exécution ?
Comprendre le Concept :
Pour comprendre std::next_permutation, nous pouvons visualiser les permutations sous forme de nombres avec leurs chiffres représentés par des éléments. Le but est de générer la prochaine permutation dans l'ordre "ascendant", en minimisant le montant dont le nombre augmente.
La boucle centrale :
Au cœur de la L'algorithme se trouve dans une boucle while :
while (true) { It j = i; --i; if (*i < *j) { // ... } if (i == begin) { // ... } }
Cette boucle parcourt en arrière du dernier élément au premier. L'idée clé est que nous n'avons besoin de changer la position d'un chiffre que lorsque tout à droite est dans l'ordre décroissant.
Trouver la séquence décroissante la plus à gauche :
Si les éléments pointés par i et j sont par ordre croissant, nous avons trouvé la séquence décroissante la plus à gauche.
Échange et réorganisation :
Lorsque nous trouvons la séquence décroissante la plus à gauche, nous échangeons le chiffre pointé par i avec le chiffre "suivant le plus grand" à sa droite. Ce chiffre est identifié en itérant à partir de la fin et en s'arrêtant lorsque nous trouvons un chiffre supérieur à i.
Après l'échange, les chiffres restants à droite sont déjà par ordre décroissant, nous avons donc simplement inversez-les pour obtenir la permutation suivante.
Variables spécifiques :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!