Maison > développement back-end > C++ > Comment trouver tous les sous-ensembles possibles d'un ensemble de n éléments en utilisant une approche récursive ?

Comment trouver tous les sous-ensembles possibles d'un ensemble de n éléments en utilisant une approche récursive ?

Patricia Arquette
Libérer: 2024-11-19 10:57:02
original
502 Les gens l'ont consulté

How can you find all possible subsets of a set with n elements using a recursive approach?

Rechercher tous les sous-ensembles d'un ensemble

En informatique, trouver tous les sous-ensembles d'un ensemble donné est un problème classique. La question se pose comme suit :

Problème :

Comment déterminer tous les sous-ensembles possibles d'un ensemble à n éléments ?

Solution :

Une approche simple de ce problème réside dans la récursivité. Le concept tourne autour de l'idée que :

  • Pour n=1, les sous-ensembles sont {{}, {1}}
  • Pour n>1, nous pouvons diviser les sous-ensembles de 1,...,n-1 en deux groupes : ceux contenant n et ceux ne contenant pas n. La combinaison de ces groupes donne les sous-ensembles pour 1,...,n.

Exemple :

Considérons n=5.

  1. Trouvez les sous-ensembles de 1,...,4 : {{}, {1}, {2}, {3}, {4}, {1, 2}, {1, 3}, {1, 4}, {2, 3}, {2, 4}, {3, 4}, {1, 2, 3}, {1, 2, 4 }, {1, 3, 4}, {2, 3, 4}, {1, 2, 3, 4}}
  2. Créez une copie et ajoutez 5 à chacune sous-ensemble : {{5}, {1, 5}, {2, 5}, {3, 5}, {4, 5}, {1, 2, 5}, {1, 3, 5}, {1, 4, 5}, {2, 3, 5}, {2, 4, 5}, {3, 4, 5}, {1, 2, 3, 5}, {1, 2, 4, 5}, {1, 3, 4, 5}, {2, 3, 4, 5}, {1, 2, 3, 4, 5}}
  3. Prendre l'union des ensembles originaux et modifiés : {{}, {1}, {2}, {3}, {4}, {5}, {1, 2}, {1, 3}, {1, 4}, {1, 5}, {2, 3}, {2, 4}, {2, 5}, {3, 4}, {3, 5}, {4, 5}, {1, 2, 3}, {1, 2, 4}, {1, 2, 5}, {1, 3, 4}, {1, 3, 5}, {1, 4, 5}, {2, 3, 4}, {2, 3, 5}, {2, 4, 5}, {3, 4, 5}, {1, 2, 3, 4}, {1, 2, 3, 5}, {1, 2, 4 , 5}, {1, 3, 4, 5}, {2, 3, 4, 5}, {1, 2, 3, 4, 5}}

Implémentation C :

#include <vector>

using namespace std;

vector<vector<int>> subsets(vector<int>& nums) {
    if (nums.empty()) return {{}};

    vector<vector<int>> prev = subsets(vector<int>(nums.begin(), nums.end() - 1));
    vector<vector<int>> curr;

    for (auto& subset : prev) {
        curr.push_back(subset);
        subset.push_back(nums.back());
        curr.push_back(subset);
    }

    return curr;
}
Copier après la connexion

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