一尘不染

生成数字的分区

algorithm

我需要一种算法来生成所有可能的正数分区,然后我提出了一个算法(作为答案发布),但这是指数时间。

该算法应返回所有可能的方式,以小于或等于其自身的正数之和表示一个数字。因此,例如对于数字 5 ,结果将是:

  • 5
  • 4 + 1
  • 3 + 2
  • 3 + 1 + 1
  • 2 + 2 + 1
  • 2 + 1 + 1 + 1
  • 1 + 1 + 1 + 1 + 1

所以我的问题是:有没有更有效的算法呢?

编辑: 问题的标题为 “一个数字的总和分解”
,因为我真的不知道这叫什么。ShreevatsaR指出它们被称为“分区”,因此我相应地编辑了问题标题。


阅读 197

收藏
2020-07-28

共1个答案

一尘不染

它称为分区。[另请参阅Wikipedia:分区(数论)。]

分区的数量p(n)呈指数增长,因此生成 所有 分区的任何操作都必须花费指数时间。

也就是说,您可以做得比代码更好。请参见,或在其更新版本的Python算法与数据结构戴维·普斯坦

2020-07-28