2016-09-26 4 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

크기와 관련된 배열 문제로 인해 조합 문제가 발생할 수 있습니다. 문제는 [파티션] (https://en.wikipedia.org/wiki/Partition_ (number_theory))과 밀접하게 관련되어 있습니다. 파티션 수를 예상 할 수 있습니다. 배열 길이가 10,000 인 경우 약 3.6E106 개의 파티션이 있으며 계산할 수있는 것보다 훨씬 큽니다. 비 재귀 적 솔루션은 최대 크기를 조금 늘릴 ​​수는 있지만 여전히 한계에 도달합니다. –

관련 문제