Permutations pour une collection

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
5 messages Options
Reply | Threaded
Open this post in threaded view
|

Permutations pour une collection

sebastien audier
Bonjour tout le monde,

Je cherchais une méthode pour générer toutes les permutations possible d'une collection.
A partir d'une collection, je dois obtenir une collection de collections distinctes.

Il y a la méthode permutationsDo:
Celle-ci est implémenté pour les classes Interval et SequenceableCollection.

Cela fonctionne parfaitement pour Interval, mais pas vraiment pour une collection. Le résultat obtenu n'est pas celui auquel je m'attend.

J'ai donc implémenté une méthode temporaire qui invoque la méthode déjà présente dans la classe Interval:

permutationsFor: aCollection
| res |
res := OrderedCollection new.
(1 to: (aCollection size)) permutationsDo: [ :each | | temp |
temp := OrderedCollection new.
each do: [ :item |
temp add: (aCollection at: item)].
res add: temp].
^res


Pensez-vous qu'il y aurait une meilleur façon de faire ? (plus élégante ou qui existe déjà et que j'aurai loupé...) 

En vous remerciant par avance,

--
Sébastien AUDIER

S.A.R.L Objectfusion,
Applications web, consulting,
Smalltalk developpement

--
Vous recevez ce message, car vous êtes abonné au groupe Google Groupes "Smalltalk-fr".
Pour vous désabonner de ce groupe et ne plus recevoir d'e-mails le concernant, envoyez un e-mail à l'adresse [hidden email].
Pour obtenir davantage d'options, consultez la page https://groups.google.com/d/optout.
Reply | Threaded
Open this post in threaded view
|

Re: Permutations pour une collection

SergeStinckwich
J'ai eu un problème un peu similaire sur les combinaisons d'une collection.
J'ai utilisé la méthode combinations: kk atATimeDo: aBlock également
définie sur SequenceableCollection.



2014-06-02 17:54 GMT+02:00 Sebastien Audier <[hidden email]>:

> Bonjour tout le monde,
>
> Je cherchais une méthode pour générer toutes les permutations possible d'une
> collection.
> A partir d'une collection, je dois obtenir une collection de collections
> distinctes.
>
> Il y a la méthode permutationsDo:
> Celle-ci est implémenté pour les classes Interval et SequenceableCollection.
>
> Cela fonctionne parfaitement pour Interval, mais pas vraiment pour une
> collection. Le résultat obtenu n'est pas celui auquel je m'attend.
>
> J'ai donc implémenté une méthode temporaire qui invoque la méthode déjà
> présente dans la classe Interval:
>
> permutationsFor: aCollection
> | res |
> res := OrderedCollection new.
> (1 to: (aCollection size)) permutationsDo: [ :each | | temp |
> temp := OrderedCollection new.
> each do: [ :item |
> temp add: (aCollection at: item)].
> res add: temp].
> ^res
>
>
> Pensez-vous qu'il y aurait une meilleur façon de faire ? (plus élégante ou
> qui existe déjà et que j'aurai loupé...)
>
> En vous remerciant par avance,
>
> --
> Sébastien AUDIER
>
> S.A.R.L Objectfusion,
> Applications web, consulting,
> Smalltalk developpement
>
> --
> Vous recevez ce message, car vous êtes abonné au groupe Google Groupes
> "Smalltalk-fr".
> Pour vous désabonner de ce groupe et ne plus recevoir d'e-mails le
> concernant, envoyez un e-mail à l'adresse
> [hidden email].
> Pour obtenir davantage d'options, consultez la page
> https://groups.google.com/d/optout.



--
Serge Stinckwich
UCBN & UMI UMMISCO 209 (IRD/UPMC)
Every DSL ends up being Smalltalk
http://www.doesnotunderstand.org/

--
Vous recevez ce message, car vous êtes abonné au groupe Google Groupes Smalltalk-fr.
Pour vous désabonner de ce groupe et ne plus recevoir d'e-mails le concernant, envoyez un e-mail à l'adresse [hidden email].
Pour plus d'options, visitez le site https://groups.google.com/d/optout .
Reply | Threaded
Open this post in threaded view
|

Re: Permutations pour une collection

sebastien audier
Ok merci Serge, j'avais bien vu cette méthode, mais je n'ai peut-être saisi au premier coup d'oeil son bon comportement.

Je vais re-itérer mes essais.

