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
Libérer: 2024-11-28 03:58:13
original
734 Les gens l'ont consulté

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;
}
Copier après la connexion

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!

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