in reply to Re: Picking unique element in random from a array
in thread Picking unique element in random from a array
As you can see, the repaired algorithm does ~ $n*$cnt cycles. It is too naive. Therefore, it should be better to use some previously adviced libraries.my $n = 1000; my $cnt = 10; my @ret; for (my $i = 0; $i < $cnt; $i++) { my $r = int(rand()*$n); my $j = 0; while ($j <= $r) { $r++ if defined $ret[$j]; $j++; } $ret[$r] = 1; $n--; } print "$cnt random indexes:\n"; for (my $i = 0; $i < $n+$cnt; $i++) { print "$i\n" if $ret[$i]; }
|
|---|