List::Util wins, flawless victory!<br>(resultado para um array de 100 elementos)<br><br><span style="font-family: courier new,monospace;">                    Rate alg_num_shuffle pusep   map sort fisher_yates list_util</span><br style="font-family: courier new,monospace;">

<span style="font-family: courier new,monospace;">alg_num_shuffle  10104/s              --   -1%   -2% -18%         -19%      -91%</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">pusep            10172/s              1%    --   -2% -18%         -18%      -90%</span><br style="font-family: courier new,monospace;">

<span style="font-family: courier new,monospace;">map              10342/s              2%    2%    -- -16%         -17%      -90%</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">sort             12332/s             22%   21%   19%   --          -1%      -88%</span><br style="font-family: courier new,monospace;">

<span style="font-family: courier new,monospace;">fisher_yates     12458/s             23%   22%   20%   1%           --      -88%</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">list_util       106762/s            957%  950%  932% 766%         757%        --</span><br>

<br>Aliás, aquele código que postei inicialmente era uma variante do algoritmo de Fisher-Yates (<a href="http://en.wikipedia.org/wiki/Fisher-Yates">http://en.wikipedia.org/wiki/Fisher-Yates</a>) 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 :)<br>

&quot;map&quot; e &quot;sort&quot; 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):<br><br><span style="font-family: courier new,monospace;">                    Rate pusep alg_num_shuffle   map fisher_yates sort list_util<br>

pusep            92304/s    --             -1%   -7%         -16% -54%      -89%</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">alg_num_shuffle  92781/s    1%              --   -6%         -15% -54%      -89%</span><br style="font-family: courier new,monospace;">

<span style="font-family: courier new,monospace;">map              99073/s    7%              7%    --         -10% -51%      -88%</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">fisher_yates    109484/s   19%             18%   11%           -- -46%      -87%</span><br style="font-family: courier new,monospace;">

<span style="font-family: courier new,monospace;">sort            202283/s  119%            118%  104%          85%   --      -76%</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">list_util       838226/s  808%            803%  746%         666% 314%        --</span><br style="font-family: courier new,monospace;">

<br>E aqui está o código do benchmark: <a href="http://tinypaste.com/f989dd">http://tinypaste.com/f989dd</a><br><br>ABS()<br><br>
<br><br><div class="gmail_quote">2010/11/6 Renato Santos <span dir="ltr">&lt;<a href="mailto:renato.cron@gmail.com">renato.cron@gmail.com</a>&gt;</span><br><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">

<p>Preciso ao menos comparar com a solução do Pusep!</p>
<p>Sem perl, estou, no momento.</p>
<p></p><blockquote type="cite">Em nov 6, 2010 9:39 PM, &quot;Gabriel Andrade&quot; &lt;<a href="mailto:gabiruh@gmail.com" target="_blank">gabiruh@gmail.com</a>&gt;escreveu:<div class="im"><br><br>2010/11/6 Renato Santos &lt;<a href="mailto:renato.cron@gmail.com" target="_blank">renato.cron@gmail.com</a>&gt;:<br>



</div><p><font color="#500050">&gt; Foi citado pelo Alexei,
&gt;
&gt; Eu preciso fazer um benchmark, entre o core e outros métodos para estu...</font></p><div class="im">Cara, recomendo não perder seu tempo com isso. List::Util é um módulo<br>
presente no core do perl desde a versão 5.7.3 (lááá em 2002), e possui<br>
um versão em XS (compilada em C) que acredito ser usada por default,<br>
portanto, mais rápida que qualquer coisa em perl que você invente<br>
escrever pra comparar no seu benchmark. Ela é uma solução testada e<br>
usada há muito tempo -- 8 anos é um tempo razoável pra o mantenedor do<br>
módulo ter se tocado e mudado a implementação caso ela tenha sido<br>
ineficiente em algum momento.<br>
<br>
Então, esquece isso, senta a bunda na cadeira e volta a programar... :D<br>
_______________________________________________<br>
<p><font color="#500050">SaoPaulo-pm mailing list
<a href="mailto:SaoPaulo-pm@pm.org" target="_blank">SaoPaulo-pm@pm.org</a>
</font></p><p><font color="#500050"><a href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" target="_blank">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a>
</font></p></div></blockquote>
<br>_______________________________________________<br>
SaoPaulo-pm mailing list<br>
<a href="mailto:SaoPaulo-pm@pm.org">SaoPaulo-pm@pm.org</a><br>
<a href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" target="_blank">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a><br></blockquote></div><br>