有没有人实现过Laszlo Babai的准多项式图同构?
http://people.cs.uchicago.edu/~laci/
我不是这方面的专家。我想知道 为什么不实施他的算法并运行它来验证其时间复杂度?
答案 0 :(得分:6)
让我们想象你确实实现了算法。您可以使用它来根据经验验证该算法的时间复杂度吗?
不幸的是,答案是否定的。如果我们说算法的时间复杂度是O(f(n)),那么我们就说
所以想象一下我们编码了。要查看声明的声明是否实际应用,我们可以尝试在几个输入上运行它并绘制运行时,但这不会告诉我们任何事情。我们的投入可能不够大"适用于渐近上限。如果我们确实获得了大量输入并且我们看到了许多不同输入的运行时,我们仍然不知道我们是否遇到了最坏情况的运行时,除非我们尝试了所有可能的输入,但是可能的输入数量是多少。图同构算法作为输入大小的函数呈指数增长。这意味着我们无法在大尺寸下尝试所有可能的输入,因此我们永远不能确定我们是否找到了实际的最坏情况输入。有许多算法,如线性编程的单纯形算法,除了在罕见的病态情况下,已知速度非常快,因此我们总是冒着运行时不符合我们预期的风险。
还会出现很多实际问题。对算法的理论分析通常不会考虑缓存行为,分页,颠簸等问题,因此我们可能会看到某些大型输入需要比预期更长的时间,因为它们不能很好地与缓存。在这种情况下,即使对原始操作数量的分析是正确的,我们也可能会发现事情的运行速度比预期慢得多。
简而言之,在实际输入上运行算法的任何数量都不会让您确认或否认运行时分析是正确的。如果它似乎与潮流相匹配,那就太棒了......但是你没有尝试过的所有无限输入怎么样呢?如果它似乎与预测的趋势不匹配,你怎么知道你还没有尝试过足够大的输入?或者您从其他因素中看到分析中的噪音?
这就是为什么分析像这样的算法很难的原因。据我们所知,我们已经拥有用于图同构的多项式时间算法,但没有人能够证明它具有正确的运行时。没有多少经验数据可以作为证据,尽管它可能会激励人们尝试证明特定方法快速运行,作为理论上证明观察到的运行时间的一种方式。
答案 1 :(得分:0)
实用图同构在P中。见Brendan McKay的nauty的C实现。
nauty和Traces是用于计算图形和有向图的自同构组的程序。他们还可以生成规范标签。 nauty和Traces是用C的可移植子集编写的,可以在相当多的不同系统上运行。
Babai的结果只是 理论兴趣。