Maison >développement back-end >C++ >Comment générer tous les sous-ensembles d'un ensemble à l'aide d'un algorithme récursif ?

Comment générer tous les sous-ensembles d'un ensemble à l'aide d'un algorithme récursif ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-14 12:27:17718parcourir

How can I generate all subsets of a set using a recursive algorithm?

Rechercher tous les sous-ensembles d'un ensemble à l'aide d'un algorithme récursif

Étant donné un ensemble avec n éléments, trouver tous les sous-ensembles possibles est une tâche courante. Cet article présente une explication étape par étape d'un algorithme récursif efficace pour y parvenir.

Approche récursive

L'algorithme est basé sur l'idée que pour chaque élément dans un ensemble, il y a deux possibilités :

  1. Inclure l'élément : Cela crée un nouveau sous-ensemble qui inclut l'élément.
  2. Exclure l'élément : Cela crée un nouveau sous-ensemble qui exclut l'élément.

En considérant les deux possibilités pour chaque élément, nous couvrons tous combinaisons possibles et donc trouver tous les sous-ensembles.

Pas à pas Explication

Prenons l'ensemble {1, 2, 3, 4, 5} comme exemple.

  1. Cas de base : Pour n= 1, l'ensemble a un seul élément (par exemple, {1}). Les sous-ensembles sont {{}} (l'ensemble vide) et {{1}} (contenant seulement 1).
  2. Cas récursif : Pour n>1, nous pouvons casser le problème se décompose en deux sous-problèmes :

    • Trouver des sous-ensembles de {1, 2, 3, 4, 5-1} :Nous appelons récursivement l'algorithme pour les n-1 premiers éléments et obtenons un ensemble de sous-ensembles.
    • Faire deux copies de l'ensemble de sous-ensembles : Une copie sert à inclure l'élément n dans chaque sous-ensemble et l'autre à l'exclure.
    • Ajoutez n aux sous-ensembles dans la copie d'inclusion : Par exemple, si nous avons {{}, {1}, {2}}, ajouter 5 donnerait {{}, {1}, {2}, {5}, {1, 5 }, {2, 5}}.
    • Prenons l'union des deux copies : Cela nous donne l'ensemble complet de sous-ensembles.

Exemple

Calculons les sous-ensembles de {1, 2, 3, 4, 5} de manière récursive :

  • Étape 1 (n=1) : Sous-ensembles = {{}, {1}}
  • Étape 2 (n=2) : Sous-ensembles = {{}, {1}, { 2}, {1, 2}} (faire une copie pour {2})
  • Étape 3 (n=3) : Sous-ensembles = {{}, {1}, {2}, {1, 2}, {3}, {1, 3}, {2, 3}, {1, 2, 3}} (ajoutez 3 au { 2} copie)
  • Étape 4 (n=4) : Sous-ensembles = {{}, {1}, {2}, {1, 2}, {3}, {1, 3}, {2, 3}, {1, 2, 3}, {4}, {1, 4}, {2, 4}, {1, 2, 4}} (ajouter 4 à la copie {3})
  • Étape 5 (n=5) : Sous-ensembles = {{}, {1}, {2}, {1, 2}, {3}, {1, 3}, {2, 3}, {1, 2, 3}, {4}, {1, 4}, {2, 4}, {1, 2, 4} , {5}, {1, 5}, {2, 5}, {1, 2, 5}} (ajoutez 5 au {4} copie)

Par conséquent, l'ensemble complet des sous-ensembles est {{}, {1}, {2}, {1, 2}, {3}, {1, 3}, {2, 3}, {1, 2, 3}, {4}, {1, 4}, {2, 4}, {1, 2, 4}, {5}, {1, 5}, {2, 5}, {1, 2, 5}}.

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