Sum of squares of differences between all pairs of an array
Given an array arr[] of size N, the task is to compute the sum of squares of differences of all possible pairs.
Examples:
Input: arr[] = {2, 8, 4}
Output: 56
Explanation:
Sum of squared differences of all possible pairs = (2 – 8)2 + (2 – 4)2 + (8 – 4)2 = 56Input: arr[] = {-5, 8, 9, -4, -3}
Output: 950
Naive Approach: The simplest approach is to generate all possible pairs and calculate the square of their differences of each pair and keep adding it to a variable, say sum. Finally, print the value of sum.
Time Complexity: O(N2)
Auxiliary Space: O(1)
Efficient Approach: The optimal idea is based on rearranging the expression in the following manner:
∑i=2 n ∑j=1i-1 (Ai-Aj)2
Since Ai – Ai = 0, the above expression can be rearranged as 1/2*(∑i=1n ∑j=1n (Ai-Aj)2) which can be further be simplified using the identity:
(A – B)2 = A2 + B2 – 2 * A * B
As 1/2*(∑i=1n ∑j=1n (Ai2 + Aj2 – 2*Ai*Aj)) = 1/2 * (2*n*∑i=1n Ai2 – 2*∑i=1n (Aj * ∑j=1n Aj))
The final expression is n*∑i=1n Ai2 – (∑i=1nAi)2 which can be computed by linearly iterating over the array.
Below is the implementation of the above approach:
C++
// C++ program for the above approach #include <bits/stdc++.h> using namespace std; // Function to calculate sum of squares // of differences of all possible pairs void sumOfSquaredDifferences( int arr[], int N) { // Stores the final sum int ans = 0; // Stores temporary values int sumA = 0, sumB = 0; // Traverse the array for ( int i = 0; i < N; i++) { sumA += (arr[i] * arr[i]); sumB += arr[i]; } sumA = N * sumA; sumB = (sumB * sumB); // Final sum ans = sumA - sumB; // Print the answer cout << ans; } // Driver Code int main() { // Given array int arr[] = { 2, 8, 4 }; // Size of the array int N = sizeof (arr) / sizeof (arr[0]); // Function call to find sum of square // of differences of all possible pairs sumOfSquaredDifferences(arr, N); return 0; } |
Java
// Java program for the above approach class GFG{ // Function to calculate sum of squares // of differences of all possible pairs static void sumOfSquaredDifferences( int arr[], int N) { // Stores the final sum int ans = 0 ; // Stores temporary values int sumA = 0 , sumB = 0 ; // Traverse the array for ( int i = 0 ; i < N; i++) { sumA += (arr[i] * arr[i]); sumB += arr[i]; } sumA = N * sumA; sumB = (sumB * sumB); // Final sum ans = sumA - sumB; // Print the answer System.out.println(ans); } // Driver Code public static void main (String[] args) { // Given array int arr[] = { 2 , 8 , 4 }; // Size of the array int N = arr.length; // Function call to find sum of square // of differences of all possible pairs sumOfSquaredDifferences(arr, N); } } // This code is contributed by AnkThon |
Python3
# Python3 program for the above approach # Function to calculate sum of squares # of differences of all possible pairs def sumOfSquaredDifferences(arr, N): # Stores the final sum ans = 0 # Stores temporary values sumA, sumB = 0 , 0 # Traverse the array for i in range (N): sumA + = (arr[i] * arr[i]) sumB + = arr[i] sumA = N * sumA sumB = (sumB * sumB) # Final sum ans = sumA - sumB # Print the answer print (ans) # Driver Code if __name__ = = '__main__' : # Given array arr = [ 2 , 8 , 4 ] # Size of the array N = len (arr) # Function call to find sum of square # of differences of all possible pairs sumOfSquaredDifferences(arr, N) # This code is contributed by mohit kumar 29. |
C#
// C# program for the above approach using System; class GFG{ // Function to calculate sum of squares // of differences of all possible pairs static void sumOfSquaredDifferences( int []arr, int N) { // Stores the final sum int ans = 0; // Stores temporary values int sumA = 0, sumB = 0; // Traverse the array for ( int i = 0; i < N; i++) { sumA += (arr[i] * arr[i]); sumB += arr[i]; } sumA = N * sumA; sumB = (sumB * sumB); // Final sum ans = sumA - sumB; // Print the answer Console.WriteLine(ans); } // Driver Code public static void Main( string [] args) { // Given array int []arr = { 2, 8, 4 }; // Size of the array int N = arr.Length; // Function call to find sum of square // of differences of all possible pairs sumOfSquaredDifferences(arr, N); } } // This code is contributed by AnkThon |
Javascript
<script> // Javascript program for the above approach // Function to calculate sum of squares // of differences of all possible pairs function sumOfSquaredDifferences(arr, N) { // Stores the final sum let ans = 0; // Stores temporary values let sumA = 0, sumB = 0; // Traverse the array for (let i = 0; i < N; i++) { sumA += (arr[i] * arr[i]); sumB += arr[i]; } sumA = N * sumA; sumB = (sumB * sumB); // Final sum ans = sumA - sumB; // Print the answer document.write(ans); } // Driver Code // Given array let arr = [ 2, 8, 4 ]; // Size of the array let N = arr.length; // Function call to find sum of square // of differences of all possible pairs sumOfSquaredDifferences(arr, N); // This code is contributed by subhammahato348 </script> |
56
Time Complexity: O(N)
Auxiliary Space: O(1)
Please Login to comment...