Простой алгоритм «разделяй и властвуй»:
- Если есть только два человека: Соедините их и верните.
В противном случае:
- Разделите группу на две группы одинакового размера.
- Найдите все пары в каждой группе, используя этот алгоритм рекурсивно.
Соедините два списка.
Например, [[(a,b)]]
и [[(c,d)]]
становится [[(a,b),(c,d)]]
.
Найти пары поперек двух групп, вращая две группы.
Например, [[(a,c),(b,d)],[(a,d),(b,c)]]
- Возврат
(3)
+ (4)
Этот алгоритм работает за O(n^2)
время, которое является оптимальным, поскольку он генерирует (n-1)
раундов n/2
пар.
Длявосемь игроков вы получите 7 раундов:
[(a,b), (c,d), (e,f), (g,h)]
[(a,c), (b,d), (e,g), (f,h)]
[(a,d), (b,c), (e,h), (f,g)]
[(a,e), (b,f), (c,g), (e,h)]
[(a,f), (b,g), (c,h), (e,e)]
[(a,g), (b,h), (c,e), (e,f)]
[(a,h), (b,e), (c,f), (e,g)]