我是Neo4j的新手,並且正在研究如何使用它作爲解決方案。考慮這個例子:Finding the Shortest Path through the Park什麼是Neo4j的REDUCE功能的大O
什麼是Neo4j中REDUCE函數的大O符號?它是否計算出每種可能性並對它們進行排名或更有效?
我是Neo4j的新手,並且正在研究如何使用它作爲解決方案。考慮這個例子:Finding the Shortest Path through the Park什麼是Neo4j的REDUCE功能的大O
什麼是Neo4j中REDUCE函數的大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)。如果你希望更快的事情,你不應該使用'REDUCE'。 – cybersam