Берем рандомный вид спорта.
В базе у нас есть табличка №1 структура такая:
Команда Победа Проигрыш
Команда_1 8 18
Команда_2 2 9
Команда_3 10 2
Команда_4 5 8
Команда_N 9 10
И табличка №2, структура такая:
Домашний матч Выездной матч Дата
Команда_1 Команда_2 19.12.2005
Команда_3 Команда_4 20.12.2005
Команда_N Команда_M 30.12.2005
Команды естественно повторяются и могут быть как в первой колонке так и во второй.
А теперь задачка. Нужно найти в какой день играют самая сильная команда с самой слабой.
В такой постановке вроде всё просто нахожу самую сильную и самую слабую и проверяю 2 варианта:
Слабая_Команда - Сильная_Команда
Сильная_Команда - Слабая_Команда
Но что если нам необходимо найти например 10 самых сильных и 10 самых слабых команд и найти в расписании их?
Существует оптимальный алгоритм? Или нужно брутфорсить все против всех?
Если кому-то интересно как я решал.
Взял первую таблицу присоединил к ней 2 столбца в которые записывал является ли команда лузером или фаворитом.
Домашний матч Выездной матч Дата Победитель Проигравший
Если в колонке Победитель и Проигравший было по единичке, то совпадение найдено.
10 самых сильных ,1 самая сильная команда и самые сильные 9 из тех кто останется после после первого прогона круга алгоритма (исключая ту что уже стала самой сильной) или не так?