Wie erzeugt man in Python alle Permutationen einer Liste, unabhängig vom Typ der Elemente in dieser Liste?
Zum Beispiel:
permutations([])
[]
permutations([1])
[1]
permutations([1, 2])
[1, 2]
[2, 1]
permutations([1, 2, 3])
[1, 2, 3]
[1, 3, 2]
[2, 1, 3]
[2, 3, 1]
[3, 1, 2]
[3, 2, 1]
9 Stimmen
Ich stimme mit der rekursiven, akzeptierten Antwort überein - HEUTE. Das Problem ist jedoch immer noch ein großes Problem der Informatik. Die akzeptierte Antwort löst dieses Problem mit exponentieller Komplexität (2^N N=len(list)) Lösen Sie es (oder beweisen Sie, dass Sie es nicht können) in Polynomialzeit :) Siehe "Travelling-Salesman-Problem".
60 Stimmen
@FlipMcF Es wird schwierig sein, es in Polynomialzeit zu "lösen", da es faktorielle Zeit braucht, um auch nur die Ausgabe aufzuzählen... also, nein, es ist nicht möglich.
0 Stimmen
@FlipMcF: Nein, das ist es nicht wirklich: a) nur um die optimal Lösung, nicht gut genug Lösungen, die für reale Zwecke gut genug sind, und b) wir müssen nicht alle Knoten im Suchraum, d. h. alle Permutationen, erweitern; das ist es, was heuristische Algorithmen wie A*