私はNeo4jをかなり新しくしており、これをソリューションとして使用しようとしています。この例を考えてみましょう:Finding the Shortest Path through the ParkNeo4jのREDUCE FuctionのBig Oとは
Neo4jのREDUCE関数のBig O表記法とは何ですか?それぞれの可能性を計算し、ランク付けするのか、それとも効率的ですか?
私はNeo4jをかなり新しくしており、これをソリューションとして使用しようとしています。この例を考えてみましょう:Finding the Shortest Path through the ParkNeo4jのREDUCE FuctionのBig Oとは
Neo4jのREDUCE関数のBig O表記法とは何ですか?それぞれの可能性を計算し、ランク付けするのか、それとも効率的ですか?
REDUCE
関数は単純に各アイテム最新の値を保持し、最後に最後の値を返す操作。
「任意の操作」の複雑さを無視すると、REDUCE
関数の複雑さはO(N)
です。ここで、N
はコレクションのサイズです。
このクエリまず、あなたの開始と終了ノードを定義...と、それらの間のすべてのパスと一致し
START startNode=node:node_auto_index(name="Start"),
endNode=node:node_auto_index(name="Finish")
MATCH p=(startNode)-[:NAVIGATE_TO*]->(endNode)
RETURN p AS shortestPath,
reduce(distance=0, r in relationships(p) : distance+r.distance) AS totalDistance
ORDER BY totalDistance ASC
LIMIT 1;
を参照している場合は...このような
RETURN p AS shortestPath,
reduce(distance=0, r in relationships(p) : distance+r.distance) AS totalDistance
ORDER BY totalDistance ASC
LIMIT 1;
このreduce
作品パスの関係からすべての距離プロパティを抽出し、それらを合計します。したがって、order by
の結果が距離で上がり、limit
が1になると、最初の最小距離だけが得られます。
p.s.私はあなたが参照している大きなOはゼロから0までのすべてのパスを開始し、すべての距離を加算するようになると思います。
私はO(N)と仮定しましたが、より良いことを望んでいましたが、なぜそれが良いのか分かりません。 – SQLMason
N個のアイテムを反復する複雑さは常にO(N)です。より速く何かを望むなら、あなたは '控除 'を使ってはいけません。 – cybersam