نظرا لمجموعة من الأعداد الصحيحة غير السالبة. وتتمثل المهمة في العثور على مجموع منتج عناصر جميع المجموعات الفرعية الممكنة. قد يُفترض أن الأرقام الموجودة في المجموعات الفرعية صغيرة وأن منتج الحوسبة لا يسبب تجاوزًا حسابيًا.
مثال :
Input : arr[] = {1 2 3} Output : 23 Possible Subset are: 1 2 3 {1 2} {1 3} {2 3} {1 2 3} Products of elements in above subsets : 1 2 3 2 3 6 6 Sum of all products = 1 + 2 + 3 + 2 + 3 + 6 + 6 = 23 النهج الساذج: النهج البسيط هو إنشاء كل المجموعات الفرعية الممكنة واحدة تلو الأخرى وحساب مجموع جميع العناصر. التعقيد الزمني لهذا النهج هو الأسي حيث أن هناك إجمالي 2ن- 1 مجموعات فرعية.
ان نهج فعال هو تعميم المشكلة برمتها في نمط ما. لنفترض أن لدينا رقمين أ و ب. يمكننا كتابة جميع منتجات المجموعة الفرعية الممكنة على النحو التالي: -
= a + b + ab = a(1+b) + b + 1 - 1 = a(1+b) + (1+b) - 1 = (a + 1) * (b + 1) - 1 = (1+a) * (1 + b) - 1
الآن خذ ثلاثة أرقام أ ب ج:-
= a + b + c + ab + bc + ca + abc = a + ac + b + bc + ab + abc + c + 1 - 1 = a(1+c) + b(1+c) + ab(1+c) + c + 1 - 1 = (a + b + ab + 1)(1+c) - 1 = (1+a) * (1+b) * (1+c) - 1
يمكن تعميم النمط أعلاه على أرقام n.
وفيما يلي تنفيذ الفكرة المذكورة أعلاه:
C++// C++ program to find sum of product of // all subsets. #include using namespace std; // Returns sum of products of all subsets // of arr[0..n-1] int productOfSubsetSums(int arr[] int n) { int ans = 1; for (int i = 0; i < n; ++i ) ans = ans * (arr[i] + 1); return ans-1; } // Driver code int main() { int arr[] = {1 2 3 4}; int n = sizeof(arr)/sizeof arr[0]; cout << productOfSubsetSums(arr n); return 0; }
Java // Java program to find sum of product of // all subsets. public class Subset { // Returns sum of products of all subsets // of arr[0..n-1] static int productOfSubsetSums(int arr[] int n) { int ans = 1; for (int i = 0; i < n; ++i ) ans = ans * (arr[i] + 1); return ans-1; } public static void main (String[] args) { int arr[] = {1 2 3 4}; int n = arr.length; System.out.println(productOfSubsetSums(arr n)); } } // This code is contributed by Saket Kumar
Python3 # Python3 program to # find sum of product of # all subsets. # Returns sum of products # of all subsets # of arr[0..n-1] def productOfSubsetSums(arr n): ans = 1; for i in range(0n): ans = ans * (arr[i] + 1) return ans-1 # Driver code arr = [1 2 3 4] n = len(arr) print (productOfSubsetSums(arr n)) # This code is contributed # by Shreyanshi Arun.
C# // C# program to find sum of // product of all subsets. using System; public class Subset { // Returns sum of products of all // subsets of arr[0..n-1] static int productOfSubsetSums(int []arr int n) { int ans = 1; for (int i = 0; i < n; ++i ) ans = ans * (arr[i] + 1); return ans-1; } // Driver Code public static void Main () { int []arr = {1 2 3 4}; int n = arr.Length; Console.Write(productOfSubsetSums(arr n)); } } // This code is contributed by Nitin Mittal.
PHP // PHP program to find sum of // product of all subsets. // Returns sum of products of // all subsets of arr[0..n-1] function productOfSubsetSums($arr $n) { $ans = 1; for ($i = 0; $i < $n; ++$i ) $ans = $ans * ($arr[$i] + 1); return $ans-1; } // Driver code $arr = array(1 2 3 4); $n = sizeof($arr); echo(productOfSubsetSums($arr $n)); // This code is contributed by Ajit. ?> JavaScript <script> // Javascript program to find sum of product of // all subsets. // Returns sum of products of all subsets // of arr[0..n-1] function productOfSubsetSums(arr n) { let ans = 1; for (let i = 0; i < n; ++i ) ans = ans * (arr[i] + 1); return ans-1; } // Driver code let arr = [1 2 3 4]; let n = arr.length; document.write(productOfSubsetSums(arr n)); // This code is contributed by Mayank Tyagi </script>
الإخراج
119
تعقيد الوقت: O(n)
المساحة المساعدة: O(1)
إنشاء اختبار