随机采样整数分区(不限制部分数量)

问题描述 投票:0回答:1

我有一个整数 N,我希望随机均匀地生成它的可能分区之一。例如,N=5 有 7 个分区:

  1. (5) - K=1 部分
  2. (4, 1) - K=2 份
  3. (3, 2) - K=2 份
  4. (3, 1, 1) - K=3 份
  5. (2, 2, 1) - K=3 份
  6. (2, 1, 1, 1) - K=4 份
  7. (1, 1, 1, 1, 1) - K=5 份

我想要一种能够以 1/7 的概率输出其中每一个的算法。

生成所有此类分区或限制为 K 个部分的所有分区的算法很容易找到。

但是,我所寻找的并不是先验地限制K。我不能随机均匀地选择 K,因为 K 不是均匀分布的并且分布是非平凡的。如果我事先知道零件尺寸的精确分布,我可以使用它对 K 进行采样,然后使用现有的算法之一,但我找不到一种方法来做到这一点。数值调查显示,绝大多数分区的 K 都很小。

我无法预先生成分区列表,因为 N=100 时已经有数亿个分区了。但即使对于 N=1000(在我需要的范围内),每个单独的分区也将主要是一小部分数字的简短列表。

这样的算法存在吗?我找不到它,我已经找了好几天了。

random integer-partition
1个回答
0
投票

有很多算法可以对整数分区进行随机采样。

请参阅此答案以快速入门:https://stackoverflow.com/a/19829615/2329304 .

另请参阅 使用概率分而治之和递归方法对精确玻尔兹曼采样的改进,DeSalvo 2017

© www.soinside.com 2019 - 2024. All rights reserved.