信号流编程的"自动编码"算法?

1 投票
1 回答
747 浏览
提问于 2025-04-16 16:30

假设我有一个基于信号流的图形程序(比如类似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。不过,正如上面提到的,这可能并不完全是传统意义上的拓扑排序,而是它的一种变体。

撰写回答