背景
在撰写本文时,P与NP的问题仍未解决,但是您可能已经听说过Norbert Blum的新论文,声称P!= NP已被证明是错误的(但我们将会看到)。
本文讨论的问题是集团问题。至少这是我在报纸上读到的,如果我错了,请更正我,但是无论如何,我希望您编写一个解决以下变体的程序:
任务
假设我们有一所大学校,有很多学生。每个学生在这所学校都有一些朋友。一个集团的学生是仅由学生谁是朋友与一组的每个其他成员。
您的程序将接收成对的朋友,作为他们的输入。从这些信息中,程序必须找到最大的集团的规模。学生用整数ID标识。
如果您更喜欢数学术语,这意味着您将获得一个无向图的边缘,该边缘分别由两个节点标识。
输入项
您的输入将是一个正整数对的非空列表,例如[[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
标记输出额外的输出)来验证其他测试用例的结果。
规则
- 您的程序不需要输入无效的已定义结果。因此,您可以假设:
- 您将始终获得至少一对 ID
- 每对包含两个不同的ID
- 没有对出现两次(交换ID的位置仍是同一对)
- 您的算法不允许设置输入大小的上限。当然,纯粹的技术限制和由您的语言/环境设置的限制(例如堆栈大小,计算时间等)是不可避免的。
- 禁止出现标准漏洞。
- 这是code-golf,因此以字节为单位的最短代码胜出。
- 如果您的算法具有多项式时间复杂度,则
-1
无论代码大小如何,您都可以立即评分,但是在这种情况下,您可能希望将解决方案提交到其他地方。;)
-1
是当之无愧的 ;)