Fondo
En el momento de escribir esto, el problema P vs NP aún no se ha resuelto, pero es posible que haya oído hablar del nuevo artículo de Norbert Blum que afirma que P! = NP, que ya se sospecha que es erróneo (pero ya veremos).
El problema discutido en este documento es el problema de la camarilla . Al menos eso es lo que leo en un artículo de periódico, así que corrígeme si me equivoco, pero en cualquier caso, me gustaría que escribieras un programa que resuelva la siguiente variante:
La tarea
Supongamos que tenemos una escuela grande con muchos estudiantes. Cada uno de estos estudiantes tiene algunos amigos en esta escuela. Una camarilla de estudiantes es un grupo compuesto solo por estudiantes que son amigos entre sí .
Su programa recibirá pares de estudiantes que son amigos como entrada. A partir de esta información, el programa debe encontrar el tamaño de la camarilla más grande . Los estudiantes se identifican por ID enteros .
Si prefiere términos matemáticos, esto significa que está alimentado los bordes de un gráfico no dirigido, identificado por dos nodos cada uno.
Entrada
Su entrada será una lista no vacía de pares enteros positivos, por ejemplo [[1,2],[2,5],[1,5]]
. Puede tomar esta entrada en cualquier forma sensata, por ejemplo, como una matriz de matrices, como líneas de texto que contienen dos números cada una, etc.
Salida
El resultado esperado es un número único n >= 2
: el tamaño de la camarilla más grande. Con el ejemplo de entrada anterior, el resultado sería 3
, ya que todos los estudiantes ( 1
, 2
y 5
) son amigos entre sí.
Casos de prueba
[[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])
Puede usar esta implementación de referencia (estúpida) (imprime una salida adicional con una -d
marca) para verificar los resultados de otros casos de prueba.
Las normas
- Su programa no necesita un resultado definido en una entrada no válida. Entonces puedes asumir que:
- siempre obtendrá al menos un par de ID
- cada par consta de dos ID diferentes
- ningún par aparece dos veces (intercambiar los lugares de las ID seguiría siendo el mismo par)
- Su algoritmo no puede establecer un límite superior en el tamaño de entrada. Por supuesto, las limitaciones y limitaciones puramente técnicas establecidas por su idioma / entorno (como el tamaño de la pila, el tiempo de cálculo, etc.) son inevitables.
- Las lagunas estándar están prohibidas.
- Este es el código de golf , por lo que gana el código más corto, medido en bytes.
- Si su algoritmo tiene una complejidad de tiempo polinomial, obtiene
-1
una puntuación inmediata independientemente del tamaño de su código, pero en ese caso, es posible que desee enviar su solución a otro lugar. ;)
-1
es bien merecido ;)