use*_*976 6 algorithm graph-theory graph graph-algorithm
我想制作一个图算法,根据相邻节点f(n)的每个值更新/计算节点的f(n)值.
更正式的,
f(n) = max(f(n),max_i(f(n_i))), where i from neighbor 1 to neighbor k.
Run Code Online (Sandbox Code Playgroud)
我可以想象一下这样做的几种方法,但是我不知道它们在什么范围内是最佳的.
任何人都可以提出建议和评论(你认为你的建议是否最优)或建议我能适应的任何现有的图算法?
声明:
在图中的每个强连通分量 V中,此SCC中所有顶点的值具有相同的最终分数.
"证明"(指南):通过在此SCC中进行传播,您可以迭代地将所有分数设置为此SCC中找到的最大值.
在DAG中,每个顶点的值是max{v,parent(v) | for all parents of v}(定义),并且可以在从开始到结束的单个迭代中找到分数.
"证明"(准则):没有"后边缘",因此如果您知道所有父项的最终值,您就知道每个顶点的最终值.通过归纳(基础是所有来源) - 您可以了解单次迭代足以确定最终得分的事实.
而且,已知表示图G'的SCC的图g是DAG.
从上面我们可以推导出一个简单的算法:
G'.请注意,这G'是一个DAG.V:set f'(V) = max{v | v in V}(直观地 - 将每个SCC的值设置为此SCC中的最大值).G'.G'根据其父项计算每个顶点的f'(V).f(v) = f'(V)(其中v在SCC V中)复杂:
G'是O(V+E)O(V+E)O(V+E)O(V+E)所以上面的算法在图形的大小上是线性的 -O(V+E)
| 归档时间: |
|
| 查看次数: |
815 次 |
| 最近记录: |