Autor |
Nachricht |
Nimroy
Community Manager Threadersteller
Dabei seit: 26.05.2004
Ort: zwischen Köln und D'dorf
Alter: 45
Geschlecht:
|
Verfasst Fr 08.11.2013 16:24
Titel Mechanismus um Pärchen zu bilden |
|
|
Servus
In einem kleinen, selbstgeschriebenen Softwaretool geht es darum, aus einer Liste von Namen Pärchen zu bilden. Weil es hier aber nicht um ne Swingerparty geht, darf jeder nur ein Partner haben und sich auch nicht mit sich selber paaren.
Bisher mache ich das - gefüht - mit der Hand am Arm. Die Liste steht in einem Aray, ich bestimme die Länge und benutze dann Zufalszahlen. Für die Postion 1 in der Liste bestimme ich eine Zufallszahl in der max. Länge des Arays, und vergleiche, ob dies Zahl schon im ziel-Aray vorhanden ist oder nicht. Wenn vorhandenoder der eigne Index, dann solange neu, bis das nicht mehr der Fall ist. Danach dann die nächste Position usw.
Performant ist natürlich was anderes, schon bei Listen mit 10 oder mehr Personen. Und weil ich das Projekt jetzt mal ein wenig entstauben muss, frage ich mich gerade, ob es da nicht auch was besseres gibt, als meinen Zufalls-Mechanismus.
Wie würdet ihr dieses zuordnungsproblem angehen?
|
|
|
|
|
top
Moderator
Dabei seit: 25.11.2003
Ort: Hedwig Holzbein
Alter: 52
Geschlecht:
|
Verfasst Fr 08.11.2013 17:13
Titel
|
|
|
Kannst du die bereits ausgewählten Einträge nicht einfach aus der Liste entfernen und die berechnete Zufallszahl zur Auswahl immer um einen verringern?
Ich bin kein Programmierer, daher stelle ich mir das recht einfach vor...
|
|
|
|
|
Anzeige
|
|
|
Struwwelpeter
Dabei seit: 25.08.2005
Ort: Stuttgart
Alter: 37
Geschlecht:
|
Verfasst Fr 08.11.2013 18:31
Titel
|
|
|
Falls die Namen bei jedem Aufruf neu gepaart werden sollen kannst du die Liste shuffeln (Fisher-Yates shuffle), dann lassen sich daraus die zufälligen Paarungen ablesen.
z.B.
Code: | random.shuffle(namen)
for i in range(0,len(namen),2):
print namen[i:i+2] |
|
|
|
|
|
Nimroy
Community Manager Threadersteller
Dabei seit: 26.05.2004
Ort: zwischen Köln und D'dorf
Alter: 45
Geschlecht:
|
Verfasst Fr 08.11.2013 19:22
Titel
|
|
|
Naja, ich würde die Liste shuffeln und dann in ne Datenbank-Tabelle wegschreiben.
Aber der Ansatz klingt schon mal spannend. Muss ich mal durchspielen.
Aber weitere Ansätzeund Vorschläge gerne!
Zuletzt bearbeitet von Nimroy am Fr 08.11.2013 19:23, insgesamt 1-mal bearbeitet
|
|
|
|
|
remote
Dabei seit: 10.11.2006
Ort: /var/www/
Alter: 109
Geschlecht:
|
Verfasst Fr 08.11.2013 20:44
Titel
|
|
|
Nimroy hat geschrieben: |
Aber weitere Ansätzeund Vorschläge gerne! |
Besser nicht - effizienter als shuffle + abspulen wird es nicht.
|
|
|
|
|
Nimroy
Community Manager Threadersteller
Dabei seit: 26.05.2004
Ort: zwischen Köln und D'dorf
Alter: 45
Geschlecht:
|
Verfasst Fr 08.11.2013 23:22
Titel
|
|
|
Struwwelpeter hat geschrieben: | Falls die Namen bei jedem Aufruf neu gepaart werden sollen kannst du die Liste shuffeln (Fisher-Yates shuffle), dann lassen sich daraus die zufälligen Paarungen ablesen.
z.B.
Code: | random.shuffle(namen)
for i in range(0,len(namen),2):
print namen[i:i+2] |
|
Okay. Dann würde ich einmal die originale Liste haben, dagegen die geshuffelte legen und dann noch überprüfen, dass es nicht die gleichen Inhalte sind.
|
|
|
|
|
remote
Dabei seit: 10.11.2006
Ort: /var/www/
Alter: 109
Geschlecht:
|
Verfasst Sa 09.11.2013 00:08
Titel
|
|
|
Nimroy hat geschrieben: |
Okay. Dann würde ich einmal die originale Liste haben, dagegen die geshuffelte legen und dann noch überprüfen, dass es nicht die gleichen Inhalte sind. |
wieso die zusätzliche überprüfung?
|
|
|
|
|
Nimroy
Community Manager Threadersteller
Dabei seit: 26.05.2004
Ort: zwischen Köln und D'dorf
Alter: 45
Geschlecht:
|
Verfasst Sa 09.11.2013 09:09
Titel
|
|
|
Kann da nicht theoretisch rauskommen, dass Person C als Partner Person C bekommt?
|
|
|
|
|
|
|
|
Ähnliche Themen |
[C4D] Diamanten zufällig ein Wort bilden lassen
|
|