35 lines
622 B
Perl
35 lines
622 B
Perl
use strict;
|
|
|
|
sub s_of_n_creator {
|
|
my $n = shift;
|
|
my @sample;
|
|
my $i = 0;
|
|
sub {
|
|
my $item = shift;
|
|
$i++;
|
|
if ($i <= $n) {
|
|
# Keep first n items
|
|
push @sample, $item;
|
|
} elsif (rand() < $n / $i) {
|
|
# Keep item
|
|
@sample[rand $n] = $item;
|
|
}
|
|
@sample
|
|
}
|
|
}
|
|
|
|
my @items = (0..9);
|
|
my @bin;
|
|
|
|
foreach my $trial (1 .. 100000) {
|
|
my $s_of_n = s_of_n_creator(3);
|
|
my @sample;
|
|
foreach my $item (@items) {
|
|
@sample = $s_of_n->($item);
|
|
}
|
|
foreach my $s (@sample) {
|
|
$bin[$s]++;
|
|
}
|
|
}
|
|
print "@bin\n";
|