Maison > développement back-end > C++ > le corps du texte

Comment fonctionne l'algorithme `std::next_permutation` et que représentent les variables `i`, `j` et `k` ?

Barbara Streisand
Libérer: 2024-11-08 03:23:02
original
113 Les gens l'ont consulté

How does the `std::next_permutation` algorithm work, and what do the variables `i`, `j`, and `k` represent?

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) {
        // ...
    }
}
Copier après la connexion

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 :

  • i : Pointeur vers l'élément le plus à gauche de la séquence décroissante.
  • j : Pointeur vers l'élément à droite de i.
  • k : Pointeur vers l'élément à la droit de i qui est immédiatement supérieur à i.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!