Comment générer une puissance d'un groupe donné?
Je suis des études pour une interview et je suis tombé sur cette question, en ligne, dans la catégorie "Mathématiques".
Produire de l'énergie de série de série:
int A[] = {1,2,3,4,5};
int N = 5;
int Total = 1 << N;
for ( int i = 0; i < Total; i++ ) {
for ( int j = 0; j < N; j++) {
if ( (i >> j) & 1 )
cout << A[j];
}
cout <<endl;
}
S'il vous plaît je ne veux pas de réponse explicite. Je veux juste des précisions et des conseils sur la façon d'aborder ce problème.
J'ai vérifié la puissance de l'algorithme de google et je ne comprends toujours pas comment résoudre ce problème.
Aussi, quelqu'un pourrait-il rappeler ce que la question est de demander.
Merci.
La puissance d'un ensemble={a,b} est l'ensemble constitué par toutes les combinaisons possibles de représenter les éléments de l'ensemble a pris tout ou rien à la fois. Ici,P(s)={{a},{b},{ab},{}};
Très intéressé par algorithme récursif pour ce problème!
Cochez cette réponse: stackoverflow.com/a/19891145/1740808
Très intéressé par algorithme récursif pour ce problème!
Cochez cette réponse: stackoverflow.com/a/19891145/1740808
OriginalL'auteur Ralph | 2014-06-23
Vous devez vous connecter pour publier un commentaire.
Power set of a set A is the set of all of the subsets of A.
Pas le plus sympathique de la définition dans le monde, mais un exemple pour vous aider :
Par exemple. pour
{1, 2}
, sont les sous-ensembles :{}, {1}, {2}, {1, 2}
Ainsi, la puissance est
{{}, {1}, {2}, {1, 2}}
Pour générer de la puissance, d'observer comment vous créez un sous-ensemble : vous allez à chaque élément un par un, puis de les conserver ou de les ignorer.
Laissez-la présente décision sera indiqué par un bit (1/0).
Ainsi, pour générer
{1}
, vous allez choisir1
et déposez2
(10).Sur les mêmes lignes, vous pouvez écrire un vecteur de bits pour tous les sous-ensembles :
{1} -> 10
{2} -> 01
{1,2} -> 11
À rappeler : Un sous-ensemble si elle est formée par dont certains ou tous les éléments de l'ensemble original. Ainsi, pour créer un sous-ensemble, vous allez à chaque élément, et ensuite décider de les garder ou de le rejeter. Cela signifie que pour chaque élément, vous avez 2 décisions. Ainsi, pour un ensemble, vous pouvez vous retrouver avec
2^N
des décisions différentes, correspondant à2^N
différents sous-ensembles.Voir si vous pouvez le récupérer à partir d'ici.
OriginalL'auteur axiom
La puissance est juste à l'ensemble de tous les sous-ensembles pour l'ensemble donné. Il inclut tous les sous-ensembles (avec l'ensemble vide). Il est bien connu qu'il y a 2N éléments de cet ensemble, où
N
est le nombre d'éléments dans la série originale.De construire la puissance, la chose suivante peut être utilisée:
N
bits (pour le plus petit nombre, ajouter des zéros non significatifs). Chaque bit correspond, si l'ensemble des membres est inclus dans l'actuelle sous-ensemble.Exemple, 3 numéros:
a
,b
,c
chacun des bits du nombre binaire indique si un élément est présent dans l'actuelle sous-ensemble ou pas. Découvrez le top rated réponse pour une meilleure explication.
OriginalL'auteur Alma Do
Pseudo-code:
Algorithme explication:
1) Initialiser
sets
à un ensemble vide:{}
.2) Itérer sur chaque élément dans
{"A", "B", "C"}
3) Itérer sur chaque
set
dans votresets
.3.1) Créer un nouveau jeu qui est une copie de
set
.3.2), Ajoutez le
item
à lanew set
.3.3), Ajoutez le
new set
àsets
.4) Ajouter le
item
à votresets
.4) Itération est terminée. Ajouter l'ensemble vide pour votre
resultSets
.Procédure pas à pas:
Regardons le contenu de
sets
après chaque itération:À l'itération 1, item = "A":
Itération 2, item = "B":
Itération 3, item = "C":
Itération complète, ajouter de l'ensemble vide:
La taille des ensembles de est 2^|set| = 2^3 = 8, ce qui est correct.
Exemple d'implémentation en Java:
D'entrée:
[A, B, C]
De sortie:
[[A], [A, C], [A, B], [A, B, C], [B], [B, C], [C], []]
{}
au début (plutôt qu'à la fin), alors vous n'aurez pas à l'insérer explicitement le singleton fixe à chaque passage dans la boucle externe.Salut John, si nous avons ajouté un ensemble vide au début, puis on itère sur les jeux une fois de trop. Après la première itération, nous aurions {{""}, {""}} ce qui est incorrect. L'insertion de l'ensemble vide se fait aussi en dehors de toutes les boucles. Avez-vous l'esprit de partage du code de l'expliquer?
Mais si vous avez
{}
au début, vous ne serez pas avoir{"A"}, {}
après un passage? Vous prenez l'existantsets
et la création d'une copie de chaque ensemble, à laquelle vous ajoutez un nouvel élément. Puisque vous serait d'ajouter "Un" pour le copier -- je ne vois pas comment "Un" se faufile dans l'ensemble vide. Après tout, quand vous faites cela avec "B" dans votre boucle, vous obtenez {"A","B"}, tout en ayant encore {""} -- {""} n'est pas remplacé par {"A","B"}. Vous devez insérer l'ensemble vide, en dehors de toute boucle -- mais avant de la boucle, dans ce cas ajouter les singletons l'intérieur de la boucle est superflu.Si je commence avec un ensemble vide
{{}}
, alors comme je l'itération sur les séries que je vais prendre l'ensemble vide et l'ajouter 'A'. Je vais donc ajouter un nouvel ensemble contenant 'A' pour les jeux existants. L'exécution du code avec votre suggestion, je reçois le texte suivant après la première itération:[[], [A], [A]]
comme prévu. L'exécution de l'algorithme de nouveau sur {'A', 'B', 'C'} - je obtenir[[], [C], [B], [B, C], [A], [A, C], [A, B], [A, B, C], [A], [A, C], [A, B], [A, B, C], [B], [B, C], [C]]
Vous dites "je vais donc ajouter un nouvel ensemble contenant 'A' pour les jeux existants" -- mais pourquoi voulez-vous encore? Le point de mon commentaire est explicitement l'ajout de l'élément en tant que singleton (étape 4 de votre pseudo) n'est pas nécessaire si vous initialisez avec l'ensemble vide
OriginalL'auteur Cristian
Bien, vous avez besoin de générer tous les sous-ensembles. Pour un ensemble de taille n, il y a
2n sous-ensembles.
Un autre moyen serait d'effectuer une itération sur les numéros de 0 à 2n - 1
et convertir chacun à une liste de chiffres binaires, où
0
signifie exclurede cet élément et de
1
moyen de l'inclure.Une autre façon serait avec la récursivité, diviser et conquérir.
OriginalL'auteur Tom Zych
Générant toutes les combinaison d'un ensemble (En incluant ou non un élément).
expliquer par exemple:
3 éléments dans un ensemble (ou une liste). La possible sous-ensemble sera:
Le résultat est de 2^(nombre d'éléments de l'ensemble).
En tant que tel, nous pouvons générer toutes les combinaisons de N éléments (avec python) comme suit:
OriginalL'auteur Amjad
Vous Obtenez quelque Chose Comme Ceci par la mise en Œuvre de la top rated Réponse.
OriginalL'auteur Carlson Bimbuh
Exemple De Code Java:
OriginalL'auteur ashwanilabs