基于信号流编程的“自动代码”算法?

时间:2011-04-27 08:16:10

标签: python algorithm graph graph-theory graph-traversal

让我们假设我有一个基于“programm”的信号流图(例如类似于Simulink的东西)。即我有一个带有一些起始节点和几个终端节点的有向图以及其间的大量节点(并且希望没有循环关系)

是否有一个好的和/或众所周知的算法(甚至可以作为Python库提供),它会走这个图并给我计算顺序?

示例(方向未显示,假设显而易见):

In1     In2
   \       \
    [-]     [*]-- Out1
   /   \   /
In3     [+]------ Out2
       /
    In4 

这应该产生说明/顺序:

1. tmp1 := In1 - In3
2. Out2 := tmp1 + In4
3. Out1 := In2 * Out2

谢谢!

1 个答案:

答案 0 :(得分:3)

您是否正在Topological Sort寻找某种变体?

由于您知道起始节点,因此可以从它们启动算法。遇到“操作”节点时,可以使用引导它的节点创建计算。当然,图表应该在某些方面与您的问题一致。

要在Python中实现这一点,您需要的是一个好的图形库(例如NetworkX)。拓扑排序很容易实现,许多图形库已经将它作为实现的算法。例如,对于NetworkX - networkx.algorithms.dag.topological_sort。但是,如上所述,它可能不是完全拓扑排序,而是其变体。