From: Kenta Murata Date: 2010-12-24T09:29:27+09:00 Subject: [ruby-dev:42878] Re: [Ruby 1.9-Feature#4147][Assigned] Array#sample で重みを指定したい むらたです。 On 2010/12/23, at 14:56, Yusuke ENDOH wrote: >> Ojima さんが欲しがってる「n標本だけの重み付き抽出」を Array#sample で対応するなら、 >> 次のようにすると良いのではないでしょうか。 >> >> - Array#sample では重みを配列かハッシュで受け取る。 >> - Array#sample_by を用意し、後置ブロック経由で重みを与えられるようにする。 > > IRC では、sample(weight: proc { ... }) としたらどうかな、という > 案が挙がっていました。 私も同様のインターフェイスを考えていました。 weight は proc だけじゃなくて配列とハッシュも受け付けられれば良いと思います。 >> n がある程度大きい場合は Walker のアルゴリズムを採用したほうが効率が良いはずです。 >> アルゴリズムを切り替えるための閾値の調査などが必要になるでしょうね。 >> Walker のアルゴリズムは昔 boost 用に作ったことがあります。 >> それは CodeRepos の http://bit.ly/eAk1M1 ここに置いてあるのですが、 >> 必要なら私が実装しても構いません。 > > おお。 > ところで、mrkn さんは何のためにこれを作ったのかが興味あります。 > この提案はユースケースが明確でなく、その辺の議論がどうも机上の域を > こえてない感じですので、参考になるのではないかと。 discrete_distribution.hpp は、それと同じディレクトリにある zipf_distribution.hpp のために 作りました。zipf_distribution.hpp は Zipf-Mandelbrot 分布の実装です。 私が Zipf-Mandelbrot 分布を作った理由は、離散ベキ分布に従う乱数を生成する必要があったからです。 学生の頃、複雑ネットワークの研究をしていて、観測データの検証用に使ったり、 頂点の次数 (接続する辺の本数) がベキ分布に従うようなネットワーク構造を作るときに使いました。 -- Kenta Murata OpenPGP FP = 1D69 ADDE 081C 9CC2 2E54 98C1 CEFE 8AFB 6081 B062 本を書きました!! 『Ruby 逆引きレシピ』 http://www.amazon.co.jp/dp/4798119881/mrkn-22 E-mail: mrkn@mrkn.jp twitter: http://twitter.com/mrkn/ blog: http://d.hatena.ne.jp/mrkn/