将n个值拆分为m个块

时间:2013-09-24 04:21:58

标签: java arrays algorithm partitioning

我想将n个整数的每个可能分区迭代到m个块中。我可以通过使用m嵌套for循环来做到这一点,但我确信这是一个更好的方法。

如果我的代码可以将m作为变量,那么它也会有所帮助。

嵌套循环代码类似于:

对于a1< -1到n {
  对于a2< -a1到n {
    。
    。
    。
      因为am< -a(m-1)到n {
        myFunc(Array [1..n],a1,a2,...,am)
}} ...}}

2 个答案:

答案 0 :(得分:0)

最简单的方法是使用递归。但是你在评论中提到你不能使用递归解决方案,所以我可以建议另一个解决方案 - 使用任何方法生成所有C(n-1,m-1)组合(我希望,有现成可用) Java的非递归组合解决方案。)

例如,对于n = 7,m = 3,您将得到C(6,2)= 15个组合 - n个星,n-1个空格,其中m-1可能会停留,其他(mn)将会崩溃,形成m簇。

*_*_*_*_*_*_*

组合010001对应于配置**_****_*,或分区7 = 2 + 4 + 1

答案 1 :(得分:0)

在学习编写此类程序时,无法替代阅读Knuth:

http://www.kcats.org/csci/464/doc/knuth/fascicles/fasc3a.pdf