【问题标题】:How to interpret this graph function algorithm?如何解释这个图函数算法?
【发布时间】:2022-01-05 08:27:58
【问题描述】:

所以我有一个 G 有向图(从节点 v 双向指向)及其欧拉环标记,如下所示:

我有一个名为root(written_L,u) 的函数,其中u 是目标图/组件的新根,written_L 是欧拉环标记。所以根函数将u节点作为根,并重新计算所有的边标签,给出一个新的欧拉巡回标签。

但是,我不能完全理解为根函数给出的算法:

以及对应的表示系统:

我试图为这个问题编写一个程序,但我无法完全理解这些数学表达式。如果有人能以非数学形式向我解释所有这些含义,我将不胜感激。 此外,如有需要,请随时询问更多信息。

【问题讨论】:

    标签: algorithm loops graph tree


    【解决方案1】:

    有时你只需要一个例子。下图显示了将根节点移动到中心列中间后的边缘标注。

    您会注意到我们所做的只是从所有数字中减去 5。当原始标签至少为5时很好。当原始标签小于5时,我们需要减5然后加12,以保持标签在0到11的范围内。

    例如,以前标记为 8 的边被重新标记为 8-5=3。并且标记为 4 的边被重新标记为 4 -5+12 = 11。

    您需要知道的另一件事是减去 5(将结果保持在 0 到 11 的范围内)与以 12 为模加 7 相同。重复相同的示例,重新标记 8 (8+7) % 12 = 3,重新标记 4 (4+7) % 12 = 11.

    所以算法是:

    • 找到进入原根的最大标签,加1求模(M)。在示例中,最大标签为 11,因此 M 为 12。
    • 找到离开新根 (Z) 的最小标签。在示例中,Z 为 5。
    • 将增量 (D) 计算为 D = M - Z。在示例中,D 为 7。
    • 使用公式newL = (L+D) % M 更新每个标签 (L)

    【讨论】:

    • 哇,很好的解释,非常感谢!我了解您的解决方案,现在我可以解释那些难看的字母了。但是,对于图像中的每个,我对两者都有一些不确定性:因此,只要我得到每个的第一个,它就会遍历 T(u) 中的每个 L(w,v) 边缘,并“移动”它们通过newRootSmallestOutEdge mod oldRootLargestInEdge+1。所以基本上这第一个 for-each 为其新值设置了每一个优势。因此,我不知道每个人的第二个究竟是做什么的。在每个节点中设置每个最小的出边标签?
    • @NeverSayEver 问题中的数学描述了森林(许多树)的算法。但是问题中的示例和此答案是一棵树。
    猜你喜欢
    • 2020-05-09
    • 1970-01-01
    • 2016-10-04
    • 2013-03-10
    • 1970-01-01
    • 2018-04-02
    • 2011-10-20
    • 1970-01-01
    • 2022-01-09
    相关资源
    最近更新 更多