我需要一种算法来生成所有可能的正数分区,然后我提出了一个算法(作为答案发布),但这是指数时间。
该算法应返回所有可能的方式,以小于或等于其自身的正数之和表示一个数字。因此,例如对于数字 5 ,结果将是:
所以我的问题是:有没有更有效的算法呢?
编辑: 问题的标题为 “一个数字的总和分解” ,因为我真的不知道这叫什么。ShreevatsaR指出它们被称为“分区”,因此我相应地编辑了问题标题。
它称为分区。[另请参阅Wikipedia:分区(数论)。]
分区的数量p(n)呈指数增长,因此生成 所有 分区的任何操作都必须花费指数时间。
也就是说,您可以做得比代码更好。请参见本,或在其更新版本的Python算法与数据结构由戴维·普斯坦。