[#42735] [Ruby 1.9-Feature#4147][Open] Array#sample で重みを指定したい — Yoji Ojima <redmine@...>

Feature #4147: Array#sample で重みを指定したい

52 messages 2010/12/10
[#42791] [Ruby 1.9-Feature#4147][Assigned] Array#sample で重みを指定したい — Shyouhei Urabe <redmine@...> 2010/12/18

チケット #4147 が更新されました。 (by Shyouhei Urabe)

[#42800] Re: [Ruby 1.9-Feature#4147][Assigned] Array#sample で重みを指定したい — Masaya TARUI <tarui@...> 2010/12/19

> じゃあ反対ないので実装はともかく、この仕様は基本入れる方向で考えましょう。反対の人は意思表示お早めに。

[#42763] [Ruby 1.9-Bug#4159][Open] test_block_variables(TestRipper::ParserEvents) が失敗する — Kouhei Yanagita <redmine@...>

Bug #4159: test_block_variables(TestRipper::ParserEvents) が失敗する

8 messages 2010/12/14

[#42894] [Ruby 1.8-Feature#4207][Open] これから「1.8.8」の話をしよう -- 1.8がこの先生きのこるには — Shyouhei Urabe <redmine@...>

Feature #4207: これから「1.8.8」の話をしよう -- 1.8がこの先生きのこるには

24 messages 2010/12/26
[#42935] Re: [Ruby 1.8-Feature#4207][Open] これから「1.8.8」の話をしよう -- 1.8がこの先生きのこるには — Kenta Murata <muraken@...> 2011/01/04

むらたです。

[#42936] Re: [Ruby 1.8-Feature#4207][Open] これから「1.8.8」の話をしよう -- 1.8がこの先生きのこるには — Kenta Murata <muraken@...> 2011/01/05

むらたです。

[ruby-dev:42812] Re: [Ruby 1.9-Feature#4147] Array#sample で重みを指定したい

From: Yusuke ENDOH <mame@...>
Date: 2010-12-19 15:41:22 UTC
List: ruby-dev #42812
遠藤です。

2010年12月19日22:52 Yoji Ojima <redmine@ruby-lang.org>:
>>でも、重みを累積分布として与える例はないですねえ。
>>sample ごときで常に O(n) かかってほしくないと思うのですが。
>
> 復元抽出の高速アルゴリズムである Walker's alias method を使うのに必要な情報は累積分布ではないので、それを引数として与えるというのは、簡便性重視と高速性重視のどちらにも寄らない中途半端な仕様であると考えます。


Walker's alias method を知らなかったので R のソースコード
(http://svn.r-project.org/R/trunk/src/main/random.c) を読んで調べて
みましたが、面白いですね。しかし事前に O(n) のテーブルを作ってしまう
んですね。うーん。

思うに R の sample は、1 個や 2 個ではなくすごく大量のサンプリングを、
一括して行うことが前提となっているような気がします。つまり、

  - 母集団の大きさ << 取り出したい数、である
  - 何度も sample を呼ばず、最初に必要なだけサンプリングする
    - なので O(母集団の大きさ) はかかってもよい

というユースケースを想定している。

Ruby でも同じ使われ方が期待できるんですかねえ。
いよいよ、まずは gem で作って配布して、多くの需要があることがわかった
ら取り込む、という手順を踏むほうがいいような気がしてきました。

-- 
Yusuke Endoh <mame@tsg.ne.jp>

In This Thread