hkey => sub{
my @range = (keys %{+{map {($_ => 1)}0 .. $N-1}})[0 .. $K-1];
}
It is slightly faster than samp for very small sets..
perl randomshuffle.pl 10 5
Rate samp hkey shuf mpu
samp 108393/s -- -13% -88% -92%
hkey 124178/s 15% -- -87% -90%
shuf 934174/s 762% 652% -- -27%
mpu 1275273/s 1077% 927% 37% --
..but becomes fastly slower ;) for bigger ones.
perl randomshuffle.pl 100 5
Rate hkey samp shuf mpu
hkey 15844/s -- -46% -93% -99%
samp 29546/s 86% -- -86% -98%
shuf 212991/s 1244% 621% -- -86%
mpu 1519656/s 9491% 5043% 613% --
The only thing to note is the %{+{ LIST }} syntax, where + is used to disambiguate a hashref from a block (credit: perl IRC channel) because you can't dereference a map as a hash.
PS: your hardware is ~3 times faster than mine ;)
PPS: "randperm" is not exported by the Math::Prime::Util module in 0.60 so i upgraded to 0.73
L*
There are no rules, there are no thumbs..
Reinvent the wheel, then learn The Wheel; may be one day you reinvent one of THE WHEELS.
|