连续计算对象之间级联关系的最佳方法(算法)是什么?

时间:2010-10-20 15:56:01

标签: algorithm graph-algorithm

例如,A + B = C C + D = E E + F = G,因为对每个节点进行了重新计算相关节点的变化。 下面的图片是我想要做的简单例子。

进一步澄清 每个对象的结构是相同的。投入将是价格,因为每个价格变化都会对下游价格产生连锁效应。所以在上面的例子中,A + B = C将变为5 + 6 = 11。等

不断发生变化(可能每秒),因为每个值都会发生变化,我需要得到通知(事件被触发)。

2 个答案:

答案 0 :(得分:1)

只要您的图表没有更改,只有值,您可以执行图表的topological sort。然后以拓扑排序顺序遍历图表,从更改的值开始。如果更改将是图表的稀疏部分,请按拓扑排序顺序为每个节点分配一个索引,并使用priority queue来确定下一个要执行的节点。

答案 1 :(得分:0)

最简单的方法是基于事件的方法。每个节点都有一个“onchanged”事件,任何使用该节点的事件都可以订阅该事件。在节点更新后,它会引发该事件,并允许其他任何需要知道的事件。

如果您的依赖性更加复杂,那么您可能需要使用其他方法来管理更新以优化事物。例如,如果A效应B和C和C也影响B(例如B = A + C和C = A + 1),那么一个简单的方法可能会更新a,然后是b,然后是C,然后是B再次。这可行,但显然是一个mroe更新比需要。优化更新的确切方法取决于您的依赖树的复杂程度。