Найти сумму произведений различных пар в низшей Big O - PullRequest
0 голосов
/ 18 апреля 2019

Я хочу найти сумму произведений различных пар в низшей Большой О.

Список = [3, 2, 1, 7, 9]

Таким образом, отдельные пары будут - (3,2), (3,1) (3, 7), (3, 9), (2, 1), (2, 7), (2, 9) , (1, 7), (1, 9), (7, 9).

Обратите внимание, что - (2,3) совпадает с (3,2).

Что я делаю:

   List = [3 , 2, 1 , 7, 9]

   int result = 0;

    for (int inner = 0; inner < list.size()-1; inner ++){

        for(int outer = inner+1; outer < list.size(); outer++){

            result+= list[inner] * list[outer];
        }
    }

Он будет работать в O (n ^ 2).

Я хотел бы знать, есть ли какое-нибудь лучшее решение, которое бы выполнялось за время, меньшее O (n ^ 2).

Спасибо.

РЕДАКТИРОВАТЬ - сумма различных пар -> сумма произведений различных пар

Ответы [ 2 ]

3 голосов
/ 18 апреля 2019

У вас есть решение Efficient O (n) здесь :

static int findProductSum(int A[], int n) 
{ 
    // calculating array sum (a1 + a2 ... + an) 
    int array_sum = 0; 
    for (int i = 0; i < n; i++) 
        array_sum = array_sum + A[i]; 

    // calcualting square of array sum 
    // (a1 + a2 + ... + an)^2 
    int array_sum_square = array_sum * array_sum; 

    // calcualting a1^2 + a2^2 + ... + an^2 
    int individual_square_sum = 0; 
    for (int i = 0; i < n; i++) 
        individual_square_sum += A[i] * A[i]; 

    // required sum is (array_sum_square - 
    // individual_square_sum) / 2 
    return (array_sum_square - individual_square_sum) / 2; 
} 

// Driver code 
public static void main(String[] args)  
{ 
    int A[] = {1, 3, 4}; 
    int n = A.length; 
    System.out.println("sum of product of all pairs of array "
            +"elements : " + findProductSum(A, n)); 
    } 
}  
2 голосов
/ 18 апреля 2019

Я думаю, что личность

(x1+x2+...+xn)^2 =
   x1^2+x2^2+...+xn^2
   +2(x1x2+...+x1xn+x2x3+...+x2xn+...)

ваш друг здесь.

...