信号流编程的"自动编码"算法?
假设我有一个基于信号流的图形程序(比如类似Simulink的东西)。也就是说,我有一个有向图,里面有几个起始节点和几个结束节点,还有很多中间节点(希望没有循环关系)。
有没有什么好的或者大家都知道的算法(也许还有现成的Python库)可以遍历这个图,并给我计算的顺序呢?
举个例子(方向没有显示,假设是显而易见的):
In1 In2 \ \ [-] [*]-- Out1 / \ / In3 [+]------ Out2 / In4
这应该会得到以下指令/顺序:
1. tmp1 := In1 - In3 2. Out2 := tmp1 + In4 3. Out1 := In2 * Out2
谢谢!
1 个回答
3
你是在找一种变种的 拓扑排序 吗?
既然你知道起始节点,你可以从这些节点开始运行算法。当你遇到一个“操作”节点时,你就可以用指向它的节点来进行计算。当然,图的结构需要符合你问题的某些特定要求。
如果你想在Python中实现这个,首先需要一个好的图形库(比如 NetworkX)。拓扑排序的实现非常简单,很多图形库里已经有这个算法了。例如,在NetworkX中,你可以使用 networkx.algorithms.dag.topological_sort。不过,正如上面提到的,这可能并不完全是传统意义上的拓扑排序,而是它的一种变体。