【发布时间】:2012-05-04 10:43:35
【问题描述】:
我一直在使用 SAGE 提供的 random_element() 函数为特定长度 (S) 的给定整数 (N) 生成随机整数分区。我正在尝试从给定值N 和S 的所有分区集中生成无偏随机样本。 SAGE 的函数快速返回 N 的随机分区(即Partitions(N).random_element())。
但是,添加S(即Partitions(N,length=S).random_element())时速度会大大降低。同样,过滤掉长度为S 的N 的随机分区非常慢。
但是,我希望这对某人有所帮助,我发现在函数返回 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(例如 10,000)和 S(例如 300)的值,这使得即使这种方法也变得不切实际地慢。与 SAGE 的 random_element() 函数相关的评论承认有很大的优化空间。那么,有没有办法通过不生成与S 不匹配的分区来更快地生成匹配给定值N 和S 的整数分区的无偏(即随机统一)样本?此外,在许多情况下使用共轭分区可以很好地生成无偏样本,但我不能说我完全理解为什么。
【问题讨论】:
标签: python combinatorics sage