2016-06-06 11 views
-8

Wenn N = 405, wie generiere ich alle Teilmengen und finde dann das Produkt der einzelnen Teilmengen? Wie in diesem Fall wäre die Menge {0,4,5,40,05,45,405} und ihre Produkte würden zu einer Menge {0,4,5,0,0,20,0} führen?Mit einer positiven Ganzzahl N als Eingabe, wie finde ich das Produkt der Zahlen in ihren Teilmengen?

EDIT: Es ist eine Multi-Set von nicht-leeren Untersequenzen.

+3

In erster Linie, was hast du probiert? Wie kommst du auf die Teilmengen? Warum hat es nicht '{40}'? –

+0

Eh, könnten Sie ein bisschen mehr ausarbeiten? Warum enthält das letzte Set '20 == 04 * 05', hat aber nicht' 180 == 04 * 45'? –

+1

Arbeiten wir mit * set * oder * multiset *? Z.B. im Fall von * multiset * '122 -> {1, 2, 2, 12, 22, 122} -> {..., 4 == 2 * 2, ...}' während im Fall von Set '122 - > {1, 2, 12, 22, 122} 'Es gibt keine' 4' in der Antwort –

Antwort

0

Nun, es gibt eine sehr einfache und naive rekursive Lösung zum Abrufen aller Teilmengen.

Sie nehmen ein Element aus Ihrem Set, dann finden Sie alle Untergruppen für dieses neue, kleinere Set. Dann kopieren Sie das Ergebnis und fügen das zuvor entfernte Element zur Kopie hinzu. Fügen Sie die Ergebnisse zusammen und Sie sind fertig. Zum Beispiel:

{1,2,3} 

Take out 1 and find all subsets of {2,3} giving you: 
{{}, {2}, {3}, {2,3}} 

Now copy this to give you 
A = {{}, {2}, {3}, {2,3}} 
B = {{}, {2}, {3}, {2,3}} 

Now add 1 to each set in A, giving you 
{{1}, {1,2}, {1,3}, {1,2,3}} 

combine it with B 
{{1}, {1,2}, {1,3}, {1,2,3}, {}, {2}, {3}, {2,3}} 

Hier einige Code:

function subsets(aSet) { 
    if (aSet.isEmpty()) { 
     return [theEmptySet] 
    } 

    let lastElement = aSet.getLast() 
    let aSmallerSet = aSet.removeLast() 

    let subsetsOfSmallerSet = subsets(aSmallerSet) 
    let subsetsContainingLastElement = subsetsOfSmallerSet.map(set => set.insert(lastElement)) 

    return subsetsOfSmallerSet.concat(subsetsContainingLastElement) 
} 

ich Sie alle Untergruppen der Ziffern einer bestimmten Zahl zu erhalten bedeuten ich davon aus. Angenommen, Sie haben die Ziffern aufgeteilt und in Zahlen zerlegt, dann können Sie reduce verwenden, um das Produkt zu erhalten.

Ahh, aber hier haben Sie ein Problem mit dem leeren Satz, weil Sie nicht einen Anfangswert zu reduzieren geben. Es scheint jedoch, dass Sie den leeren Satz in Ihrem Beispiel ignoriert haben, also können Sie ihn einfach ausfiltern, und dann funktioniert dieser Code.

1

Überprüfen Sie diese site es gibt Ihnen die Logik für die Leistung einer bestimmten Menge zu erhalten. Sobald Sie die Power-Set-Elemente erhalten, multiplizieren Sie jedes Element innerhalb eines Sets, um das Produkt wie gewünscht zu erhalten.