2016-09-26 3 views
-2

Array = [1 3 6];Comment trouver un motif?

Nous pouvons diviser en segments contigus appelés morceaux et les stocker sous forme d'un autre tableau 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; 

Lorsque nous additionnons tous les résultats, nous obtenons 10+14+19+30=73. C'est le résultat final pour Array = [1,3,6]. Je veux trouver un motif pour n'importe quelle taille de tableau comme ça. Il peut être array[1,2,3,4,5,6], array[1,5,6,7], array[5,777,88,11,22] etc Comment puis-je faire cela?

+4

s'il vous plaît, formater votre code, au moins. Prends soin de nos yeux. –

+3

Et nos esprits aussi. –

+0

il convient pour être math ou codereview.stackexchane.com ... mais le format est doit: P –

Répondre

0

Pour coder cela, vous voulez probablement une solution récursive. Quelque chose comme

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

Si nous obtenons la taille de tableau 10^6.Cette solution récursive obtenant TLE, Pour ce besoin de modèle 0 (1) ou 0 (nlong) solution pour cela . Merci pour la réponse @salix – Anik

+0

Vous pourriez entrer dans des problèmes combinatoires avec un tableau de cette taille. Votre problème est étroitement lié à [Partitions] (https://en.wikipedia.org/wiki/Partition_ (number_theory)). Nous pouvons obtenir une estimation du nombre de partitions. Avec une longueur de tableau de 10.000, il y a environ 3.6E106 partitions, beaucoup plus grandes que ce qui va être possible de calculer. Une solution non récursive pourrait être en mesure d'augmenter la taille maximale, mais elle sera toujours limitée. –