[SP-pm] TRNGs com Rand

Stanislaw Pusep creaktive at gmail.com
Sat Nov 6 18:05:05 PDT 2010


List::Util wins, flawless victory!
(resultado para um array de 100 elementos)

                    Rate alg_num_shuffle pusep   map sort fisher_yates
list_util
alg_num_shuffle  10104/s              --   -1%   -2% -18%         -19%
-91%
pusep            10172/s              1%    --   -2% -18%         -18%
-90%
map              10342/s              2%    2%    -- -16%         -17%
-90%
sort             12332/s             22%   21%   19%   --          -1%
-88%
fisher_yates     12458/s             23%   22%   20%   1%           --
-88%
list_util       106762/s            957%  950%  932% 766%
757%        --

Aliás, aquele código que postei inicialmente era uma variante do algoritmo
de Fisher-Yates (http://en.wikipedia.org/wiki/Fisher-Yates) que fiz em 2
minutos. Refiz decentemente e teve uma melhoria significativa. O que salva a
minha reputação é que o Algorithm::Numerical::Shuffle traz uma outra
implementação do mesmíssimo algoritmo e ainda assim é capenga... Muita
coragem para publicar no CPAN, hein :)
"map" e "sort" são gambiarras one-liners. O engraçado é que shuffle via sort
é bem mais eficiente do que os outros (menos o List::Util que é XS) para
arrays pequenos (10 elementos):

                    Rate pusep alg_num_shuffle   map fisher_yates sort
list_util
pusep            92304/s    --             -1%   -7%         -16% -54%
-89%
alg_num_shuffle  92781/s    1%              --   -6%         -15% -54%
-89%
map              99073/s    7%              7%    --         -10% -51%
-88%
fisher_yates    109484/s   19%             18%   11%           -- -46%
-87%
sort            202283/s  119%            118%  104%          85%   --
-76%
list_util       838226/s  808%            803%  746%         666%
314%        --

E aqui está o código do benchmark: http://tinypaste.com/f989dd

ABS()



2010/11/6 Renato Santos <renato.cron em gmail.com>

> Preciso ao menos comparar com a solução do Pusep!
>
> Sem perl, estou, no momento.
>
> Em nov 6, 2010 9:39 PM, "Gabriel Andrade" <gabiruh em gmail.com>escreveu:
>
>
> 2010/11/6 Renato Santos <renato.cron em gmail.com>:
>
> > Foi citado pelo Alexei, > > Eu preciso fazer um benchmark, entre o core e
> outros métodos para estu...
> Cara, recomendo não perder seu tempo com isso. List::Util é um módulo
> presente no core do perl desde a versão 5.7.3 (lááá em 2002), e possui
> um versão em XS (compilada em C) que acredito ser usada por default,
> portanto, mais rápida que qualquer coisa em perl que você invente
> escrever pra comparar no seu benchmark. Ela é uma solução testada e
> usada há muito tempo -- 8 anos é um tempo razoável pra o mantenedor do
> módulo ter se tocado e mudado a implementação caso ela tenha sido
> ineficiente em algum momento.
>
> Então, esquece isso, senta a bunda na cadeira e volta a programar... :D
> _______________________________________________
>
> SaoPaulo-pm mailing list SaoPaulo-pm em pm.org
>
> http://mail.pm.org/mailman/listinfo/saopaulo-pm
>
>
> _______________________________________________
> SaoPaulo-pm mailing list
> SaoPaulo-pm em pm.org
> http://mail.pm.org/mailman/listinfo/saopaulo-pm
>
-------------- Pr�xima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://mail.pm.org/pipermail/saopaulo-pm/attachments/20101106/6eeb5526/attachment-0001.html>


More information about the SaoPaulo-pm mailing list