簡體   English   中英

在圖表中查找最長路徑

[英]Find Longest Path in Graph

我一直在努力尋找復雜網絡中最長的路徑。 我在StackOverflow和Internet上遇到過很多問題,但沒有人可以幫助我。 我寫了一個CQL

start n=node(*)
match p = (n)-[:LinkTo*1..]->(m)
with n,MAX(length(p)) as L
match p = (n)-[:LinkTo*1..]->(m)
where length(p) = L
return p,L

我沒有得到任何解決方案。 Neo4J會一直在尋找答案,我也嘗試在Neo4J Cloud Hosting中執行它。 我沒有任何解決方案,但有一個錯誤“錯誤未定義 - 未定義”我迫切需要一個解決方案。 這個答案的結果將幫助我完成我的項目。 所以,有人請幫我糾正查詢。

好吧,如果你只需要做一次,你就會做兩次非常昂貴的操作。

此外,您至少會為數據庫中的每個節點返回一個路徑(因為可能存在多個路徑,這些路徑是該節點可用的最長路徑)。 但是從您的問題來看,您似乎想要圖中的單個最大路徑,而不是每個節點都有一個路徑。

我們還可以通過僅在路徑頭部的節點上執行最長路徑匹配來改進匹配,而不是在中間的某個位置。

也許試試這個?

match (n)
where (n)-[:LinkTo]->() and not ()-[:LinkTo]->(n)
match p = (n)-[:LinkTo*1..]->(m)
return p, length(p) as L
order by L desc
limit 1

你要解決的問題是NP難。 在小型稀疏圖上,蠻力方法(例如InverseFalcon建議的方法)可能在合理的時間內成功,但在任何相當大的和/或密集連接的圖上,您將很快遇到時間和空間問題。

如果您有加權圖,則可以通過否定所有邊權重,並在修改后的圖上運行最短加權路徑算法,找到2個節點之間的最長路徑。 但是,如果要在整個圖形中找到最長路徑,則有效地嘗試解決旅行商問題 ,但使用-ve邊緣權重。 你不能用Cypher做到這一點。

如果您的圖表未加權,我會發現一個更簡單的問題,或者看看您是否可以將圖表轉換為加權圖表並按上述方法處理。 或者,看看您是否能夠以不需要找到最長路徑的方式構建您的需求。

暫無
暫無

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

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