Задний план
На момент написания этой статьи проблема P против NP все еще не решена, но вы, возможно, слышали о новой статье Норберта Блюма, в которой утверждается, что P! = NP, что уже считается ошибочным (но мы увидим).
Проблема, обсуждаемая в этой статье, является проблемой клики . По крайней мере, это то, что я прочитал в газетной статье, так что поправьте меня, если я ошибаюсь, но в любом случае я бы хотел, чтобы вы написали программу, которая решает следующий вариант:
Задание
Предположим, у нас большая школа с большим количеством учеников. У каждого из этих учеников есть друзья в этой школе. Клика студентов представляет собой группа , состоящая только из студентов , которые являются друзьями с каждым другим членом .
Ваша программа будет получать пары студентов, которые являются друзьями в качестве входных данных. Исходя из этой информации, программа должна найти размер самой большой клики . Студенты идентифицируются целочисленными идентификаторами .
Если вы предпочитаете математические термины, это означает, что вы задаете ребра неориентированного графа, каждый из которых идентифицируется двумя узлами.
вход
Ваш вход будет непустым списком положительных целых пар, например [[1,2],[2,5],[1,5]]
. Вы можете использовать этот ввод в любой разумной форме, например, как массив массивов, как строки текста, содержащие по два числа в каждой и т. Д.
Выход
Ожидаемый результат - одно число n >= 2
: размер самой большой клики. С приведенным выше примером ввода, результат будет 3
, как и все студенты ( 1
,2
и 5
) являются друзьями друг с другом.
Контрольные примеры
[[1,2]]
=> 2
[[1,2],[3,1],[3,4]]
=> 2
[[1,2],[2,5],[1,5]]
=> 3
[[2,5],[2,3],[4,17],[1,3],[7,13],[5,3],[4,3],[4,1],[1,5],[5,4]]
=> 4 (the largest clique is [1,3,4,5])
[[15,1073],[23,764],[23,1073],[12,47],[47,15],[1073,764]]
=> 3 (the largest clique is [23,764,1073])
[[1296,316],[1650,316],[1296,1650],[1296,52],[1650,711],[711,316],[1650,52],
[52,711],[1296,711],[52,316],[52,1565],[1565,1296],[1565,316],[1650,1565],
[1296,138],[1565,138],[1565,711],[138,1650],[711,138],[138,144],[144,1860],
[1296,1860],[1860,52],[711,1639]]
=> 6 (the largest clique is [52,316,711,1296,1565,1650])
Вы можете использовать эту (глупую) ссылочную реализацию (печатает дополнительный вывод с -d
флагом) для проверки результатов других тестовых случаев.
Правила
- Ваша программа не требует определенного результата при неверном вводе. Таким образом, вы можете предположить, что:
- вы всегда получите хотя бы одну пару идентификаторов
- каждая пара состоит из двух разных идентификаторов
- пара не появляется дважды (поменять местами идентификаторы все равно будет та же пара)
- Вашему алгоритму не разрешено устанавливать верхнюю границу размера ввода. Чисто технические ограничения и ограничения, установленные вашим языком / средой (например, размер стека, время вычислений и т. Д.), Конечно, неизбежны.
- Стандартные лазейки запрещены.
- Это код-гольф , поэтому выигрывает самый короткий код в байтах.
- Если ваш алгоритм имеет сложность за полиномиальное время, вы
-1
сразу получаете оценку независимо от размера вашего кода, но в этом случае вы можете отправить свое решение куда-нибудь еще. ;)
-1
это вполне заслуженно ;)