Finden Sie alle Kombinationen aus einer Liste von zahlen mit einer gegebenen Summe
Habe ich eine Liste von zahlen, z.B.
numbers = [1, 2, 3, 7, 7, 9, 10]
Wie Sie sehen können, zahlen können mehr als einmal erscheinen in dieser Liste.
Ich brauchen, um alle Kombinationen dieser zahlen, dass eine bestimmte Summe, z.B. 10
.
Elemente in den Kombinationen dürfen nicht wiederholt werden, aber jedes Element in numbers
behandelt werden muss, eindeutig, das bedeutet, dass z.B. die beiden 7
in der Liste repräsentieren verschiedene Elemente mit dem gleichen Wert.
Die Reihenfolge ist unwichtig, so dass [1, 9]
und [9, 1]
sind die gleiche Kombination.
Gibt es keine Längenbeschränkungen für die Kombinationen, [10]
ist genauso gültig, wie [1, 2, 7]
.
Wie kann ich erstellen Sie eine Liste mit allen Kombinationen, die die genannten Kriterien erfüllen?
In diesem Beispiel wäre es [[1,2,7], [1,2,7], [1,9], [3,7], [3,7], [10]]
InformationsquelleAutor Byte Commander | 2015-12-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Könnten Sie itertools zu Durchlaufen, jede Kombination, jeder möglicher Größe, und filter raus, alles was nicht Summe um 10:
Ergebnis:
Leider ist dies so etwas wie O(2^N) Komplexität, so dass es nicht geeignet für die input-Listen, die größer als, sagen wir, 20 Elemente.
InformationsquelleAutor Kevin
Den Lösung @kgoodrick angeboten ist groß, aber ich denke, es ist mehr nützlich als generator:
list(subset_sum([1, 2, 3, 7, 7, 9, 10], 10))
Erträge[[1, 2, 7], [1, 2, 7], [1, 9], [3, 7], [3, 7], [10]]
.Was wäre die Zeit, die Komplexität dieser code?
InformationsquelleAutor Martin Valgur
Diese Frage wurde vorher gefragt, siehe @msalvadores Antwort hier. Ich aktualisierte den python-code zur Ausführung in python 3:
InformationsquelleAutor kgoodrick