rubyhackchallenge
rubyhackchallenge copied to clipboard
重み付きサンプリングの実装
6年前から議論されているが進んでいない https://bugs.ruby-lang.org/issues/4147
イシューをクリアにして、リファレンス実装のパッチをPRで送るのがゴール
ニーズについては頷けるので、何らかの形で分布関数を与えることには異論はありません。 ここで、幾つかの考慮すべきことがあります。
- 効率的な実装の可能な仕様であるべきです。
- 非復元抽出の要望が入るとすれば、その要望と衝突せず、整合性を持つ仕様である必要があります。
- mrknさんのMath/Random構想を考慮して欲しいです。あちらで提供される分布実装と整合性を持つ仕様であって欲しいです。
- mrknさんの考えるArray#sampleの仕様も聞きたいです
結局
-
repeat: trueoptionの実装 - ブロックによる重み付けに対応するwalker algorithmの実装
の2点を行う
そもそも非復元抽出なのか、復元抽出も使えるようにしたいのか https://bugs.ruby-lang.org/issues/3647
これも途中で投げられている
sample(repeat: true) のようなオプションがあるといい
単純な復元抽出に関しては (1..n).map { ary.sample } で代替できるので不要
同時に、重み付き抽出に関しては同様にシンプルな代替方法がありませんから、同じ考え方でこちらは必要と言うことも可能かと
が本質的か