Encore merci,


Le 2 juin 2014 18:16, Serge Stinckwich <[hidden email]> a écrit :
J'ai eu un problème un peu similaire sur les combinaisons d'une collection.
J'ai utilisé la méthode combinations: kk atATimeDo: aBlock également
définie sur SequenceableCollection.



2014-06-02 17:54 GMT+02:00 Sebastien Audier <[hidden email]>:
> Bonjour tout le monde,
>
> Je cherchais une méthode pour générer toutes les permutations possible d'une
> collection.
> A partir d'une collection, je dois obtenir une collection de collections
> distinctes.
>
> Il y a la méthode permutationsDo:
> Celle-ci est implémenté pour les classes Interval et SequenceableCollection.
>
> Cela fonctionne parfaitement pour Interval, mais pas vraiment pour une
> collection. Le résultat obtenu n'est pas celui auquel je m'attend.
>
> J'ai donc implémenté une méthode temporaire qui invoque la méthode déjà
> présente dans la classe Interval:
>
> permutationsFor: aCollection
> | res |
> res := OrderedCollection new.
> (1 to: (aCollection size)) permutationsDo: [ :each | | temp |
> temp := OrderedCollection new.
> each do: [ :item |
> temp add: (aCollection at: item)].
> res add: temp].
> ^res
>
>
> Pensez-vous qu'il y aurait une meilleur façon de faire ? (plus élégante ou
> qui existe déjà et que j'aurai loupé...)
>
> En vous remerciant par avance,
>
> --
> Sébastien AUDIER
>
> S.A.R.L Objectfusion,
> Applications web, consulting,
> Smalltalk developpement
>
> --
> Vous recevez ce message, car vous êtes abonné au groupe Google Groupes
> "Smalltalk-fr".
> Pour vous désabonner de ce groupe et ne plus recevoir d'e-mails le
> concernant, envoyez un e-mail à l'adresse
> [hidden email].
> Pour obtenir davantage d'options, consultez la page
> https://groups.google.com/d/optout.



--
Serge Stinckwich
UCBN & UMI UMMISCO 209 (IRD/UPMC)
Every DSL ends up being Smalltalk
http://www.doesnotunderstand.org/

--
Vous recevez ce message, car vous êtes abonné au groupe Google Groupes Smalltalk-fr.
Pour vous désabonner de ce groupe et ne plus recevoir d'e-mails le concernant, envoyez un e-mail à l'adresse [hidden email].
Pour plus d'options, visitez le site https://groups.google.com/d/optout .



--
Sébastien AUDIER

S.A.R.L Objectfusion,
Applications web, consulting,
Smalltalk developpement

--
Vous recevez ce message, car vous êtes abonné au groupe Google Groupes "Smalltalk-fr".
Pour vous désabonner de ce groupe et ne plus recevoir d'e-mails le concernant, envoyez un e-mail à l'adresse [hidden email].
Pour obtenir davantage d'options, consultez la page https://groups.google.com/d/optout.
Reply | Threaded
Open this post in threaded view
|

Re: Permutations pour une collection

SergeStinckwich
Il y a cet exemple en commentaire :

'abcde' combinations: 3 atATimeDo: [:each | Transcript cr; show: each
printString]



2014-06-02 18:59 GMT+02:00 Sebastien Audier <[hidden email]>:

