我一直在使用random_element()SAGE提供的函数为给定的整数(N)生成一个特定长度(S)的随机整数分区.我正在尝试从给定值N和的所有分区的集合中生成无偏的随机样本S.SAGE的功能快速返回N(即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
Run Code Online (Sandbox Code Playgroud)
这增加了S找到长度分区的速率,并且看起来产生无偏的样本(我已经针对各种值的N和来检查了整个分区集的结果S).
然而,我正在使用N(例如10,000)和S(例如300)的值,这甚至使得这种方法不切实际地缓慢.与SAGE random_element()功能相关的评论承认有足够的优化空间.那么,有没有办法更快速地生成与给定值匹配的整数分区的无偏(即随机统一)样本,N并且S可能不生成不匹配的分区S?此外,在许多情况下使用共轭分区可以很好地生成无偏差的样本,但我不能说我完全理解为什么.