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 :

parcours d'un tableau et suppression d'élements


Sujet :

Langage Perl

  1. #21
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 124
    Points : 94
    Points
    94
    Par défaut
    perso, j'ai telechargé le fichier et le traitement ne dure que quelques secondes
    j'ai coupé la boucle foreach d'affichage des resultats, car ça chauffait.
    sinon j'obtiens ce genre de chose. à voir.
    TCCACAACGATGGAAGATGATGA est la clef et et la taille est 7
    CACTGTTCTTGCAAGACGCAGCTG est la clef et et la taille est 2
    TATGACCCAGCCCTTTTAGAGACACG est la clef et et la taille est 1
    CCTGAAACGAGACGTCTCTGGTAGAA est la clef et et la taille est 1
    GAACGTGGGAACGTGACGTTGGG est la clef et et la taille est 1
    GATTAGAAGCTATAGCTATGTACATTG est la clef et et la taille est 1
    GCGTCGAATATTTAGGATTTATAGTA est la clef et et la taille est 1
    TATTTGATGACCGAAATTTTGACT est la clef et et la taille est 1
    GAATGGACCTGAAGTAATTGTTCGTA est la clef et et la taille est 1
    TACCGCATAAATCACTGGACTTTAAGCC est la clef et et la taille est 1
    TTTTACACCGTGAAATAAAAGATTT est la clef et et la taille est 1
    TATTGTCTATGTTATTTCTGGATGC est la clef et et la taille est 1
    TCTGCTCGTGCGCGTAGCCGCGGA est la clef et et la taille est 1
    TACCGAAAAGAAAAAAAAAAAAA est la clef et et la taille est 1
    TAATTCGTTGAGCCCGAAAAGGGAGA est la clef et et la taille est 1
    TATTGACAATAGTCGAAATGTTGTC est la clef et et la taille est 1
    TCTGAGCGACCGGCATTCCCTCATC est la clef et et la taille est 1
    ATCCACTAAAAAGAAGTTTACTG est la clef et et la taille est 1
    TTTTTTGTTGCCAGCATCGTCGG est la clef et et la taille est 4
    TTTACTCTGCCAGACTACAAGGCTGG est la clef et et la taille est 1
    TACATTTACCACTAATAGGATCCTGGGC est la clef et et la taille est 1
    TTAGCCTCTATGTGTTTCCGCCAGG est la clef et et la taille est 2
    GCTCAGCAAAAAACATTTCTTTTGTGAA est la clef et et la taille est 1
    TAGAAGGTACCTCCAGTTCGTCTATT est la clef et et la taille est 1
    TGTAGACTTGGTCTCCGCACCAG est la clef et et la taille est 6
    TCTAAGCTGGGAGCAGAGGAAGA est la clef et et la taille est 9
    TAGTAAATAAGCATCCGCATGAAG est la clef et et la taille est 2
    TATACAAAGAATTGAAGAGCCGCCT est la clef et et la taille est 1
    CAGGTCCGCTTGGTCAGATTAAT est la clef et et la taille est 7
    CTGGCAAAGGAAGCTGCCTAGATAGGC est la clef et et la taille est 1
    TGGGCTGCTGATGATGTTGATGGC est la clef et et la taille est 1
    TAGTTTTATAAGTATATAGCGCGATT est la clef et et la taille est 2
    ACCTCCGGACTATCTCATTTTGT est la clef et et la taille est 1

  2. #22
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    J'ai lancé un test avec une progressbar :
    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
    31
    32
    33
    34
    #!/usr/bin/perl
     
    use strict;
    use warnings;
     
    use Getopt::Long;
    use Term::ProgressBar;
     
    my ($file_file);
    #$/ = quot;\r\nquot;;
     
    GetOptions(quot;file=squot; =gt; \$file_file);
    open my $FILE, 'lt;', $file_file or die quot;$file_file : $!\n\nquot;;
     
    chomp(my @sort_all_seq = lt;$FILEgt;);
    my $total = scalar(@sort_all_seq);
    print $total, quot; sequences in array : OK !\nquot;;
     
    my $pb = Term::ProgressBar-gt;new({name =gt; quot;Sequencesquot;,
                                     count =gt; $total,
                                     ETA =gt; quot;linearquot; });
    $pb-gt;max_update_rate(1);
    my $next_update = 0;
    my @root_seq;
    my $count = 0;
    while (@sort_all_seq) {
      my $size = @sort_all_seq;
      push @root_seq, my $seq = shift @sort_all_seq;
      @sort_all_seq = grep index($_, $seq) != 0, @sort_all_seq;
      $count += $size - @sort_all_seq;
      $next_update = $pb-gt;update($count);
    }
    print quot;Root sequences :\nquot;, map quot;$_\nquot;,@root_seq, quot;\nquot;;
    $pb-gt;update($total);
    A ce soir, je pars en formation.
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  3. #23
    Membre régulier
    Inscrit en
    Janvier 2010
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 257
    Points : 81
    Points
    81
    Par défaut
    [QUOTE=vidici;7991273]
    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    use warnings;
    use feature qw /say/;
    my @sort_all_seq = split /\s+/, 
    quot;AAAACCCGAAACCGTTTAGCTGT
    AAAAACCCGAAACCGTTTAGCTGT
    AAAACCCGAAACCGTTTAGCTGTT
    AAAACCCGAAACCGTTTAGCTGTTC
    AAAACCCGAAACCGTTTAGCTGTTT
    AAAACCCGAAACCGTTTAGCTGTTCT
    AGAAAAACCCGAAACCGTTTAGCTGT
    AAAACCCGAAACCGTTTAGCTGTTCTC
    AAAACCCGAAACCGTTTAGCTGTTCTCC
    AAAACCCGAAACCGTTTAGCTGTTCTCCG
    ATAACCCGAAACCGTTTAGCTGTTCTCCGquot;;
    my @result = @sort_all_seq;
                my %tout;
                foreach my $v (@sort_all_seq){
                my $n = length($v); 
                my $s = $v;
                for (my $var = $n; $var gt; 0; $var--) {
     
                        $s = substr($s,0,$var);
                        if ( (exists( $tout{$s} ))) {
                                my @tob = $tout{$s};
                                push($tob[0], $v);
                                #unshift @sort_all_seq;
                                last;
                        }   
                }   
                if ( (!exists( $tout{$s} ))) {
                my @tab;
                push(@tab, $v);
                $tout{$v} = [@tab];
        }
     
        }   
        foreach my $k (keys(%tout)) {
           my @valeur=$tout{$k};
           my $long = @{$valeur[0]};
           print quot;$k est la clef et et la taille est  $long\nquot;;
           my $a1 = ${valeur}[0][0];
           my $a2 = ${valeur}[0][1];
           my $a3 = ${valeur}[0][2];
           my $a4 = ${valeur}[0][3];
           if ($a1) {say $a1, quot; valeur 1quot;;}
           if ($a2) {say $a2, quot; valeur 2quot;;}
           if ($a3) {say $a3, quot; valeur 3quot;;}
           if ($a4) {say $a4, quot; valeur etcquot;;}
           say $long;
           }
    J'ai une erreur lorsque j'execute votre script :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Type of arg 1 to push must be array (not array element) at smaller_family_test.pl line 27, near quot;$v)quot;
    Execution of smaller_family_test.pl aborted due to compilation errors.

  4. #24
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2013
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2013
    Messages : 247
    Points : 406
    Points
    406
    Par défaut
    Citation Envoyé par Isabella83 Voir le message
    OK
    Mais j'ai toujours l'erreur que je ne comprends pas
    est-ce que tu as bien fait l'initialisation: my $taille = 10000000000;

  5. #25
    Membre régulier
    Inscrit en
    Janvier 2010
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 257
    Points : 81
    Points
    81
    Par défaut
    Citation Envoyé par 6ril23 Voir le message
    est-ce que tu as bien fait l'initialisation: my $taille = 10000000000;

    Oui, j'ai fait copié collé :

    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
    #!/usr/bin/perl
     
    use warnings;
    use Getopt::Long;
     
     
    GetOptions(quot;file=squot; =gt; \$file_file); 
    open(my $file,'lt;',$file_file) or die quot;$file_file : $!\n\nquot;;
     
    my $taille = 10000000000;
    my $reference;
    my @Seq_conservee;
    while (lt;$filegt;){
         my $ligne = $_;
         $ligne =~ s/\s+$//;
         if ( $taille lt; length($ligne) ){
              $reference = $ligne;
              push( @Seq_conservee, $ligne );
         }
         else{
              if ( $ligne !~ /^$reference/ ){
                   push( @Seq_conservee, $ligne );
              }
         }
         $taille = length($ligne);
    }
     
    foreach (@Seq_conservee){
    	print quot;$_\nquot;;
    }

  6. #26
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 124
    Points : 94
    Points
    94
    Par défaut
    voici le code comme il tourne chez moi exactement, c'est testé
    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
    31
    32
    33
    34
    35
     
    #!/usr/bin/perl5.16
    use strict;
    use warnings;
    use feature qw /say/;
    my $ad=quot;/Users/mac/Produits/sorted.txtquot;;
    open my $FILE, 'lt;', $ad or die quot;$ad : $!\n\nquot;;
    chomp(my @sort_all_seq = lt;$FILEgt;);
    my @result = @sort_all_seq;
                my %tout;
                foreach my $v (@sort_all_seq){
                my $n = length($v); 
                my $s = $v;
                for (my $var = $n; $var gt; 0; $var--) {
     
                        $s = substr($s,0,$var);
                        if ( (exists( $tout{$s} ))) {
                                my @tob = $tout{$s};
                                push($tob[0], $v);
                                #unshift @sort_all_seq;
                                last;
                        }
                } 
                if ( (!exists( $tout{$s} ))) {
                my @tab;
                push(@tab, $v);
                $tout{$v} = [@tab];
        }
     
        }
        foreach my $k (keys(%tout)) {
           my @valeur=$tout{$k};
           my $long = @{$valeur[0]};
           print quot;$k est la clef et et la taille est  $long\nquot;;
           }

  7. #27
    Membre régulier
    Inscrit en
    Janvier 2010
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 257
    Points : 81
    Points
    81
    Par défaut
    Citation Envoyé par vidici Voir le message
    voici le code comme il tourne chez moi exactement, c'est testé
    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
    31
    32
    33
    34
    35
     
    #!/usr/bin/perl5.16
    use strict;
    use warnings;
    use feature qw /say/;
    my $ad=quot;/Users/mac/Produits/sorted.txtquot;;
    open my $FILE, 'lt;', $ad or die quot;$ad : $!\n\nquot;;
    chomp(my @sort_all_seq = lt;$FILEgt;);
    my @result = @sort_all_seq;
                my %tout;
                foreach my $v (@sort_all_seq){
                my $n = length($v); 
                my $s = $v;
                for (my $var = $n; $var gt; 0; $var--) {
     
                        $s = substr($s,0,$var);
                        if ( (exists( $tout{$s} ))) {
                                my @tob = $tout{$s};
                                push($tob[0], $v);
                                #unshift @sort_all_seq;
                                last;
                        }
                } 
                if ( (!exists( $tout{$s} ))) {
                my @tab;
                push(@tab, $v);
                $tout{$v} = [@tab];
        }
     
        }
        foreach my $k (keys(%tout)) {
           my @valeur=$tout{$k};
           my $long = @{$valeur[0]};
           print quot;$k est la clef et et la taille est  $long\nquot;;
           }
    C'est peut être un problème de version car moi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    This is perl, v5.10.1 (*) built for x86_64-linux-gnu-thread-multi
    et j'ai toujours la même erreur avec le script

  8. #28
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 124
    Points : 94
    Points
    94
    Par défaut
    #!/usr/bin/perl5.16
    change l'invite par ton invite habituelle

  9. #29
    Membre régulier
    Inscrit en
    Janvier 2010
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 257
    Points : 81
    Points
    81
    Par défaut
    Citation Envoyé par vidici Voir le message
    #!/usr/bin/perl5.16
    change l'invite par ton invite habituelle
    Oui c'est déjà fait !
    J'ai testé avec ça :
    ça tourne ...
    Et c'est OK ! ça fonctionne !

  10. #30
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 124
    Points : 94
    Points
    94
    Par défaut
    Citation Envoyé par Isabella83 Voir le message
    Oui c'est déjà fait !
    J'ai testé avec ça :
    ça tourne ...
    oui mais ou ? il ya tob et tab
    c'est bizarre, j'ai vraiment fait le copier du code que j'emploie.

  11. #31
    Membre régulier
    Inscrit en
    Janvier 2010
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 257
    Points : 81
    Points
    81
    Par défaut
    Citation Envoyé par vidici Voir le message
    oui mais ou ?
    A la ligne 18.
    C'est bon ça fonctionne du coup ! Merci !
    Je vais faire quelques tests !

  12. #32
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 124
    Points : 94
    Points
    94
    Par défaut
    Citation Envoyé par Isabella83 Voir le message
    Oui c'est déjà fait !
    J'ai testé avec ça :
    bon , j'ai pareil
    ça tourne ...
    Et c'est OK ! ça fonctionne !

  13. #33
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 469
    Points
    12 469
    Billets dans le blog
    1
    Par défaut
    Bonsoir Isabella,

    Après avoir pris connaissance de ton fichier et mieux compris ce que tu voulais faire, je me suis rendu compte que je pouvais utiliser (en le modifiant à peine) l'algo que j'utilise régulièrement pour faire du dédoublonnage. Il implique de trier préalablement le fichier par ordre alphabétique, ce qui m'a pris environ 14 secondes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $ time sort genetic.txt gt; genetic_sorted.txt
     
    real    0m14.292s
    user    1m8.422s
    sys     0m0.327s
    Ensuite, en 10 lignes de code très simples et pratiquement zéro occupation mémoire, puisque je n'utilise aucun des tableaux précédemment utilisés mais traite les enregistrements du fichier au fil de l'eau (donc ça fonctionnera pareil avec des fichiers 10 ou 100 fois plus gros, pas de risque d'erreur de type "out of memory)):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    use strict;
    use warnings;
     
    my $old_val = quot;ZZquot;;
    while (my $value = lt;gt;) {
    	next unless index $value, $old_val;
    	print $value;
    	$old_val = $value;
    	chomp $old_val
    }
    Exécution chronométrée:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $ time perl tableau_genes.pl genetic_sorted.txt gt; genetic_result.txt
     
     
    real    0m1.230s
    user    0m1.107s
    sys     0m0.109s
    Donc, 1,2 seconde pour obtenir le résultat (exécuté sur mon portable, pas sur un gros serveur ou une bécane de compétition). A toi de vérifier si c'est correct, mais il me semble que c'est le cas. En tous cas, le fichier résultat est environ 30% plus petit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    $ ls -lrt genetic_*.txt
     
    -rw-r--r-- 1 Laurent None 87588972  8 oct.  23:20 genetic_sorted.txt
    -rw-r--r-- 1 Laurent None 55701458  8 oct.  23:22 genetic_result.txt
     
    $ wc genetic_*.txt
     
      2130535   2130535  55701458 genetic_result.txt
      3305904   3305904  87588972 genetic_sorted.txt
      5436439   5436439 143290430 total
    Il est même possible de le faire avec un script uniligne à la ligne de commande du shell:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $ time perl -ne 'BEGIN {$o = quot;Zquot;;} next unless index $_, $o; print; chomp; $o = $_;' genetic_sorted.txt gt; genetic_result.txt
     
    real    0m1.320s
    user    0m1.185s
    sys     0m0.233s
    (Sous Windows, remplacer les " par des ' et réciproquement).

  14. #34
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 124
    Points : 94
    Points
    94
    Par défaut
    alors dans un sain esprit de compétition, voilà ce que j'obtiens
    sans tri alphabétique sur le fichier, mais bien sur trié selon grandeur des gènes du plus petit au plus grand.
    ce qui était déjà fait.

    moosebis: time perl genes.pl sorted.txt > genetic_result.txt

    real 1m6.282s
    user 1m3.159s
    sys 0m1.977s
    moosebis: wc genetic_result.txt
    2130535 2130535 55701458 genetic_result.txt
    moosebis: wc sorted.txt
    3305904 3305904 87588972 sorted.txt
    moosebis:
    en ayant modifié le script comme ceci
    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
    31
    32
    use strict;
      3 use warnings;
      4 use feature qw /say/;
      5 #my $ad=quot;/Users/mac/Produits/sorted.txtquot;;
      6 #open my $FILE, 'lt;', $ad or die quot;$ad : $!\n\nquot;;
      7 #chomp(my @sort_all_seq = lt;$FILEgt;);
      8 #my @result = @sort_all_seq;
      9             my %tout;
     10             #foreach my $v (@sort_all_seq){
     11             while (my $v = lt;gt;)     
     12                     {
     13                             chomp $v;
     14             my $n = length($v);
     15             my $s = $v;
     16             for (my $var = $n; $var gt; 0; $var--) {
     17                     
     18                     $s = substr($s,0,$var); 
     19                     if ( (exists( $tout{$s} ))) {
     20                             my @tob = $tout{$s};
     21                             push($tob[0], $v);
     22                             #unshift @sort_all_seq;
     23                             last;
     24                     }
     25             }  
     26             if ( (!exists( $tout{$s} ))) {
     27                     say $v;
     28             my @tab;
     29             push(@tab, $v);
     30             $tout{$v} = [@tab];
     31     }
     32             
     33     }

  15. #35
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 469
    Points
    12 469
    Billets dans le blog
    1
    Par défaut
    Bah, les performances, entre 1,6 et 1,2 seconde, je m'en fiche, d'autant que nous n'avons sans doute pas le même matériel et qu'elles ne sont donc donc probablement pas comparables. Je ne donnais les durées d'exécution que pour indiquer que c'était vraiment très très court par rapport aux algos dérivés du programme initial d'Isabella.

    En revanche, tu obtiens moins de lignes de résultat que moi, et là, c'est nettement plus gênant, car ça veut dire que nos implémentations ne sont pas isofonctionnelles et que l'un au moins de nos programmes ne fonctionne pas correctement. Mais je n'aurai pas le temps de me pencher là dessus aujourd'hui.

  16. #36
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 124
    Points : 94
    Points
    94
    Par défaut
    Citation Envoyé par Lolo78 Voir le message
    En revanche, tu obtiens moins de lignes de résultat que moi, et là, c'est nettement plus gênant,
    bah moi: 2130535 2130535 55701458 genetic_result.txt
    toi : 2130535 2130535 55701458 genetic_result.txt

    je ne vois pas de difference. Et c'est bien ce qui me fait plaisir.
    et si à l'occasion , quand t'auras le temps, tu pourrais réécrire mon code à ta manière.
    si tu veux.
    bonne journée

  17. #37
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2013
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2013
    Messages : 247
    Points : 406
    Points
    406
    Par défaut
    Je préfère le traitement "au fil de l'eau" car il permet de ne pas rencontrer de problème quand les fichiers deviennent très gros, et en bioinfo ils le sont souvent...
    Ma méthode doit fonctionner aussi si on prend le fichier trié par ordre aphabétique uniquement (mais laisse-le de côté car tu as déjà 2 scripts qui fonctionnent alors ne repars pas sur un troisième non testé)

  18. #38
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 469
    Points
    12 469
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par vidici Voir le message
    bah moi: 2130535 2130535 55701458 genetic_result.txt
    toi : 2130535 2130535 55701458 genetic_result.txt

    je ne vois pas de difference. Et c'est bien ce qui me fait plaisir.
    et si à l'occasion , quand t'auras le temps, tu pourrais réécrire mon code à ta manière.
    si tu veux.
    Tu as raison, j'ai regardé trop vite et comparé taille en octets et nombre de lignes ou quelque chose comme cela.

    J'essaierai de regarder ce soir pour ton code, mais j'ai une réunion de mon club photo, donc pas trop sûr d'avoir le temps.

    Bonne journée.

  19. #39
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 469
    Points
    12 469
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par vidici Voir le message
    et si à l'occasion , quand t'auras le temps, tu pourrais réécrire mon code à ta manière.
    si tu veux.
    Alors j'ai essayé ton code, chez moi, il tourne en 44 secondes. Tu as quoi comme bécane de course? Du coup, peux-tu essayer le mien (le fichier doit être trié par ordre alphabétique)?

    J'ai essayé d'adapter ton code pour lire le fichier au fil de l'eau, mais je ne peux supprimer le fait que tu charges tout le résultat dans le hash %tout, car il est central à l'algo.

    Cela donne ceci:

    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
    31
    32
    33
    34
    35
    #!/usr/bin/perl
    use strict;
    use warnings;
    use feature qw /say/;
    my $ad=quot;genetic.txtquot;;
    open my $FILE, 'lt;', $ad or die quot;$ad : $!\n\nquot;;
    # chomp(my @sort_all_seq = lt;$FILEgt;);
    # my @result = @sort_all_seq;  # Nota: @result ne sert à aucun moment dans ton code d'origine, 
    my %tout;
    # foreach my $v (@sort_all_seq){
    while (my $v = lt;$FILEgt;) {
         chomp $v;
         my $n = length($v); 
         my $s = $v;
         for (my $var = $n; $var gt; 0; $var--) {
             $s = substr($s,0,$var);
             if ( (exists( $tout{$s} ))) {
                 my @tob = $tout{$s};
                 push($tob[0], $v);
                 last;
             }
         } 
         if ( (!exists( $tout{$s} ))) {
              my @tab;
              push(@tab, $v);
              $tout{$v} = [@tab];
         }
     
    }
        foreach my $k (keys(%tout)) {
           #my @valeur=$tout{$k};
           #my $long = @{$valeur[0]};
           #print quot;$k est la clef et et la taille est  $long\nquot;;
           print quot;$k\nquot;;
    }
    Là, ça tourne un peu plus vite:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $ time perl genes_vidici.pl  gt; vidici_result.txt
     
    real    0m40.350s
    user    0m39.327s
    sys     0m1.013s
    Les résultats sont identiques.

  20. #40
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 124
    Points : 94
    Points
    94
    Par défaut
    Citation Envoyé par Lolo78 Voir le message
    Alors j'ai essayé ton code, chez moi, il tourne en 44 secondes. Tu as quoi comme bécane de course? Du coup, peux-tu essayer le mien (le fichier doit être trié par ordre alphabétique)?
    'ai un macbook d'occas que j'ai payé 400 euros (un inter core deux duo). Mais je ne suis pas d'accord avec ton analyse. En fait tu prend la première version du script qui servait à l'affichage des resultats complets ( les clés et ce qu'elles contiennent). Pour tenter de rivaliser avec ton script j'ai viré la boucle d'affichage, et placé un say directement dans l'algo de traitement pour produire le fichier résultat (je m'était inspiré de ton code pour ça), ce qui enlève du coup tout le traitement de la boucle foreach qui est très longue.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #!/usr/bin/perl
     
         if ( (!exists( $tout{$s} ))) {
    say $v;
              my @tab;
              push(@tab, $v);
              $tout{$v} = [@tab];
         }
    Merci de t'être penché sur mon code, après cette mise au point je vais étudié ça.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 3 PremièrePremière 123 DernièreDernière

Discussions similaires

  1. [Tableaux] Parcours d'un tableau
    Par wormseric dans le forum Langage
    Réponses: 2
    Dernier message: 31/10/2006, 13h53
  2. [MySQL] Parcours d'un tableau et suppression des entrées
    Par padoberg dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 18/07/2006, 13h41
  3. probleme de parcours d'un tableau
    Par rodriguez_du35 dans le forum Langage
    Réponses: 4
    Dernier message: 29/05/2006, 09h16
  4. parcours d un tableau de l interface graphique
    Par natasha84 dans le forum MFC
    Réponses: 7
    Dernier message: 26/05/2006, 23h29
  5. Parcour d un tableau dynamique
    Par harris_macken dans le forum Débuter
    Réponses: 12
    Dernier message: 24/05/2005, 22h23

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