タグ

開発と確率に関するmingosのブックマーク (1)

  • リストから重みをつけてランダムに要素を取り出す

    同僚がそのような処理を実装していた。 問題設定はこうだ。リストのなかに複数の要素がふくまれている。それぞれの要素は重みづけされている。重みの大きいものがより高い確率になるように、ランダムに要素をひとつ抽出したい。例えば要素の重みがすべておなじならば、たんなるランダムピックアップになる。 ではどうするか。すべての重みの総和の範囲で乱数を生成する。リストを前かみていき、乱数から要素の重みをひとつづつひいていく。はじめて乱数が 0 以下になったら、そのときの要素をピックアップすれば良い。 たとえば次のリストを考える。要素の数値は重みをあらわす。 [10, 3, 1] 重みの総和の範囲の乱数をだす。今回の場合は 1 - 14 の範囲の乱数がほしい。bash ならばこんなかんじだ。 $ echo $(($RANDOM % 14 + 1)) この結果が 11 だとする。リストを先頭から見ていく。乱数か

    リストから重みをつけてランダムに要素を取り出す
  • 1