2017-01-15 4 views
-5

私は、k個の部分で数値を分割するための再帰アルゴリズムを探しています。 exempleについてはJava Partition Algorithm

:Javaでは

P(5,2) > { {1,4},{2,3} } 
P(7,2) > { {1,6},{2,5},{3,4} } 
P(5,3) > { {1,1,3},{1,2,2} } 

が、それは別の関連リンク言語することができます。

私のコードは、現在、私が理解したよう

public static void partition(int n, int k) { 
     partition(n, k, " "); 
    } 

    public static void partition(int n, int max, String prefix) { 
     if (n == 0) { 
      System.out.println(prefix); 
      return; 
     } 

     for (int i = Math.min(max, n); i >= 1; i--) { 
      partition(n-i, i, prefix + " " + i); 
     } 
    } 
+1

あなたはこれまで何を試しましたか? – nullpointer

+0

手順1)素因数を取る。ステップ2)2項定理を適用する。 [この回答](http://stackoverflow.com/a/6999554/2071828)も参照してください。 –

+0

私はそのような基本的なアルゴリズムを持っています: パブリックstatic void partition(int n、int k){ partition(n、k、 ""); } public static void partition(int n、int max、String prefix){ if(n == 0){ System.out.println(接頭辞); リターン; (max、n); i> = 1; i--){ partition(n-i、i、prefix + "" + i); } } – Shining

答えて

0

、あなたは、正確k数字でnを分割する各少なくとも一つの(1)。

まず、n >= kk >= 1をチェックします。それ以外の場合は可能ではありません(コーナーケースn = k = 0のままにしておきます)。

prefixに1つの数値を正確に追加するので、正確にkパーティションになるように、max - 1を第2引数として渡す必要があります。

その他の問題がある可能性があります。現在の出力を教えてもらえれば分かりやすいかもしれません。

関連する問題