[英]Find all paths between two nodes using DFS in weighted directed graph
我有一個有向加權圖G ,其中權重是過渡的持續時間。
我使用修改后的 DFS 編寫了兩個頂點之間的所有路徑搜索算法:搜索一直持續到路徑的總權重(其各部分權重的總和)將小於某個值。
我的代碼適用於小圖,但在大圖 (|V|=1800, |E|=50870) 中它凍結。
def find_paths(self, start, end, weight_limit=10):
res = []
def dfs(start, end, path=[], weight=0):
path = path + [start]
if len(path) > 1:
weight += self.weights[(path[-2], start)]
if weight > weight_limit:
return []
if start == end:
res.append((path, weight))
return [path]
if start not in self.adjacent:
return []
paths = []
for node in self.adjacent[start]:
if node not in path:
paths.extend(dfs(node, end, path, weight))
return paths
dfs(start, end)
return res
您的代碼似乎是正確的(尤其是因為它適用於小圖)。
問題是節點之間可能有很多路徑。 對於全連接圖,路徑的數量是 N 的數量級! 這是很多。 因為你需要所有這些,你的程序會很慢(特別是如果你用完了內存並且需要把東西交換到磁盤)。
如果您像在代碼中那樣限制最大總重量,假設所有重量都是一個,那么您仍然在 O(weight) 中運行,我假設您將其設置為一個大值,因為圖表很大。
您需要弄清楚是否真的需要所有這些路徑。
如果您正在尋找最短路徑,請使用 Dijkstra 或尋找最短路徑的東西。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.