> Ok merci Serge, j'avais bien vu cette méthode, mais je n'ai peut-être saisi
> au premier coup d'oeil son bon comportement.
>
> Je vais re-itérer mes essais.
>
> Encore merci,
>
>
> Le 2 juin 2014 18:16, Serge Stinckwich <[hidden email]> a écrit
> :
>>
>> J'ai eu un problème un peu similaire sur les combinaisons d'une
>> collection.
>> J'ai utilisé la méthode combinations: kk atATimeDo: aBlock également
>> définie sur SequenceableCollection.
>>
>>
>>
>> 2014-06-02 17:54 GMT+02:00 Sebastien Audier <[hidden email]>:
>> > Bonjour tout le monde,
>> >
>> > Je cherchais une méthode pour générer toutes les permutations possible
>> > d'une
>> > collection.
>> > A partir d'une collection, je dois obtenir une collection de collections
>> > distinctes.
>> >
>> > Il y a la méthode permutationsDo:
>> > Celle-ci est implémenté pour les classes Interval et
>> > SequenceableCollection.
>> >
>> > Cela fonctionne parfaitement pour Interval, mais pas vraiment pour une
>> > collection. Le résultat obtenu n'est pas celui auquel je m'attend.
>> >
>> > J'ai donc implémenté une méthode temporaire qui invoque la méthode déjà
>> > présente dans la classe Interval:
>> >
>> > permutationsFor: aCollection
>> > | res |
>> > res := OrderedCollection new.
>> > (1 to: (aCollection size)) permutationsDo: [ :each | | temp |
>> > temp := OrderedCollection new.
>> > each do: [ :item |
>> > temp add: (aCollection at: item)].
>> > res add: temp].
>> > ^res
>> >
>> >
>> > Pensez-vous qu'il y aurait une meilleur façon de faire ? (plus élégante
>> > ou
>> > qui existe déjà et que j'aurai loupé...)
>> >
>> > En vous remerciant par avance,
>> >
>> > --
>> > Sébastien AUDIER
>> >
>> > S.A.R.L Objectfusion,
>> > Applications web, consulting,
>> > Smalltalk developpement
>> >
>> > --
>> > Vous recevez ce message, car vous êtes abonné au groupe Google Groupes
>> > "Smalltalk-fr".
>> > Pour vous désabonner de ce groupe et ne plus recevoir d'e-mails le
>> > concernant, envoyez un e-mail à l'adresse
>> > [hidden email].
>> > Pour obtenir davantage d'options, consultez la page
>> > https://groups.google.com/d/optout.
>>
>>
>>
>> --
>> Serge Stinckwich
>> UCBN & UMI UMMISCO 209 (IRD/UPMC)
>> Every DSL ends up being Smalltalk
>> http://www.doesnotunderstand.org/
>>
>> --
>> Vous recevez ce message, car vous êtes abonné au groupe Google Groupes
>> Smalltalk-fr.
>> Pour vous désabonner de ce groupe et ne plus recevoir d'e-mails le
>> concernant, envoyez un e-mail à l'adresse
>> [hidden email].
>> Pour plus d'options, visitez le site https://groups.google.com/d/optout .
>
>
>
>
> --
> Sébastien AUDIER
>
> S.A.R.L Objectfusion,
> Applications web, consulting,
> Smalltalk developpement
>
> --
> Vous recevez ce message, car vous êtes abonné au groupe Google Groupes
> "Smalltalk-fr".
> Pour vous désabonner de ce groupe et ne plus recevoir d'e-mails le
> concernant, envoyez un e-mail à l'adresse
> [hidden email].
> Pour obtenir davantage d'options, consultez la page
> https://groups.google.com/d/optout.



--
Serge Stinckwich
UCBN & UMI UMMISCO 209 (IRD/UPMC)
Every DSL ends up being Smalltalk
http://www.doesnotunderstand.org/

--
Vous recevez ce message, car vous êtes abonné au groupe Google Groupes Smalltalk-fr.
Pour vous désabonner de ce groupe et ne plus recevoir d'e-mails le concernant, envoyez un e-mail à l'adresse [hidden email].
Pour plus d'options, visitez le site https://groups.google.com/d/optout .
Reply | Threaded
Open this post in threaded view
|

Re: Permutations pour une collection

cedreek
ca me rappelle une ancienne discussion puisque j'avais aussi eu cette problématique en devant trouver tous les sous ensemble d'un ensemble...

