2016-09-26 5 views
-2

Array = [1 3 6];パターンの検索方法は?

私たちは、作品と呼ばれる連続したセグメントに分割し、別の配列Bとして保存することができます

B=[(1),(3),(6)]; B=1*1+3*1+6*1=10; 
B=[(1,3),6]; B=(1+3)*2+6*1=14; 
B=[(1,(3,6)]; B=1*1+(3+6)*2=19; 
B=[(1,3,6)]; B=(1+3+6)*3=30; 

我々はすべての結果を合計すると、我々は10+14+19+30=73を取得します。これがArray = [1,3,6]の最終結果です。私はそれのような任意の配列のサイズのパターンを検索したい。

array[1,2,3,4,5,6]array[1,5,6,7]array[5,777,88,11,22]などとすることができます。

+4

少なくとも、あなたのコードをフォーマットしてください。私たちの目を見てください。 –

+3

私たちの心も。 –

+0

それは数学またはcodereview.stackexchane.comかもしれませんが...フォーマットが必要です:P –

答えて

0

これをコード化するには、おそらく再帰的な解決策が必要です。何かのように

int solve(int[] data) { 
    int len = data.length; 
    if(len ==1) return data[0]; 

    // for the full sequence (1,2,3,4,5) its just he length times 
    // the sum 
    int res = sum(data) * len; 

    // now consider partitions 
    for(int i=0;i<len-1;++i) { 
     res += solve(data[0 .. i]) 
     res += solve(data[i+1 .. len-1]) 
    } 
    return res 
} 
+0

もし私たちが配列サイズ10^6を得るならば、この再帰的解はTLEを得て、そのパターン0(1)または0(nlong) 。お返事ありがとうございます@salix – Anik

+0

あなたは、そのサイズの配列でコンビナトリアル問題になっている可能性があります。あなたの問題は[Partitions](https://en.wikipedia.org/wiki/Partition_(number_theory))と密接に関連しています。パーティションの数を見積もることができます。配列の長さが10,000の場合、約3.6E106のパーティションがあり、計算することができるよりもはるかに大きくなります。非再帰的な解決法は、最大サイズを少し増やすことができるかもしれませんが、それでも限界に達するでしょう。 –

関連する問題