-1

n 個の整数の可能なすべてのパーティションを m 個のチャンクに繰り返し処理したいと考えています。m 個のネストされた for ループを使用してこれを行うことができますが、それを行うためのより良い方法があると確信しています。

また、私のコードが m を変数として取り込めると助かります。

ネストされたループ コードは次のようになります。

for a1 <- 1 to n {
for a2 <- a1 to n {
.
.
.
for am <- a(m-1) to n {
myFunc(Array[1..n], a1, a2, ..., am)
}}...}}

4

2 に答える 2

0

そのようなプログラムを書くことを学ぶとき、Knuth を読むことに代わるものはありません:

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

于 2013-09-26T14:14:40.947 に答える
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 に対応します。

于 2013-09-24T09:50:49.460 に答える