Hallo!
Vielleicht kann mit jemand mit mehr mathematischem Hintergrund als ich bei diesem Problem helfen:
Ich habe vor, für Turniere (speziell) oder Entscheidungsbäume (allgemein) ein Knock-Out-System in PHP zu erstellen. Dabei möchte ich natürlich auch die Anzahl an benötigten Matches ermitteln, wofür ich mir gerne eine Funktion basteln würde.
Gegeben ist lediglich die Anzahl der "Teilnehmer", rauskommen soll die Anzahl an "Begegnungen" oder "Runden", die nötig ist, um einen Sieger zu ermitteln.
RUNDE 1: X1 X2 X3 X4 X5 X6 X7
|_____| |_____| |_____| |
| | | |
RUNDE 2: X1 X4 X5 X7
|___________| |________|
| |
RUNDE 3: X4 X5
|_____________________|
|
SIEGER: X4
[/PHP]
In diesem Beispiel werden 3 Runden benötigt. Um diese "3" für alle möglichen Xn zu ermitteln, hätte ich gerne eine Funktion. Leider komme ich bei dem Problem auf keinen Trichter. Es scheint nur so zu sein, dass die Rundenzahl immer doppelt so lang gleich bleibt, wie die letzte... Beispiel:
1 Teilnehmer: 0 Runden (Ausnahmefall)
2 Teilnehmer: 1 Runde
3-4 Teilnehmer: 2 Runden
5-8 Teilnehmer: 4 Runden
Das würde für 9-16 Teilnehmer bedeuten, dass sie 8 Runden zu spielen hätten... Doch wie komme ich dafür auf einen mathematischen Ausdruck? Eine Schleife, die mir die Runden dann errechnet (for oder do) wäre weder performant noch sauber programmiert.
Vielen Dank für alle Anregungen, die da kommen. Gruß,
aikon