Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env perl
- use warnings;
- use strict;
- my @data = (1,2,3);
- my $trials = 1000000;
- my %results;
- my $shuffler = \&shuffle_listutil;
- #my $shuffler = \&shuffle_naive;
- #my $shuffler = \&shuffle_kfy;
- for (1..$trials) {
- $results{join '', $shuffler->(@data)}++;
- }
- for my $result (sort keys %results) {
- printf "%10s %.02f%%\n", $result, $results{$result}/$trials*100;
- }
- sub shuffle_listutil {
- require List::Util;
- return List::Util::shuffle(@_);
- }
- sub shuffle_naive {
- my @data = @_;
- for my $i (0..$#data) {
- my $n = int(rand($#data+1));
- my $t = $data[$i]; $data[$i] = $data[$n]; $data[$n] = $t;
- }
- return @data;
- }
- sub shuffle_kfy {
- my @data = @_;
- for my $i (0..$#data) {
- my $n = int(rand($#data-$i+1))+$i;
- my $t = $data[$i]; $data[$i] = $data[$n]; $data[$n] = $t;
- }
- return @data;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement