【发布时间】:2021-01-28 03:52:44
【问题描述】:
对于我作为一名实用程序员的明显数学缺陷,我向这个问题表示歉意。自从我在高中代数上取得好成绩,然后在任何更高的科目上都失败了,已经有 40 多年了。 “NP-complete”和“NP-hard”问题的概念一直很难掌握,但我尝试过。我什至购买并研究了似乎是此类问题的原始指南,Computers and Intractability: A Guide to the Theory of NP-Completeness,Michael R. Garey 和 David S. Johnson。 /p>
https://goodreads.com/book/show/284369.Computers_and_Intractability/ 也许吧。希望问题本身足够清楚。到目前为止,对于从任何地方提取所有唯一的完整子图(其中所有不同的节点(顶点)相互连接(通过唯一的边))的特定问题,什么是最好的公开可用的蛮力算法(具有有效的分支修剪)随机无向图?也就是说,该算法应该能够首先提取最大的唯一完整子图,无论有多少子图,然后按此顺序提取所有较小的唯一完整子图(根据定义,我认为)不包含在任何更大的唯一完整子图中,从而避免重复产生非唯一(隐含)结果。 哎呀,像这样用清晰的英语拼写出来让我有点头疼。希望这个描述仍然足够简单。一个标准的 C/C++/(甚至是 Python)库来为这个功能提供合理的计算资源,比如带有 64GB/128GB DRAM 的 Ryzen 5 3600 盒子会很棒,特别是如果可以在 1,024 个节点的完整分析中完成一两天,但我会尽我所能,非常感谢。 如果网络上某处有涵盖该主题的英语常见问题解答或文章,非数学家也能理解,那就更好了! 编辑:以下论文中的语言确实有点超出我的想象,但对于那些计算数学家来说,你能确认它实际上确实解决了核心问题本身吗?如果是这样,我可以开始英勇的努力来理解这个“Bron-Kerbosch”算法,并相信它是正确的道路。 -_- “生成所有最大团和计算实验的最坏情况时间复杂度”,作者:Etsuji Tomita、Akira Tanaka 和 Haruhisa Takahashi (电子通信大学信息与通信工程系,Chofugaoka 1-5-1, Chofu, Tokyo 182-8585, Japan)
(Toyota Techno Service Corporation, Imae 1-21, Hanamotocho, Toyota, Aichi 470–0334, Japan) https://snap.stanford.edu/class/cs224w-readings/tomita06cliques.pdf
【问题讨论】:
-
您好@owlsupport,欢迎来到 Stack Overflow!我可以很快确认您链接的论文是一个好方法。它提供了一种算法来查找所有最大团(它们是完整的子图,如您所愿,未被更大的子图包含),并且在最坏情况下在已证明的最佳渐近时间内这样做。但是,您的图表可能不是最坏的情况,在这种情况下,可能会有更新更快的方法。您能否提供有关图表的更多信息?具体来说,边的数量可能非常重要,因为稀疏图更容易解决这个问题。
-
如果有问题的图表不是敏感信息,您也可以考虑简单地将图表上传到某个地方。
-
非常感谢您,ADdV!那篇论文看起来越来越有趣了!其中复杂的含义开始渗入我的认知视野。稀疏图具有适当的剪枝启发式方法对有限的计算资源施加的负载要小得多,这是完全有道理的。老实说,我更感兴趣的是了解如何自己为经典集团问题的较小实例编写这样的代码(如上述论文中所见)。这将为解决某些现实问题的更复杂的数据集铺平道路。
-
顺便说一句,1,024 个节点的数字反映了对此类实际问题可能规模的粗略估计。我之所以选择这个数字,部分原因是它足够大,足以引起人们对由此产生的强大数据集的限制——如果我没记错的话,最多 1,024 个节点的最大集团可以或多或少有效地表示为比特适合 128 字节 DRAM 或硬盘存储的数组,不计算开销。
标签: algorithm graph-theory graph-algorithm np-complete clique-problem