J'utilise le module Regexp::Trie de Dan Kogai qui permet d'optimiser la recherche d'alternatives ayant un suffixe (ou une partie) en commun
Les résultats obtenus sont les suivants :
a -> sans utilisation du module Regexp::Trie
b -> avec utilisation du module Regexp::Trie
Perl 5.8 :
perl bench_with_tries.pl
Rate a b
a 552/s -- -98%
b 26050/s 4620% --
Perl 5.10 :
perl bench_with_tries.pl
Rate a b
a 20177/s -- -65%
b 57777/s 186% --
perl bench_with_tries.pl
Rate a b
a 552/s -- -98%
b 26050/s 4620% --
Perl 5.10 :
perl bench_with_tries.pl
Rate a b
a 20177/s -- -65%
b 57777/s 186% --
On voit bien qu'en version 5.8 l'utilisation du module de Dan Kogai permet de multiplier par plus de 40 les performances, contrairement en 5.10 où les performances de base sont déjà satisfaisantes avec plus de 20 000 exécutions par seconde. Cependant, il est toujours utile d'utiliser ce module en 5.10 puisqu'on obtient près de 3 fois plus de performance.
Blogged with the Flock Browser
2 commentaires:
ca serait pas plutôt en o(m) où m est le nombre de caractère de ta pattern ?
En fait, les accès à un Trie se font en 0(m) mais il est possible de représenter un Trie avec des connexions entre des noeuds qui stockent le même caractère par exemple, ce qui permet d'effectuer les comparaisons de N alternatives dans un temps constant, soit en 0(1). Pour plus d'informations sur les optimisations internes, et peut être plus de clarté tu peux jeter un oeil sur http://perldoc.perl.org/perldelta.html#Trie-optimisation-of-literal-string-alternations et http://conferences.mongueurs.net/fpw2009/slides/perl-5.10-2.html
Enregistrer un commentaire