2017-06-02 21 views
0

我們最近使用的Neo4j數據庫尋找所有可能的路徑到達從一個節點到另一個節點開始,我使用下面的代碼(使用GraphAlgoFactory API):Neo4j的兩個節點之間的簡單路徑,而不指定的最大長度

Node node1 = db.getNodeById(startNodeId); 
Node node2 = db.getNodeById(endNodeId); 

PathExpander<Object> pathExpander = PathExpanders.allTypesAndDirections(); 
PathFinder<Path> pathsFinder = GraphAlgoFactory.allSimplePaths(pathExpander, 10); 
Iterable<Path> paths = pathsFinder.findAllPaths(node1, node2); 
//Iterate all paths 

正如你可以看到,在上面的代碼,爲allSimplePaths()我們需要提供最大長度(我已經給出10)作爲輸入,我將無法之前找到的路徑就知道了。

所以,我的問題是我們如何檢索兩個節點之間的所有簡單路徑而不指定最大長度?

回答

0

您可以使用非常高的值來獲得最大深度。

但是,一般來說,最大深度越大,算法耗時過長或內存耗盡的風險就越大。這是因爲搜索區域按深度呈指數級增長。例如,如果平均你感興趣的節點有N個鄰居,那麼在深度x處,你將不得不評估N^x個鄰居節點(並記住你到目前爲止發現的東西)。

+0

我認爲這是(使用高價值)第二個(但不是一個好的)選項。我正在尋找更好的方法來處理這個問題。還有其他的選擇嗎? – developer

+0

不確定你的意思是「更好」的選擇。找到兩個節點之間的所有「簡單路徑」(即,沒有重複節點的所有路徑)的任何算法都必須嘗試所有可適用的路徑,其可以是任意長的。因此,除非您允許任何合適的算法使用較高的最大深度,否則您將無法獲得完整的結果。 – cybersam

相關問題