繁体   English   中英

如何有效地更新这种有向图?

[英]How to efficiently update such a directed graph?

我有很多节点。 Node的定义是这样的:

public class Node
{
   public string Name { get; private set; }
   string Expression { get; set; }
   double Value { get; private set; }
}

Value由表达式评估引擎在运行时评估。 Expression可以引用其他Node ,因此它可以形成一个有向图(或有向图的列表)。 假设图中没有循环。

这是一个例子:

NodeA:
{
    Name: "NodeA",
    Expression: "[NodeB] + [NodeC] + 1.0"
    Value: 4.0
} 

NodeB:
{
    Name: "NodeB",
    Expression: "1.5"
    Value: 1.5
} 

NodeC:
{
    Name: "NodeC",
    Expression: "2.0"
    Value: 2.0
} 

问题是,如果NodeB被更改,如何将更改有效地传播到其他节点? 我可以使用一些并行方法来更新图形吗?

谢谢!

您可以让每个节点维护一个从属节点列表以及一个“脏”标志。 然后,只要节点发生更改,就在每个从属节点上递归设置脏标志。 (如果节点已被标记为脏节点,则不要递归。)然后,您可以再次进行遍历以重新评估每个脏节点,并在计算新值时清除脏标志。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM