PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [PHP] Kombinatorik, jeder gegen jeden


Gast
2009-06-07, 16:50:08
Hallo Forum :)

ich schreibe gerade an einem Tippspiel für Mannschaftssportarten und das klappt auch ganz gut. Was jetzt noch fehlt, um das Setup des Spiels einfacher zu gestalten, wäre eine Funktion "jeder gegen jeden".

Das heißt, wenn in Gruppe A 3 Mannschaften vertreten sind, soll folgende Liste erzeugt werden:

1 vs. 2
1 vs. 3
2 vs. 3

In Mathe bin ich nicht gerade allzu bewandert, weiß aber zumindest mal, dass wir uns im Teilgebiet der Kombinatorik bewegen.
Was ich rausgefunden habe:
Bei n Mannschaften gibt es n * (n-1) Möglichkeiten, da jede mit dem Rest kombiniert werden kann. Da doppelte Einträge allerdings keinen Sinn machen, müsste man das Ergebnis noch halbieren.

Naja, wie solch eine Funktion nun aussehen muss weiß ich aber nun erst nicht, da bringts mir nicht viel, die Anzahl aller Möglichkeiten zu kennen.

Ich hätte jetzt ganz Laienhaft angefangen, mit einer Schleife erstmal alle Paarungen für Mannschaft 1 zu erstellen.. das ganze dann für Mannschaft 2, 3 bis hin zu n.
Dann müssten aber noch alle doppelten Einträge raus, und da spätestens wüsste ich dann nichtmehr weiter. Auch PHP-technisch nicht, denn 1 vs. 2 und 2 vs. 1 ist zwar für mich das gleiche, aber für PHP nicht.

Vllt würde ich das irgendwie hingewurstelt bekommen, aber ich bin schon an einer optimalen Lösung interessiert und hoffe auf Antworten :)

Gruß

huha
2009-06-07, 17:02:08
Pseudocode. So halb.


for(int i = 1; i < n; i++) {
for(int u = i+1; u < n; u++) {
print "$i : $u";
}
}


-huha

Gast
2009-06-07, 17:24:48
Hallo huha, danke!

Hab ne Weile gebraucht bis ich verstanden habe, warum das funktioniert, aber im Nachinein ist es logisch.

Nur muss es statt kleiner besser kleiner gleich heißen, sonst ist n um eines größer als die Anzahl der Mannschaften.

Gruß

rotalever
2009-06-07, 20:59:25
Nur muss es statt kleiner besser kleiner gleich heißen, sonst ist n um eines größer als die Anzahl der Mannschaften.

Oder man fängt besser bei 0 an zu zählen.

Coda
2009-06-07, 22:22:29
Ne, dann stimmt das Ergebnis nicht.

rotalever
2009-06-07, 22:52:30
Ne, dann stimmt das Ergebnis nicht.
Bei der Ausgabe macht man dann ja +1;)

Coda
2009-06-08, 02:14:03
Langsamer :P