我有一个整数 N,我希望随机均匀地生成它的可能分区之一。例如,N=5 有 7 个分区:
我想要一种能够以 1/7 的概率输出其中每一个的算法。
生成所有此类分区或限制为 K 个部分的所有分区的算法很容易找到。
但是,我所寻找的并不是先验地限制K。我不能随机均匀地选择 K,因为 K 不是均匀分布的并且分布是非平凡的。如果我事先知道零件尺寸的精确分布,我可以使用它对 K 进行采样,然后使用现有的算法之一,但我找不到一种方法来做到这一点。数值调查显示,绝大多数分区的 K 都很小。
我无法预先生成分区列表,因为 N=100 时已经有数亿个分区了。但即使对于 N=1000(在我需要的范围内),每个单独的分区也将主要是一小部分数字的简短列表。
这样的算法存在吗?我找不到它,我已经找了好几天了。
有很多算法可以对整数分区进行随机采样。
请参阅此答案以快速入门:https://stackoverflow.com/a/19829615/2329304 .
另请参阅 使用概率分而治之和递归方法对精确玻尔兹曼采样的改进,DeSalvo 2017