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.
In erster Linie, was hast du probiert? Wie kommst du auf die Teilmengen? Warum hat es nicht '{40}'? –
Eh, könnten Sie ein bisschen mehr ausarbeiten? Warum enthält das letzte Set '20 == 04 * 05', hat aber nicht' 180 == 04 * 45'? –
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 –