所以这个问题涉及一个基于AdjacencyList的图G.这个图有n个边和n个顶点。它也有一个,只有一个周期。什么是最快的算法(就大O符号而言)找到周期中最大权重的边缘?
我很确定这可以在O(n)中完成,但我很难弄清楚具体细节,因为你必须验证你的结果是在一个循环中。我想通过这个问题的原始方式是一个简单的深度优先搜索,你可以用它在O(n)时间内找到整个图形中的最大加权边缘(因为V + E = 2n)。然后,您可以执行另一次搜索以验证此边缘是否在循环中。如果是,则在O(n)中得到答案,但如果不是,则需要O(n ^ 2)时间。这绝对不是理想的,我正在寻找O(n)解决方案。
答案 0 :(得分:0)
您可以在DFS中返回在循环中找到哪个节点,然后返回在DFS树中将每个节点标记为循环的一部分(直到找到的节点本身)。像这样:
DFS(v):
mark v as visited
for edges (v, w) in E:
if w is not visited:
last_node = DFS(w)
if last_node != -1:
test (v, w) as maximum edge
if last_node != v:
return last_node
else:
return -1
else:
test (v, w) as maximum edge
return w
return -1