Frage

Da ich m nicht leer verschiedene Sätze (mit der Bezeichnung Z [1], Z [2], ..., Z [m]) habe, versuche ich die Summe aller möglichen Teilmengen zu berechnen, wo es genau ist eine Element aus jedem Satz. Die Größe der einzelnen Teilmenge ist definiert als das Produkt seiner Mitglieder zu sein. Zum Beispiel:

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

Z[ 2 ] = {4,5}

Z[ 3 ] = {7,8}

Sollte in Folge:

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

Während dies leicht zu Code ist (in jeder Sprache), ist dies eine Neuformulierung der berühmten Teilmenge Summe Problem ? Wenn nicht, bitte eine Polynomialzeitalgorithmus, der diese Summe berechnet (Pseudo-Code oder Python bevorzugt!). Wenn kein Polynomialzeitalgorithmus existiert bitte erklären, warum.

War es hilfreich?

Lösung

Es ist leicht zu sehen, dass (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

Was ist die Python-Funktion wie sum () aber für die Multiplikation ? Produkt ()?

Ich persönlich denke, dass Guido eine schreckliche Entscheidung über mul gemacht.

Andere Tipps

>>> 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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top