我无法弄清楚如何将整数N的所有合成(http://en.wikipedia.org/wiki/Composition_%28number_theory%29)生成为K个部分,但一次只能生成一个。也就是说,我需要一个函数,在给定生成的前一个组合的情况下,返回序列中的下一个组合。原因是我的应用程序的内存有限。如果我可以使用Python及其生成器功能,这将更容易,但我坚持使用C ++。
这类似于Next Composition of n into k parts - does anyone have a working algorithm?
非常感谢任何协助。
答案 0 :(得分:0)
您可以尝试这样的事情:
以(K-1)1的数组[1,1,...,1,N-k + 1]开始,余数为1。可以通过递增第(K-1)个元素并减少最后一个元素来创建下一个合成。只要最后一个元素大于倒数第二个元素,就可以做到这一点。
当最后一个元素变小时,递增第(K-2)个元素,将第(K-1)个元素设置为相同的值,并将最后一个元素再次设置为余数。重复此过程,并在必要时对其他元素应用相同的原则。
你最终得到一个不断排序的数组,避免重复的组合