[Rio-pm] Performance

Marco Lima braun.lima em gmail.com
Sexta Fevereiro 20 15:47:05 PST 2009


Se a idéia é selecionar o grupo que não faz match e trabalhar com ele ...
assim tb poderia ser:

$regexp = join('|', em re);
@selected = grep !/^($regexp)$/, @paths;

Apenas mais uma maneira de fazer!! =P

2009/2/20 Marco Lima <braun.lima em gmail.com>

> Salve isso dá até um Golf =P
>
> foreach $path (@paths) {
>     next if map { $path =~ m/^$_$/g } @re;
> }
>
> 2009/2/20 Lindolfo Lorn Rodrigues <lorn.br em gmail.com>
>
> O Benchmark não mente :) Fernando++
>>
>> 2009/2/20 Fernando Oliveira <fernandocorrea em gmail.com>
>>
>>> pois é...
>>>
>>> perl -MBenchmark=cmpthese -e '
>>>
>>> @a = map {"a$_"."b"} 1 .. 150_000;
>>>
>>> @b = "a" .. "e";
>>>
>>> sub a{
>>>    for my $a (@a){
>>>       for my $b (@b){
>>>          next if $a =~ /^$b/;
>>>       }
>>>    }
>>> }
>>>
>>>
>>> sub b{
>>>    for my $a (@a){
>>>       next if $a =~ /^a/;
>>>       next if $a =~ /^b/;
>>>       next if $a =~ /^c/;
>>>       next if $a =~ /^d/;
>>>       next if $a =~ /^e/;
>>>    }
>>> }
>>>
>>>
>>> cmpthese(50, {a => \&a, b => \&b});
>>> '
>>>     s/iter     a     b
>>> a     3.40    --  -98%
>>> b 6.44e-02 5175%    --
>>>
>>>
>>>
>>>
>>> 2009/2/20 Lucas Mateus <lucasmateus.oliveira em gmail.com>
>>>
>>>> Brother, pode ate ser que isso traria um custo, mas não justifica esses
>>>> numeros:
>>>>
>>>> EXEMPLO_1: 10.000 paths/17seg
>>>> EXEMPLO_2: 750.000 paths/22seg
>>>>
>>>> DETALHES: SO RH5 64, 8 GB RAM, 2 Proc Quad Xeon
>>>>
>>>>
>>>>
>>>> On Fri, 20 Feb 2009 15:17:24 -0300, Fernando Oliveira <
>>>> fernandocorrea em gmail.com> wrote:
>>>>
>>>>  Vc está usando um map em contexto void, o map guarda o array de
>>>>> resposta na
>>>>> memoria...
>>>>>
>>>>> 2009/2/20 Lucas Mateus <lucasmateus.oliveira em gmail.com>
>>>>>
>>>>>  Estou em uma situação prática em que tenho um ARRAY com 750.000 itens,
>>>>>> cada
>>>>>> item deve se submeter a 60 RegExp, obtendo match faço um next.
>>>>>>
>>>>>> Os dois codigos abaixo (o mais simples que consegui representar) fazem
>>>>>> a
>>>>>> mesma coisa, porem o EXEMPLO_1 tem performance extremamente inferior
>>>>>> que o
>>>>>> EXEMPLO_2.
>>>>>>
>>>>>> Gostaria de saber dos Mongers justificativa para isso. Seria a RegExp
>>>>>> dinâmica ?
>>>>>>
>>>>>>
>>>>>>
>>>>>> EXEMPLO_1
>>>>>> [code]
>>>>>>
>>>>>> my @re;    # lista de RegExp 60 itens
>>>>>> my @paths; # lista de Paths 750.000 itens
>>>>>>
>>>>>> foreach my $path (@paths)
>>>>>> {
>>>>>>  map
>>>>>>  {
>>>>>>     if ($path =~ /^$_$/)
>>>>>>     {
>>>>>>         next;
>>>>>>     }
>>>>>>  } @re
>>>>>> }
>>>>>>
>>>>>> [/code]
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> EXEMPLO_2
>>>>>> [code]
>>>>>> my @paths; # lista de Paths 750.000 itens
>>>>>>
>>>>>> foreach my $path (@paths)
>>>>>> {
>>>>>>  next if ($path =~ /^regex_1$/);
>>>>>>  next if ($path =~ /^regex_2$/);
>>>>>>  next if ($path =~ /^regex_3$/);
>>>>>>  next if ($path =~ /^regex_4$/);
>>>>>>  .
>>>>>>  .
>>>>>>  .
>>>>>>  next if ($path =~ /^regex_60$/);
>>>>>> }
>>>>>>
>>>>>> [/code]
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>> Lucas Mateus
>>>>>> Núcleo de Páginas Rápidas e SEO
>>>>>> Fone: 55 11 3065-9978
>>>>>> MSN: lucasmateus_777 em hotmail.com
>>>>>> _______________________________________________
>>>>>> Rio-pm mailing list
>>>>>> Rio-pm em pm.org
>>>>>> http://mail.pm.org/mailman/listinfo/rio-pm
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>> --
>>>> Lucas Mateus
>>>> iG - Núcleo de Páginas Rápidas e SEO
>>>>
>>>> Fone: 55 11 3065-9978
>>>> MSN: lucasmateus_777 em hotmail.com
>>>> _______________________________________________
>>>> Rio-pm mailing list
>>>> Rio-pm em pm.org
>>>> http://mail.pm.org/mailman/listinfo/rio-pm
>>>>
>>>
>>>
>>>
>>> --
>>> Just another Perl Hacker,
>>> Fernando (SmokeMachine)
>>> http://perl-e.org
>>>
>>> _______________________________________________
>>> Rio-pm mailing list
>>> Rio-pm em pm.org
>>> http://mail.pm.org/mailman/listinfo/rio-pm
>>>
>>
>>
>>
>> --
>> --Lindolfo "Lorn" Rodrigues
>> www.slackwarezine.com.br
>> http://lornlab.org
>> http://sao-paulo.pm.org
>> use Catalyst;
>>
>> _______________________________________________
>> Rio-pm mailing list
>> Rio-pm em pm.org
>> http://mail.pm.org/mailman/listinfo/rio-pm
>>
>
>
>
> --
>
> Marco Lima
> braun.lima em gmail.com
>
> "Ter acesso ao conhecimento é um dever de todos; transmitir conhecimento é
> um dever de quem tem."
>
> "Na visão do hacker, o sentido da vida está em dedicar-se a uma paixão.
> Esta paixão é, na realidade, uma atividade significativa, inspiradora e
> prazerosa para o indivíduo, seja ela rotulada como "trabalho" ou como
> "diversão."
>



-- 

Marco Lima
braun.lima em gmail.com

"Ter acesso ao conhecimento é um dever de todos; transmitir conhecimento é
um dever de quem tem."

"Na visão do hacker, o sentido da vida está em dedicar-se a uma paixão. Esta
paixão é, na realidade, uma atividade significativa, inspiradora e prazerosa
para o indivíduo, seja ela rotulada como "trabalho" ou como "diversão."
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://mail.pm.org/pipermail/rio-pm/attachments/20090220/1cb2399e/attachment-0001.html>


Mais detalhes sobre a lista de discussão Rio-pm