IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Perl Discussion :

OCCURENCE possible d'une liste


Sujet :

Langage Perl

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2006
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 33
    Points : 18
    Points
    18
    Par défaut OCCURENCE possible d'une liste
    Bonjour je voudrais faire un petit script perl mais je ne sais comment arriver au resultat voulu.

    j'ai une liste contenant des nombres ou des lettres je voudrais savoir
    @lettres = (a..z);
    @numeros = (1..10);

    comment obtenir les listes possible contenant n=nombre de la liste mais avec l'ensemble des nombres de la liste
    si n=3,je devrais avoir
    1 2 3
    1 3 4
    1 4 5
    ..
    2 3 5
    ..
    9 10 1
    ..
    de meme si n=5

    1 2 3 4 5
    1 6 7 8 9
    ..
    8 9 10 1 2
    ..

    Quelqu un pourrait-il m'aider, ou meme me donner un debut d'idee par ou commencer merci

  2. #2
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Tu as une liste de n valeurs et tu veux récupérer tous les ensembles possibles de x valeurs contenues dans cette liste? Peut-être avec une fonction récursive.
    -- Jasmine --

  3. #3
    Membre confirmé Avatar de iblis
    Inscrit en
    Janvier 2007
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 57

    Informations forums :
    Inscription : Janvier 2007
    Messages : 510
    Points : 570
    Points
    570
    Par défaut
    Que veux-tu faire de tes combinaisons ? A moins qu'il ne s'agisse d'un exercice, je ne vois pas l'intérêt.

    Si n vaut 10, tu auras 3 628 800 combinaisons possibles et dans ce cas une fonction récursive va te consommer beaucoup de mémoire. Selon ce que tu veux faire de tes combinaisons, il y a plusieurs façon d'aborder le problème de manière économe.

    C'est plutôt une question d'algorithmique. Qu'as-tu tenté ? Où bloques-tu ? As-tu un bout de code ?

  4. #4
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Si ce n'est pas un exercice, il y a déjà des modules sur le CPAN qui font ça très bien, sans doute mieux que ce que tu saurais faire.

    --
    Jedaï

  5. #5
    Membre à l'essai
    Inscrit en
    Mai 2006
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 33
    Points : 18
    Points
    18
    Par défaut
    Citation Envoyé par Jasmine80 Voir le message
    Tu as une liste de n valeurs et tu veux récupérer tous les ensembles possibles de x valeurs contenues dans cette liste? Peut-être avec une fonction récursive.
    Merci je vais chercher dans ce sens.

    Citation Envoyé par Jedai Voir le message
    Si ce n'est pas un exercice, il y a déjà des modules sur le CPAN qui font ça très bien, sans doute mieux que ce que tu saurais faire.

    --
    Jedaï
    Ce n'est pas vraiment un excercice, c'est pour ajouter a un script d'extraction de donner dans un fichier dans lequel je voudrais lui dire de ne pas prendre certaine valeur contenue dans une listes mais merci pour ton aide
    Pourrais tu preciser les modules sur le CPAN dont tu parles

  6. #6
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Citation Envoyé par snufx
    je voudrais lui dire de ne pas prendre certaine valeur contenue dans une listes
    Je ne vois pas trop le rapport entre ta question initiale et ce que tu expliques

    Peut-être peux-tu utiliser la fonction 'none' de List::MoreUtils pour vérifier si la valeur récupérée est bien absente de ta liste.
    -- Jasmine --

  7. #7
    Membre à l'essai
    Inscrit en
    Mai 2006
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 33
    Points : 18
    Points
    18
    Par défaut
    Super les fonctions recurcive mais celle la marche pas

    Quelqu'un pourrait me dire pourquoi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    &AjouteUn(10,11);
     
    sub AjouteUn {
    	my (@args) = @_;
    	foreach $element (@args){
    	$element .= '1';
    	}
    	return(@args);
    }
    Si vous avez des exemples de fonction recursive pourriez vous les partager car il y a tres peu d'exemple dessus et j'aimerais apprendre a m'en servir correctement merci

  8. #8
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Pour ce qui est de ta fonction, elle fonctionne très bien ^^ néanmoins sans récupérer le résultat, je comprends que tu aies l'impression qu'elle ne fait rien.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    my @return = &AjouteUn(10,11);

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    my @return = &AjouteUn(10,11);
     
    map {print "$_\n"} @return;
     
    sub AjouteUn {
    	my (@args) = @_;
    	foreach $element (@args){
    		$element .= '1';
    	}
    		return(@args);
    }

    Mais ce n'est pas une fonction récursive

    Du point de vue de la programmation, une fonction récursive est une fonction, au sens informatique de ce terme, qui peut s'appeler elle-même au cours de son exécution.
    voici un exemple simple de fonction récursive
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    #!/usr/bin/perl
     
    use strict;
     
    my $int = 0;
    my $max = 1000;
     
     
    sub Add50{
     
        my $int = $_[0];
     
        $int+=50;
     
        if($int <= $max){
            print "$int\n";
            $int += Add50($int);
        }
     
    }
     
    Add50($int);

    N'as-tu rien trouvé sur le CPAN, comme Jedai te l'a suggéré? Ce genre de module doit exister
    -- Jasmine --

  9. #9
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Le module auquel je pensais était Algorithm::Combinatorics, mais je ne suis pas sûr qu'il aide beaucoup notre visiteur vu que celui-ci ne semble pas vraiment savoir ce qu'il veut bien précisément...

    --
    Jedaï

  10. #10
    Membre à l'essai
    Inscrit en
    Mai 2006
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 33
    Points : 18
    Points
    18
    Par défaut
    Merci a vous mais je veux un peu chercher il est vrai que je ne trouverai peut etre pas la reponse mais en cherchant avec les idees que vous m'avez donner, j'essayerais de produire quelque chose et je verrais apres avec vous ou ameliorer le script.

  11. #11
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Avant de commencer à coder, je te conseille de bien réfléchir à ce que tu veux et d'écrire les différentes étapes noir sur blanc.
    -- Jasmine --

  12. #12
    Membre à l'essai
    Inscrit en
    Mai 2006
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 33
    Points : 18
    Points
    18
    Par défaut
    Pour clarifier ma demande est bien de

    récupérer tous les ensembles possibles (combinaison) de x valeurs contenues dans une liste

  13. #13
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    C'est juste que je ne vois pas l'intérêt de générer toutes ces listes si ton but est le suivant ...
    Citation Envoyé par snufx Voir le message
    c'est pour ajouter a un script d'extraction de donner dans un fichier dans lequel je voudrais lui dire de ne pas prendre certaine valeur contenue dans une listes
    ... enfin, tu sais mieux que moi de quoi tu parles, il n'y a plus qu'à te mettre à coder dans ce cas.
    -- Jasmine --

  14. #14
    Membre à l'essai
    Inscrit en
    Mai 2006
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 33
    Points : 18
    Points
    18
    Par défaut
    Google est ton ami
    ceci a l'air pas mal

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    my @nb = (10..13);
    my $nombre=4;
     
    my $compteur=1;
    while ($compteur <= $nombre){
              $compteur++;
    }
     
     
    sub permutation {
    	#print "@_\n";
    	my @chaine   = @{ $_[0] };
    	my @permuter = @{ $_[1] };
    	#print "@chaine\n";
     
    	unless (@chaine) {
    		print "@permuter\n";
    	}else{
    		my (@chaine_, @permuter_, $i);
    		foreach $i (0..$#chaine){
                    	@chaine_   = @chaine;
                    	@permuter_ = @permuter		   ;
    			unshift (@permuter_, splice(@chaine_,$i,1));
    			permutation ( [@chaine_], [@permuter_])    ;
    		}
    	}
    }
     
    permutation ([@nb], []);
    j'ai juste deux questions

    1er : comment avoir le meme resultat avec x valeur de la liste
    la j'ai definit 4 valeurs à @nb

    2e :la plus utile,pourriez vous donner une explication à la fonction "sub permutation".

  15. #15
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Citation Envoyé par snufx Voir le message
    Pour clarifier ma demande est bien de

    récupérer tous les ensembles possibles (combinaison) de x valeurs contenues dans une liste
    Je répète que si c'est vraiment ce que tu veux alors tu ferais bien mieux d'utiliser Algorithm::Combinatorics plutôt qu'une fonction récupérée par Google que tu ne comprends pas.

    --
    Jedaï

  16. #16
    Membre à l'essai
    Inscrit en
    Mai 2006
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 33
    Points : 18
    Points
    18
    Par défaut
    Citation Envoyé par Jedai Voir le message
    Je répète que si c'est vraiment ce que tu veux alors tu ferais bien mieux d'utiliser Algorithm::Combinatorics plutôt qu'une fonction récupérée par Google que tu ne comprends pas.

    --
    Jedaï
    ok j'y jette un oeil de suite

  17. #17
    Membre à l'essai
    Inscrit en
    Mai 2006
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 33
    Points : 18
    Points
    18
    Par défaut
    En installant "Algorithm-combinatorics" avec ppm

    j'ai cette erreur quand je lance le script ca te dit quelque chose Jedai
    Can't load 'H:/Perl/site/lib/auto/Algorithm/Combinatorics/Combinatorics.dll' for
    module Algorithm::Combinatorics: load_file:La procÚdure spÚcifiÚe est introuvab
    le at H:/Perl/site/lib/XSLoader.pm line 64.
    at H:/Perl/site/lib/Algorithm/Combinatorics.pm line 9
    Compilation failed in require at J:\scripts\280109\algorithm.pl line 8.
    BEGIN failed--compilation aborted at J:\scripts\280109\algorithm.pl line
    8.

  18. #18
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    505
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Août 2008
    Messages : 505
    Points : 712
    Points
    712
    Par défaut
    D'accord. Tu cherches l'ensemble des sous-ensembles de cardinalité x, avec x <= n (n étant la cardinalité de l'ensemble source). C'est ça ?

    Ca ne parait pas très compliqué. Potentiellement, c'est très gros par contre. En fait, ça doit même être Comb(x,n), non ?

    Et si l'on suit le conseil de jedai, ca doit etre la fonction tuples de Algorithm::Combinatorics

  19. #19
    Membre à l'essai
    Inscrit en
    Mai 2006
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 33
    Points : 18
    Points
    18
    Par défaut
    La solution propose par jedai semble fonctionner mais j'ai un probleme avec le resultat pourriez vous m'aider
    voici le script :
    use strict;
    use warnings;
    use Algorithm::Combinatorics qw(permutations);

    my @data = qw(a b c);

    my $iter = permutations(\@data);
    while (my $p = $iter->next) {
    print "$p\n";
    }
    my @all_permutations = permutations(\@data);
    print "@all_permutations\n";
    le resultat obtenue est le suivant:
    ARRAY(0x19b9ce8)
    ARRAY(0x19b9cf4)
    ARRAY(0x19b9d00)
    ARRAY(0x19b9d0c)
    ARRAY(0x235ffc)
    ARRAY(0x19b9ce8)
    ARRAY(0x19b9ec8) ARRAY(0x19b9f28) ARRAY(0x19b9f64) ARRAY(0x19b9fa0) ARRAY(0x19b9
    fdc) ARRAY(0x19ba018)
    mon soucis est que j'arrive pas a avoir la valeur au bon format :
    j'ai tente ca
    my $iter1 = permutations(\@data);
    print "$iter1\n";
    my $elements = @$iter1;
    print "$elements\n";
    ca marche mais pour la variable $p et @all_permutations je n'y arrive pas

  20. #20
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    my $iter = permutations(\@data);
    while (my $p = $iter->next) {
      print "@{$p}\n";
    }
    $p contient une référence vers ton tableau. Pour déférencer, utilise @{}.
    FAQ : références

    Si j'ai bien compris ce que tu veux faire, c'est de la fonction combinations(\@data, $k) dont tu as besoin.
    -- Jasmine --

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 7
    Dernier message: 23/01/2013, 10h54
  2. trouver tous les arrangement possible d'une liste
    Par ju_bicycle dans le forum Général Python
    Réponses: 2
    Dernier message: 31/01/2012, 14h52
  3. Procéder toutes les permutations possibles d'une liste
    Par supergrey dans le forum Mathématiques
    Réponses: 3
    Dernier message: 21/10/2011, 15h08
  4. Ajouter une occurence de symbole à une liste scrollable
    Par remilafouine dans le forum Flash
    Réponses: 5
    Dernier message: 28/06/2007, 08h31
  5. algorithme pour enlever les occurences d'une liste
    Par bendenice dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 08/02/2006, 23h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo