algorithm - 确定图形是否包含三角形?

标签 algorithm graph-theory

如果我们的目标时间复杂度是 O(|V| * |E|) 或 O(V^3) 等,这个问题就有一个简单的解决方案。然而,我的教授最近给了我们一个作业,问题陈述是:

Let G = (V, E) be a connected undirected graph. Write an algorithm that determines if G contains a triangle in O(|V| + |E|).

在这一点上,我被难住了。 Wikipedia说:

It is possible to test whether a graph with m edges is triangle-free in time O(m^1.41).

除了在 Quantum 计算机上运行的算法之外,没有提到可能有更快的算法。之后我开始求助于更好的资源。 Math.SE 上的一个问题将我链接到 this paper上面写着:

The fastest algorithm known for finding and counting triangles relies on fast matrix product and has an O(n^ω) time complexity, where ω < 2.376 is the fast matrix product exponent.

这就是我开始意识到的地方,也许我们被骗去解决一个 Unresolved 问题!那个可恶的教授!

不过,我还是有点怀疑。论文上写着“查找和计数”。这是否等同于我要解决的问题?

TL;DR:我是被愚弄了,还是忽略了如此微不足道的事情?

最佳答案

事实证明,这在 O(|V| + |E|) 中确实不可行。或者至少,我们不知道。我读了 4 篇论文才得出这个结果。我中途停了下来,因为我意识到它更侧重于分布式计算而不是图论。其中之一甚至给出了概率算法来确定“几乎线性”时间内的三角形自由度。三篇相关论文是:

我为作业写了大约 2 页的 LaTeX,并以适当的引文引用了论文。论文中的相关说法加框:



最后,我和我的教授谈过,事实证明,这实际上是一个无意的严重错误。然后他将所需的复杂度更改为 O(|V| * |E|)。我不怪他,他让我学习了更多图论!

关于algorithm - 确定图形是否包含三角形?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31521126/

相关文章:

python - Graphviz:如何插入两个新的链接节点并最小化边交叉?

python - 检查两个数字是否可以相同的算法

algorithm - 获取数组中索引相反的元素的最佳方法是什么?

algorithm - 遍历图形并满足特定条件?

python - 检查子图是否是 NetworkX 中的集团的最快方法

algorithm - 生成所有唯一的有向图,每个节点有 2 个输入

java - 在java中使用BUBBLE SORT对二维字符串数组进行排序

javascript - 如何修改算法以减少延迟?

java - 关于字符串相似性度量的建议 (Java)。距离,听起来像还是组合?

python - 将 4 色定理应用于图形数组中存储的相邻多边形列表