1からnまでの整数からm(<=n)個を選び出したい。ランダムに選び出すアルゴリズムを与えよ。 アルゴリズムなので、当然ながらいくつも存在しているわけですが。で、各アルゴリズムとそのオーダーについて。元ネタについては言及しません。 まず、オーダーがO(n*m)のアルゴリズムについて。 my @array; for(1..$m){ my $index = 0; my $select = int rand($n - $_ + 1) + 1; while($select){ if(!$array[$index]){ $select--; } $index++; } $index--; print $index + 1, "\n"; $array[$index] = 1; } 要素数nの配列を用意して、すでに使用されているものにチェックをつける。そして、使われていないものの中からランダムに一つ取得す
