簡體   English   中英

如何檢測無用的依賴關系?

[英]How to detect useless dependencies?

假設我在一些任務之間有很多依賴關系:

 A --> B 
 A --> D 
 B --> C  
 C --> D 
 E --> F  
 F --> G

這樣A-> B意味着B只能在A完成之后才能運行。

我如何能夠檢測和刪除無用的依賴關系?

在這種情況下,這是“ A-> D”,因為D取決於C,而C取決於B,B取決於A。

將其轉換為鄰接矩陣,將得到以下結果:

  A B C D E F G
A 0 1 0 1 0 0 0
B 0 0 1 0 0 0 0
C 0 0 0 1 0 0 0
D 0 0 0 0 0 0 0
E 0 0 0 0 0 1 0
F 0 0 0 0 0 0 1
G 0 0 0 0 0 0 0

將此矩陣與其自身相乘將得到一個新的矩陣,它通過兩個步驟告訴您從每個節點到每個節點有多少種不同的方式。 再次乘以它,您將看到三個步驟的結果,依此類推。

一般而言,乘以k會得到一個矩陣,該矩陣告訴您從一個節點到另一節點的不同路徑數量,步長為k。

使用此信息,您可以嘗試發現由多個路徑描述的節點/任務之間的依賴性。 在A和D之間,您會看到一條路徑為A ^ 1(A-> D)和A ^ 3(A-> B-> C-> D)。

一旦發現了從節點X到節點Y的這些多條路徑,您就可以在原始鄰接矩陣中刪除直接依賴性。

我設法找到一種比stuXnet提出的解決方案更容易實施的解決方案。

使用Jung庫 ,我檢查給定依賴關系的每對之間是否存在多個路徑。 如果是這樣,那么此依賴關系當然是不必要的,因此我只需要刪除相應的邊緣即可。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM