【发布时间】:2021-05-20 23:38:27
【问题描述】:
我需要创建一个函数,它将接受一个参数int 并输出int,它表示输入整数分区的不同部分的数量。即,
input:3 -> output: 1 -> {1, 2}
input:6 -> output: 3 -> {1, 2, 3}, {2, 4}, {1, 5}
...
因为我只寻找不同的部分,所以不允许这样的事情:
4 -> {1, 1, 1, 1} or {1, 1, 2}
到目前为止,我已经设法提出了一些算法,可以找到所有可能的组合,但它们非常缓慢且仅在 n=100 左右之前有效。
而且由于我只需要 number 个组合而不是组合本身 Partition Function Q 应该可以解决问题。
有人知道如何有效地实现这一点吗?
有关问题的更多信息:OEIS、Partition Function Q
编辑:
为避免任何混淆,DarrylG 答案还包括琐碎(单个)分区,但这不会以任何方式影响其质量。
编辑 2:
jodag(已接受的答案)不包括琐碎的分区。
【问题讨论】:
-
您提供的链接为计算 Q(n) 的记忆函数提供了一组非常清晰的函数定义。您是否尝试过实施?你有一些代码给我们看吗?
-
不幸的是,我没有取得太多成就,因为我无法正确处理递归,尤其是
s(n)部分。因此,如果您能给我一个提示,我会尝试提出一些建议。谢谢 -
@kaktus_car--在我的回答中,我在您的 Wolfram 链接中实现了该方法和一种更简单的方法。即使使用记忆化,Wolfram 也比使用简单的递归关系快几个数量级。
标签: python algorithm partitioning