如何有效地更新这样的有向图?

时间:2014-12-23 02:57:11

标签: c# algorithm graph-algorithm

我有很多节点。 Node的定义如下:

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

表达式评估引擎在运行时评估ValueExpression可以引用其他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是否已更改,如何有效地将更改传播到其他节点?我可以使用一些并行方法来更新图表吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

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