私はSAGEが提供する関数を使用して、特定の長さ()である特定のrandom_element()
整数()のランダムな整数パーティションを生成してきました。との特定の値に対して、すべてのパーティションのセットからバイアスのないランダムサンプルを生成しようとしています。SAGEの関数は、N(つまり)のランダムパーティションをすばやく返します。N
S
N
S
Partitions(N).random_element()
ただし、追加するとS
(つまりPartitions(N,length=S).random_element()
)、非常に遅くなります。N
同様に、長さが長いランダムなパーティションを除外するのS
は非常に時間がかかります。
ただし、これが誰かに役立つことを願っています。関数が長さにN
一致しないパーティションを返す場合S
、共役パーティションの長さはSであることがよくあります。つまり、次のようになります。
S = 10
N = 100
part = list(Partitions(N).random_element())
if len(part) != S:
SAD = list(Partition(part).conjugate())
if len(SAD) != S:
continue
これにより、長さのパーティションが検出される速度が上がり、偏りのないサンプルが生成されるように見えます(とのさまざまな値について、S
パーティションのセット全体に対して結果を調べました)。N
S
ただし、私はN(eg 10,000
)とS(eg)の値を使用し300
ているため、このアプローチでさえも実用的ではありません。SAGEのrandom_element()
機能に関連するコメントは、最適化の余地が十分にあることを認めています。それで、おそらく、一致しないパーティションを生成しないことによって、N
との特定の値に一致する整数パーティションのバイアスのない(つまりランダムに均一な)サンプルをより迅速に生成する方法はありますか?さらに、共役パーティションを使用すると、多くの場合、偏りのないサンプルを生成できますが、その理由を正確に理解しているとは言えません。 S
S