已知DFS时间复杂度为O(|V|+|E|)
。
假设每个顶点v
具有正权重w(v)
。我想改变DFS算法,这样当我们“挖掘”我们需要添加到空堆栈的顶点时,我们将添加最加权的顶点。
施加意味着 - 当堆栈为空时我们需要选择一个顶点来开始\ contiue with。 (抱歉是非正式的)
例如: 如果我们有这个有向图:
A->B->C D->E F->G->H
和w(D)>w(A)>w(F)
,图表上的这个新DFS将遍历此顺序:
D E A B C F G H
我建议的新DFS的时间复杂度是多少?
答案 0 :(得分:1)
选择下一个顶点时,需要对当前顶点的输出边进行排序。在所有顶点上,您需要对总共|E|
个元素进行排序,这会增加您的复杂性O(|E|log|E|)
。
答案 1 :(得分:0)
您只需在开头对所有顶点进行排序,然后按顺序执行dfs。
所以这是VlogV + E.
我不明白为什么我们必须在上面的答案中排序'外向边'。