Maison >développement back-end >C++ >Comment `std::next_permutation` de C peut-il être utilisé pour générer toutes les combinaisons d'une taille donnée ?

Comment `std::next_permutation` de C peut-il être utilisé pour générer toutes les combinaisons d'une taille donnée ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-28 03:58:13736parcourir

How Can C  's `std::next_permutation` Be Used to Generate All Combinations of a Given Size?

Générer des combinaisons en C

Créer des combinaisons implique de sélectionner un sous-ensemble d'éléments dans un ensemble donné sans tenir compte de l'ordre des sélections. Face à la tâche de générer des combinaisons à l'aide de C , il est important de considérer les éléments suivants :

Définition du problème :

Étant donné un ensemble S = {1, 2, 3 , ..., n} et une valeur r, où r est le nombre d'éléments à sélectionner dans l'ensemble, nous visons à générer toutes les combinaisons possibles de longueur r à partir de la donnée set.

Approche de la solution :

Une approche pour résoudre ce problème consiste à utiliser la fonction std::next_permutation de la bibliothèque standard C. Cette fonction nous permet de générer toutes les permutations d'un vecteur d'éléments. En utilisant cette fonction, nous pouvons créer un vecteur de valeurs booléennes représentant les éléments sélectionnés.

Implémentation :

Voici un exemple d'implémentation utilisant std::next_permutation :

#include <iostream>
#include <vector>

int main() {
    int n, r;
    std::cin >> n >> r;

    std::vector<bool> v(n);
    std::fill(v.end() - r, v.end(), true);

    do {
        for (int i = 0; i < n; ++i) {
            if (v[i]) {
                std::cout << (i + 1) << " ";
            }
        }
        std::cout << "\n";
    } while (std::next_permutation(v.begin(), v.end()));
    return 0;
}

Dans cette implémentation, nous créons un vecteur de longueur n et remplissons les r derniers éléments avec true. La fonction std::next_permutation est ensuite utilisée pour générer toutes les permutations possibles du vecteur. Pour chaque permutation, nous imprimons les éléments correspondant aux vraies valeurs dans le vecteur.

Explication :

Cette approche fonctionne en créant un "tableau de sélection" (v) où nous plaçons r sélecteurs. Nous générons ensuite toutes les permutations de ces sélecteurs et imprimons les membres de l'ensemble correspondant s'ils sont sélectionnés dans la permutation actuelle de v.

En utilisant la fonction std::next_permutation, nous pouvons générer efficacement toutes les combinaisons de longueur r de l'ensemble donné.

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