Фон
На момент написання цього завдання проблема P vs 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
є заслуженим ;)