[SP-pm] TRNGs com Rand

Renato Santos renato.cron at gmail.com
Sat Nov 6 18:11:53 PDT 2010


ThannkS! Devo aprender a fazer extensões em XS

O q acho meio chato, e q precisa ser em c puro, sem c++.
Ou, criar uma lib em c++ e um link com C e um Xx pra perl.

Em nov 6, 2010 11:05 PM, "Stanislaw Pusep" <creaktive at gmail.com>escreveu:

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 at gmail.com> > > Preciso ao menos
comparar com a solução do P...

_______________________________________________
SaoPaulo-pm mailing list
SaoPaulo-pm at pm.org
http://mail.pm.org/mailman/listinfo/saopaulo-pm
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.pm.org/pipermail/saopaulo-pm/attachments/20101106/8238b063/attachment.html>


More information about the SaoPaulo-pm mailing list