World's most popular travel blog for travel bloggers.

[Solved]: Sum of products of n-tuples

, , No Comments
Problem Detail: 

Let's say I have an array of numbers {a,b,c,d,e} and want to calculate the sum of product of all triples abc+abd+...+cde. I can calculate it very fast without generating all triples using this formula
F(n,k)= k*F(n-1, k-1)+ F(n-1, k) with two loops

       int[] values={a, b, c, d, e...};         int k = 3;        int[,] F = new int[values.Count, k];        ...         for(int i = 0; i < values.Count; i++)                    for(int j = 0; j < k && j <= i; j++)                 F[i, j] = values[i] * F[i - 1, j - 1] + F[i - 1, j]; 

Now I have this array of groups {{a1,a2,a3..an}, {b1,b2,b3 ...bn}, {c1,c2...} } and every element of a triple must be in different group. a1*b2*c1 is a valid triple but a1*a2*b1 is not allowed because a1, a2 are in the same group. It's possible to generalize the above algorithm to find the sum of valid triples (quadruple or n-tuple)?

Asked By : albert

Answered By : D.W.

We have the following identity:

$$\sum_{i,j,k} a_i b_j c_k = (a_1+\dots+a_n) \times (b_1+\dots+b_n) \times (c_1 + \dots + c_n).$$

Therefore, one can compute the sum of all valid triples in $O(n)$ time by first computing the sum of the $a_i'$, the sum of the $b_i$'s, the sum of the $c_i$'s, and then multiplying these three sums. This generalizes: you can find the sum of valid k-tuples in $O(kn)$ time.

Best Answer from StackOverflow

Question Source : http://cs.stackexchange.com/questions/47758

3.2K people like this

 Download Related Notes/Documents

0 comments:

Post a Comment

Let us know your responses and feedback