給定圖g
和一組N個節點my_nodes = [n1, n2, n3, ...]
,如何檢查是否存在包含所有N個節點的路徑?如該圖生長檢查是否存在包含一組N個節點的路徑
上面的搜索可以被限制在my_nodes
成對耦合之間的路徑間all_simple_paths
檢查包含在
my_nodes
所有節點的路徑計算上變得笨重。這只是在很小程度上降低了複雜性。加上它需要很多蟒蛇循環,這是很慢的
是否有更快的解決方案來解決這個問題?
給定圖g
和一組N個節點my_nodes = [n1, n2, n3, ...]
,如何檢查是否存在包含所有N個節點的路徑?如該圖生長檢查是否存在包含一組N個節點的路徑
上面的搜索可以被限制在my_nodes
成對耦合之間的路徑間all_simple_paths
檢查包含在my_nodes
所有節點的路徑計算上變得笨重。這只是在很小程度上降低了複雜性。加上它需要很多蟒蛇循環,這是很慢的
是否有更快的解決方案來解決這個問題?
您可以在這裏嘗試一些貪婪算法,從所有節點的路徑查找檢查中查找,並逐步瀏覽您的圖形。不能提供一些實際樣品,但僞代碼應該是這樣的:從您的所有n
節點
n
路徑存根找到該算法的複雜性O(E + N)
,因爲你正在以非遞歸方式訪問邊和節點。
但是,在有向圖的情況下,「合併」會稍微複雜一點,但仍然會完成,但在這種情況下,最糟糕的情況可能需要很長時間。
更新:
至於你說的那個圖是定向的,上面的方法將無法正常工作。在這種情況下,你可以簡化你的任務是這樣的:
O(E + N)
。如果您需要一些收件箱解決方案,則可以使用NetworkX method for this。
您是否正在尋找包含_only_這N個節點的路徑?所有的N個節點,也許還有其他一些節點? – DyZ
@DYZ所有N個節點,包含或不包含'my_nodes'中未包含的任何其他節點。 – Pythonic