Peut-être tu y trouveras des infos intéressantes (même si le pb n'est pas tout à fait le même)

http://forum.world.st/Another-extension-proposal-gt-subsets-td107678.html

@+

Cédrick

Le 2 juin 2014 à 19:48, Serge Stinckwich <[hidden email]> a écrit :

> Il y a cet exemple en commentaire :
>
> 'abcde' combinations: 3 atATimeDo: [:each | Transcript cr; show: each
> printString]
>
>
>
> 2014-06-02 18:59 GMT+02:00 Sebastien Audier <[hidden email]>:
>> Ok merci Serge, j'avais bien vu cette méthode, mais je n'ai peut-être saisi
>> au premier coup d'oeil son bon comportement.
>>
>> Je vais re-itérer mes essais.
>>
>> Encore merci,
>>
>>
>> Le 2 juin 2014 18:16, Serge Stinckwich <[hidden email]> a écrit
>> :
>>>
>>> J'ai eu un problème un peu similaire sur les combinaisons d'une
>>> collection.
>>> J'ai utilisé la méthode combinations: kk atATimeDo: aBlock également
>>> définie sur SequenceableCollection.
>>>
>>>
>>>
>>> 2014-06-02 17:54 GMT+02:00 Sebastien Audier <[hidden email]>:
>>>> Bonjour tout le monde,
>>>>
>>>> Je cherchais une méthode pour générer toutes les permutations possible
>>>> d'une
>>>> collection.
>>>> A partir d'une collection, je dois obtenir une collection de collections
>>>> distinctes.
>>>>
>>>> Il y a la méthode permutationsDo:
>>>> Celle-ci est implémenté pour les classes Interval et
>>>> SequenceableCollection.
>>>>
>>>> Cela fonctionne parfaitement pour Interval, mais pas vraiment pour une
>>>> collection. Le résultat obtenu n'est pas celui auquel je m'attend.
>>>>
>>>> J'ai donc implémenté une méthode temporaire qui invoque la méthode déjà
>>>> présente dans la classe Interval:
>>>>
>>>> permutationsFor: aCollection
>>>> | res |
>>>> res := OrderedCollection new.
>>>> (1 to: (aCollection size)) permutationsDo: [ :each | | temp |
>>>> temp := OrderedCollection new.
>>>> each do: [ :item |
>>>> temp add: (aCollection at: item)].
>>>> res add: temp].
>>>> ^res
>>>>
>>>>
>>>> Pensez-vous qu'il y aurait une meilleur façon de faire ? (plus élégante
>>>> ou
>>>> qui existe déjà et que j'aurai loupé...)
>>>>
>>>> En vous remerciant par avance,
>>>>
>>>> --
>>>> Sébastien AUDIER
>>>>
>>>> S.A.R.L Objectfusion,
>>>> Applications web, consulting,
>>>> Smalltalk developpement
>>>>
>>>> --
>>>> Vous recevez ce message, car vous êtes abonné au groupe Google Groupes
>>>> "Smalltalk-fr".
>>>> Pour vous désabonner de ce groupe et ne plus recevoir d'e-mails le
>>>> concernant, envoyez un e-mail à l'adresse
>>>> [hidden email].
>>>> Pour obtenir davantage d'options, consultez la page
>>>> https://groups.google.com/d/optout.
>>>
>>>
>>>
>>> --
>>> Serge Stinckwich
>>> UCBN & UMI UMMISCO 209 (IRD/UPMC)
>>> Every DSL ends up being Smalltalk
>>> http://www.doesnotunderstand.org/
>>>
>>> --
>>> Vous recevez ce message, car vous êtes abonné au groupe Google Groupes
>>> Smalltalk-fr.
>>> Pour vous désabonner de ce groupe et ne plus recevoir d'e-mails le
>>> concernant, envoyez un e-mail à l'adresse
>>> [hidden email].
>>> Pour plus d'options, visitez le site https://groups.google.com/d/optout .
>>
>>
>>
>>
>> --
>> Sébastien AUDIER
>>
>> S.A.R.L Objectfusion,
>> Applications web, consulting,
>> Smalltalk developpement
>>
>> --
>> Vous recevez ce message, car vous êtes abonné au groupe Google Groupes
>> "Smalltalk-fr".
>> Pour vous désabonner de ce groupe et ne plus recevoir d'e-mails le
>> concernant, envoyez un e-mail à l'adresse
>> [hidden email].
>> Pour obtenir davantage d'options, consultez la page
>> https://groups.google.com/d/optout.
>
>
>
> --
> Serge Stinckwich
> UCBN & UMI UMMISCO 209 (IRD/UPMC)
> Every DSL ends up being Smalltalk
> http://www.doesnotunderstand.org/
>
> --
> Vous recevez ce message, car vous êtes abonné au groupe Google Groupes Smalltalk-fr.
> Pour vous désabonner de ce groupe et ne plus recevoir d'e-mails le concernant, envoyez un e-mail à l'adresse [hidden email].
> Pour plus d'options, visitez le site https://groups.google.com/d/optout .

--
Vous recevez ce message, car vous êtes abonné au groupe Google Groupes Smalltalk-fr.
Pour vous désabonner de ce groupe et ne plus recevoir d'e-mails le concernant, envoyez un e-mail à l'adresse [hidden email].
Pour plus d'options, visitez le site https://groups.google.com/d/optout .