2011-04-27 51 views
1

假設我有一個基於「程序」的信號流圖(例如與Simulink類似的東西)。即我有一個有向圖,有幾個起始節點和幾個末端節點,以及中間有很多節點(並且希望沒有循環關係)基於信號流編程的「自動編碼」算法?

有沒有一個好的和/或衆所周知的算法(可能甚至可用作爲一個Python庫),會走那個圖並給我計算順序?

實施例(未方向顯示,假設明顯):

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

這將導致在指令/命令:

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

謝謝!

回答

3

您是否正在尋找Topological Sort的某種變化?

既然你知道起始節點,你可以從它們開始算法。當你遇到一個「操作」節點時,你可以創建帶有節點的計算。自然地,圖表應該在某些特定於您的問題的方面保持一致。

要在Python中實現此功能,您需要的是一個好的圖形庫(例如NetworkX)。拓撲排序實現起來非常簡單,許多圖形庫已經將它作爲實現的算法。例如,在NetworkX的情況下 - networkx.algorithms.dag.topological_sort。然而,如上所述,它可能不是,而是的拓撲排序,但是其變體。

+0

謝謝! 「拓撲排序」是我一直在尋找的關鍵詞,無法找到自己! – Chris 2011-04-27 08:34:08