2017-02-22 53 views

回答

2

REDUCE函數只是遍歷集合中的項目,爲每個項目執行一個任意操作返回一個值,保留最新值,最終返回最後一個值。

如果我們忽略「任意操作」本身的複雜性,REDUCE函數的複雜度爲O(N),其中N是集合的大小。

+0

我假設O(N)但希望好轉 - 但我不知道爲什麼會更好。 – SQLMason

+1

通過N項迭代的複雜度始終爲O(N)。如果你希望更快的事情,你不應該使用'REDUCE'。 – cybersam

1

如果你指的是這個查詢

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,因此它從零開始並加起所有距離