这是一个消费税:
令 G 为具有 n 个顶点和 m 个边的加权有向图,其中所有边的权重为正。有向环是在同一顶点开始和结束并包含至少一条边的有向路径。给出一个 O(n^3) 算法,在 G 中找到一个总权重最小的有向循环。O((n^2)*m) 算法将获得部分学分。
这是我的算法。
我做一个DFS
。每次当我找到 a 时back edge
,我都知道我有一个有向循环。
然后我将暂时沿着 倒退parent array
(直到我穿过循环中的所有顶点)并计算total weights
.
然后我将total weight
这个循环的 与进行比较min
。min
总是取最小的总权重。在 DFS 完成后,我们的最小有向循环也找到了。
好的,然后关于时间复杂度。
老实说,我不知道我的算法的时间复杂度。
对于 DFS,遍历需要 O(m+n)(如果 m 是边数,n 是顶点数)。对于每个顶点,它可能指向其祖先之一,从而形成一个循环。当找到一个循环时,需要 O(n) 来总结总权重。
所以我认为总时间是O(m+n*n)。但显然这是错误的,如消费税中所述,最佳时间为 O(n^3),正常时间为 O(m*n^2)。
谁能帮我:
- 我的算法正确吗?
- 如果我的算法正确,时间复杂度是多少?
- 有没有更好的算法来解决这个问题?