我一直在使用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
这增加了找到长度分区的速率,S
并且似乎产生了无偏样本(我已经针对 和 的各种值检查了整个分区集的结果N
)S
。
但是,我使用的 N (eg 10,000
) 和 S (eg 300
) 的值甚至使这种方法变得不切实际地缓慢。与 SAGErandom_element()
功能相关的评论承认有很大的优化空间。那么,有没有办法通过不生成不匹配的分区来更快地生成匹配给定值的整数分区的无偏(即随机均匀)样本N
和?此外,在许多情况下,使用共轭分区可以很好地生成无偏样本,但我不能说我完全理解为什么。 S
S