Problem mit Auflistungen/Permutationen
Verfasst: Freitag 15. April 2011, 13:43
Hi,
ich hab mir in den Sinn gesetzt, alle Möglichkeiten auszugeben, wie man k Zahlen auf n Stellen verteilen kann. Dabei wäre mir die Reihenfolge wichtig, jedoch sollen keine Wiederholungen vorkommen. Dabei möchte ich k und n selbst variabel bestimmen können (für nen festen wert hab ichs mit entsprechend vielen schleifen gelöst)
Mein Ansatz, das ganze über Rekursionen zu basteln läuft auf den ersten Anschein gut durch, allerdings finden sich einige doppelte Kombinationen. Nun meine Frage: wie könnte man das besser lösen?
liefert bei mir
Dabei sind offensichtlich ein paar Kombinationen zuviel dabei. Habe die Idee, alle Kombinationen zu speichern und dann eine Abfrage darauf zu machen, ob eine Kombination neu ist, wieder verworfen
- wird dann richtig böse vom Speicher her bei größeren Werten für k und n.
Bin momentan wieder etwas ratlos und für Ideen und Verbesserungsvorschläge aller Art aufgeschlossen.
Danke euch schonmal
ich hab mir in den Sinn gesetzt, alle Möglichkeiten auszugeben, wie man k Zahlen auf n Stellen verteilen kann. Dabei wäre mir die Reihenfolge wichtig, jedoch sollen keine Wiederholungen vorkommen. Dabei möchte ich k und n selbst variabel bestimmen können (für nen festen wert hab ichs mit entsprechend vielen schleifen gelöst)
Mein Ansatz, das ganze über Rekursionen zu basteln läuft auf den ersten Anschein gut durch, allerdings finden sich einige doppelte Kombinationen. Nun meine Frage: wie könnte man das besser lösen?
Code: Alles auswählen
import numpy
zahlen = set(range(0,3))
anzahl_stellen = 3
Reihenfolge = numpy.zeros(anzahl_stellen)
count = 0 # dient zur kontrolle (anzahl der Kombinationen kann man ja leicht über n! / (n-k)! ausrechnen)
def perm(zahlen, anzahl):
if len(zahlen) < anzahl:
print "Geht nicht..."
return 0
if anzahl-1 >=0:
for i in zahlen:
Reihenfolge[anzahl-1]=i
perm(zahlen, anzahl-1)
if len(set(Reihenfolge)) == anzahl_stellen: # sortiert Kombinationen aus, die Mehrfachnennungen von Zahlen beinhalten
global count
count += 1
print Reihenfolge
perm(zahlen, anzahl_stellen)
print count
Code: Alles auswählen
[ 2. 1. 0.]
[ 2. 1. 0.]
[ 1. 2. 0.]
[ 2. 0. 1.]
[ 2. 0. 1.]
[ 0. 2. 1.]
[ 1. 0. 2.]
[ 0. 1. 2.]
Bin momentan wieder etwas ratlos und für Ideen und Verbesserungsvorschläge aller Art aufgeschlossen.
Danke euch schonmal