Disons que nous avons un ensemble disons également que s contient six éléments uniques: Comment trouver tous les sous-ensembles possibles de Le résultat de la fonction / méthode doit être quelque chose comme ça: p> Y a-t-il une meilleure pratique ou une façon standard d'atteindre cela? p> Je serais reconnaissant pour un pseudo-code, un exemple de rubis ou d'erlang. P> P> S code> qui contient quelques sous-ensembles:
a, b , c, d, e code> et
f code>. p>
s code> contenant chacun des éléments uniques de
S code> exactement une fois? p>
[[[A, B, C], [D, E, F]]; CODE> LI>
[[[A, B, C], [D, F], [E]]; CODE> LI>
[[[A, B], [C], [D, E, F]]; CODE> LI>
[[[A, B], [C], [D, F], [E]]. CODE> LI>
ol>
5 Réponses :
Pourquoi ne pas utiliser l'algorithme gourmand? P>
1) Set Set s descendre à l'aide de la longueur des sous-ensembles
2) Laissez I: = 0
3) Ajouter S [i] à la solution
4) Trouver S [J] où J> i tel qu'il contient des éléments qui ne sont pas en solution actuelle
5) Si vous ne trouvez pas l'élément décrit dans 4, puis
5.A) Solution claire
5.b) Augmenter i
5.C) Si je> | S | Puis casser, pas de solution trouvée; (
5.d) goto 3 p>
Hmm, lisez votre message et venez en conclusion que vous avez besoin d'un Meilleure première recherche . Votre question n'est pas réellement un problème de partition car ce dont vous avez besoin est également appelé Problème de modification de la tâche a > Mais dans cette dernière situation, la toute première solution est prise comme la meilleure - vous souhaitez réellement trouver toutes les solutions et c'est la raison pour laquelle vous devriez vous devoir la meilleure approche de stratégie de recherche. P>
Cela semble être une exercice classique "BackTrack". P>
On dirait que ce que vous cherchez sont les Partitions d'un ensemble / matrice. < p> Une façon de le faire est récursivement: p>
Une implémentation de rubis ressemble un peu à p>
Fonctionne très bien! Mais j'ai trouvé que cela se bloque pour quelque chose d'égal ou supérieur à 10 articles. Une idée pourquoi? Les partitions en cours d'exécution ([1,2,3,4,5,6,7,8,9,10]) accrochent de rubis
Les collections impliquées deviennent grandes assez rapidement - il y a 115975 partitions d'un tableau de 10 articles, il n'a toujours pas pris quelques secondes sur ma machine. Si vous exécutez ceci en IRB, il tentera d'afficher le résultat - pas une bonne idée!
Il se bloque réellement dans les rails et en courant sous RSPEC de RUBYMINE. Je suis sur Mac Running Lion. Mon problème est en fait plus spécialisé que cela, donc je l'ai posté ici: Stackoverflow.com/Questtions/9732944/...
générer tous les sous-ensembles
Jetez un oeil ici: https://github.com/sagivo/algorithms /blob/master/powerset.rb
Ceci est un algorithme simple que j'ai construit pour trouver un powerset d'un tableau. p>