4

私が現在取り組んでいる問題については、与えられたセットのべき集合から適度に均一なランダムな選択をしたいと思います。残念ながら、これは私がまったく研究していない統計(実際のプログラミングに取り掛かっている今、修正する必要があるもの)にぶつかるので、それを知っている何人かの人々を超えてソリューションを実行したかったのです。

与えられたセットのサイズがnの場合、サイズkの(nk)= n!/ [k!(nk)!]サブセットがあり、べき集合の合計サイズNは、からのkに対する(nk)の合計として与えられます。 0からn。(2 nとしても与えられますが、ここでは役に立たないと思います。明らか間違っていた可能性があります)。

したがって、私の計画は、[0、1]を間隔に分割することです。

 [0, (n 0)/N] 

 ((n 0)/N, [(n 0) + (n 1)]/N] 

 ([(n 0) + (n 1)]/N, [(n 0) + (n 1) + (n 2)]/N]

  ... 

 ([N - (n n)]/N, 1]

アルゴリズム的には、間隔は、前の間隔の最大要素を新しい間隔の最大下限として取得し、それに(nj)/ Nを追加して、最大要素を取得することによって構築されます。それがはっきりしていることを願っています。

次に、[0、1]で均一なフロートを選択し、それが属する区間のインデックスにマッピングすることで、ランダムサブセットに含まれる要素の数を把握できます。そこから、適切なサイズのランダムなサブセットを選択できます。

  1. 私のスキームは、サブセットのサイズ(サブセットの総数に対して均一です。セット{1、2、..、)では明らかに均一ではありません。サイズのn})。

  2. 私はライブラリ(python random.sample)を使用して、指定されたサイズのサブセットを取得しているので、それが均一になると確信しています。

だから私の質問は、私が説明している方法で2つを組み合わせると、ランダムサイズのランダムサブセットの選択が均一になるかどうかです。答えが大変な作業である場合、これがどのように証明されるかについての指針を受け入れ、自分で作業を行うことができてうれしいです。また、これを行うためのより良い方法があれば、もちろん私はそれに満足しています。

4

2 に答える 2

9

私はあなたがこれについて長い道のりを進んでいると思います。べき集合のサイズを2nと言ったとき、あなたは近くにいました。サイズのセットのべき集合のランダムな要素を選択する場合は、n[0、2 n)の範囲のランダムな整数を生成し、整数のバイナリ表現を使用して、べき集合から適切な要素を選択します。

たとえば、S = {a、b、c、d、e}と仮定します。べき集合には、2 5 =32個の要素が含まれます。0から31までの乱数(たとえば18)を生成します。18の2進表現は10010であるため、Sの1番目と4番目の要素を選択します。この場合、べき集合のランダム要素は{a、d}になります。

于 2010-10-16T06:00:22.220 に答える
3

指定されたセットの各要素を順番に検討し、確率 1/2 で結果セットに含めることを決定します。

于 2010-10-16T08:12:10.813 に答える