小编klo*_*cey的帖子

在Python中随机生成特定长度的整数分区的算法?

我一直在使用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?此外,在许多情况下使用共轭分区可以很好地生成无偏差的样本,但我不能说我完全理解为什么.

python combinatorics sage

6
推荐指数
1
解决办法
2022
查看次数

标签 统计

combinatorics ×1

python ×1

sage ×1