1

例如 A+B=C C+D=E E+F=G 随着对每个节点的更改,重新计算相关节点。下图是我正在尝试做的一个简单示例。

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

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

4

2 回答 2

1

只要您的图表没有改变,只有值,您可以对图表进行拓扑排序。然后从改变的值开始以拓扑排序顺序遍历图形。如果更改将成为图的稀疏部分,请按拓扑排序顺序为每个节点分配一个索引,并使用优先级队列来决定接下来要执行哪个节点。

于 2010-10-21T16:16:15.913 回答
0

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

如果您的依赖关系更复杂,那么您可能需要其他东西来管理更新以优化事物。例如,如果 A 影响 B 和 C 并且 C 也影响 B(例如 B=A+C 和 C=A+1),那么一个简单的方法可能会更新 a,然后是 b,然后是 C,然后是 B。这可行,但显然是比所需的一个 mroe 更新。优化更新的确切方式将取决于依赖关系树的复杂程度。

于 2010-10-21T16:22:50.740 回答