Zastanawiam się tylko, czy istnieje już algorytm planowania turniejów, którego mógłbym użyć, a nawet nieco dostosować.
Oto moje wymagania:
- Każda zmienna liczba przeciwników należących do zmiennej liczby drużyn / klubów musi być sparowana z przeciwnikiem
- Dwóch przeciwników nie może pochodzić z tego samego klubu
- Jeśli jest nieparzysta liczba graczy, 1 z nich losowo wybierany jest na pożegnanie
Docenione zostaną wszelkie algorytmy związane z tego rodzaju zestawem wymagań.
EDYCJA: Muszę uruchomić to maksymalnie raz, tworząc pojedynki w pierwszej „rundzie” turnieju.
algorithms
barfoon
źródło
źródło
Odpowiedzi:
Jak widzę, chcesz znaleźć maksymalne dopasowanie na wykresie. W rzeczywistości węzły są graczami, łączą się ze sobą, jeśli nie są w tym samym klubie, teraz powinieneś znaleźć maksymalną liczbę krawędzi, które nie mają tego samego wierzchołka. Zobacz algorytm maksymalnego dopasowania Edmondsa .
źródło
Z mojego krótkiego czasu na Wikipedii dwadzieścia sekund temu wygląda na to, że musisz najpierw zdecydować o strategii eliminacji. Zobacz Wikipedia:
W artykule z pojedynczą eliminacją opisano techniki inicjowania (poszukiwany algorytm) dość ogólnie i wyglądało to pomocne, choć nie całkiem algorytm.
źródło
Tworząc to na bieżąco, wydaje się, że początkowy algorytm dopasowywania jest dość prosty:
Jeśli pozostanie jedna osoba, będzie to osoba losowa, z jednym wyjątkiem. Jeśli jeden klub ma więcej członków niż wszyscy przeciwnicy razem wzięci, resztki zawsze będą z tego klubu. Realistycznie rzecz biorąc, jest to bardzo rzadka sytuacja, a wybranie zakupu z innego klubu pozostawi jeszcze więcej osób.
źródło