Std::next_permutation Implémentation expliquée
Question :
Pouvez-vous expliquer la fonctionnalité, les rôles variables et l'exactitude du std : :algorithme de next_permutation ?
Réponse :
Comment ça marche :
std::next_permutation réorganise une séquence donnée d'éléments dans la prochaine permutation lexicographiquement plus grande. Il le fait en localisant le premier élément i où i < j pour quelques j après, puis trouver l'élément k suivant plus grand tel que i < k à partir de la fin de la séquence.
-
Trouver le premier élément décroissant (i) :
- Parcourir le séquence de droite à gauche jusqu'à ce qu'un élément i soit trouvé où i < j pour l'élément j suivant.
-
Trouver l'élément suivant plus grand (k) :
- Itérer de l'extrémité droite de la séquence jusqu'à ce qu'un élément k soit trouvé où i < k.
-
Échanger i et k :
- Échanger les positions des éléments i et k pour introduire une valeur plus élevée au point décroissant.
-
Inversez la sous-séquence après j :
- Puisque l'échange de i et k peut ont perturbé l'ordre décroissant des éléments restants après i, ils sont triés par ordre croissant en inversant cette sous-séquence.
Rôles variables :
-
i : Pointeur vers le premier élément décroissant.
-
j : Pointeur vers l'élément suivant après i.
-
k : Pointeur vers l'élément le plus grand suivant à partir de la fin.
Esquisse d'exactitude :
L'algorithme préserve la propriété dont la sous-séquence est issue i jusqu'à la fin reste par ordre décroissant tout au long du processus.
-
Ordre décroissant après échange :
- L'ordre décroissant initial de i jusqu'à la fin est conservé car les éléments après j ne sont pas modifiés dans l'échange.
-
Lexicographiquement plus petit
- Échange i et k garantissent que la permutation résultante est lexicographiquement plus grande que la précédente, car k est le prochain élément plus grand rencontré.
-
Épuisement de permutation :
- Lorsqu'il n'y a pas d'élément décroissant i, la séquence entière est par ordre décroissant, indiquant que la dernière permutation a été atteinte.
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!
Déclaration:Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn