2017-06-02 8 views
0

最近、Neo4jデータベースの使用を開始しました。そして、あるノードから別のノードに達する可能性のあるすべてのパスを見つけるために以下のコードを使用しています:Neo4j最大の長さを指定しないで2つのノード間の単純なパス

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として与えられている)を提供する必要があります。

私の質問は、どのように最大長を指定せずに2つのノード間のすべての単純なパスを取得できますか?

答えて

0

最大深度には非常に高い値を使用できます。

しかし、一般的に、最大深度が大きいほど、アルゴリズムが長すぎるかメモリ不足になるリスクが高くなります。これは、検索領域が深さによって指数関数的に増加するためです。たとえば、関心のあるノードが平均してN個の近傍を持つ場合、深さxではN^x近傍のノードを評価する必要があります(これまで発見したことも覚えておいてください)。

+0

私はそれが(高い価値を使って)2番目の(しかし良いことではない)オプションだと考えました。私はこれを処理するより良い方法を探しています。他の選択肢はありますか? – developer

+0

"より良い"代替手段の意味が不明です。 2つのノード間のすべての「単純経路」(すなわち、反復ノードを持たないすべての経路)を見つけるためのアルゴリズムは、適用可能なすべての経路を試行しなければならず、任意に長くすることができる。したがって、適切なアルゴリズムが高い最大深度を使用できるようにしない限り、完全な結果を得ることはできません。 – cybersam

関連する問題