مجموع المنتج على جميع المجموعات مع عنصر واحد من كل مجموعة

StackOverflow https://stackoverflow.com/questions/2097988

  •  21-09-2019
  •  | 
  •  

سؤال

بالنظر إلى أن لدي مجموعات مميزة غير فارغة (المسمى z [1] ، z [2] ، ... ، z [m]) ، أهدف إلى حساب مجموع جميع المجموعات الفرعية الممكنة حيث يوجد عنصر واحد بالضبط من كل منهما جلس. يتم تعريف حجم كل مجموعة فرعية على أنه نتاج لأعضائها. علي سبيل المثال:

Z[ 1 ] = {1,2,3}

Z[ 2 ] = {4,5}

Z[ 3 ] = {7,8}

يجب أن يؤدي إلى:

1*4*7 + 1*4*8 + 1*5*7 + 1*5*8 + 2*4*7 + 2*4*8 + 2*5*7 + 2*5*8 + 3*4*7 + 3*4*8 + 3*5*7 + 3*5*8 = 810

في حين أن هذا سهل الترميز (بأي لغة) ، هل هذا إعادة صياغة للمشاهير مشكلة مجموع مجموعة؟ إذا لم يكن الأمر كذلك ، فيرجى تقديم خوارزمية زمنية متعددة الحدود تحسب هذا المبلغ (Pseudo-Code أو Python المفضل!). إذا لم تكن هناك خوارزمية زمنية متعددة الحدود ، فيرجى توضيح السبب.

هل كانت مفيدة؟

المحلول

من السهل رؤية ذلك (1 + 2 + 3) * (4 + 5) * (7 + 8) = 810.

>>> from operator import mul
>>> from functools import reduce
>>> z = [{1,2,3}, {4,5}, {7,8}]
>>> s = reduce(mul, (sum(zz) for zz in z))
>>> s
810

ما هي وظيفة Python مثل Sum () ولكن للضرب؟ المنتج()؟

أنا شخصياً أعتقد أن Guido اتخذ قرارًا فظيعًا بخصوص Mul.

نصائح أخرى

>>> z1 = [1, 2, 3]
>>> z2 = [4, 5]
>>> z3 = [7, 8]
>>> s = 0
>>> for a in z1:
        for b in z2:
            for c in z3:
                s += a*b*c      
>>> s
810
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top