rubyhackchallenge icon indicating copy to clipboard operation
rubyhackchallenge copied to clipboard

重み付きサンプリングの実装

Open shunsakai opened this issue 8 years ago • 0 comments

6年前から議論されているが進んでいない https://bugs.ruby-lang.org/issues/4147

イシューをクリアにして、リファレンス実装のパッチをPRで送るのがゴール

ニーズについては頷けるので、何らかの形で分布関数を与えることには異論はありません。 ここで、幾つかの考慮すべきことがあります。

  • 効率的な実装の可能な仕様であるべきです。
  • 非復元抽出の要望が入るとすれば、その要望と衝突せず、整合性を持つ仕様である必要があります。
  • mrknさんのMath/Random構想を考慮して欲しいです。あちらで提供される分布実装と整合性を持つ仕様であって欲しいです。
  • mrknさんの考えるArray#sampleの仕様も聞きたいです

結局

  1. repeat: true optionの実装
  2. ブロックによる重み付けに対応するwalker algorithmの実装

の2点を行う


そもそも非復元抽出なのか、復元抽出も使えるようにしたいのか https://bugs.ruby-lang.org/issues/3647

これも途中で投げられている sample(repeat: true) のようなオプションがあるといい

単純な復元抽出に関しては (1..n).map { ary.sample } で代替できるので不要

同時に、重み付き抽出に関しては同様にシンプルな代替方法がありませんから、同じ考え方でこちらは必要と言うことも可能かと

が本質的か

shunsakai avatar Aug 31 '17 05:08 shunsakai