2015-07-10 95 views
1

我需要使用密碼查詢或python客戶端庫(如pye2neo)在neo4j中找到數據庫的LCA。在neo4j中查找最低共同祖先(LCA)

我知道這樣做的算法,例如here。但在我自己在python中實現一個算法之前,我想知道是否有這種或其他預先存在的包的內置方法。

目前我的方法包括:

Query = 'match p1 = (con1) -[*0..]-> (common) <-[*0..]- (con2) 
where con1.name = A and con2.name = B 
return common, p1' 

啓動節點A和B

  1. 執行查詢任意兩個節點開始。這將返回共同的祖先及其路徑。
  2. 對於查詢中剩餘的每個節點(例如C,D,E ...),執行該節點和先前返回的父級的查詢。該父代替前一個。
  3. 最後找到的父母是LCA

的僞代碼:

input_nodes = [A, B, C, D, E] 

parent = get_common(input_nodes[0], input_nodes[1]) 
for node in input_nodes[2:]: 
    parent = get_common(parent, node) 

總結:有沒有從可變數目找到LCA的一個簡單的內置/預存方式輸入節點使用python客戶端庫還是cypher?

謝謝

回答

0

我有點困惑。 「查詢中剩餘的節點」是什麼意思?

這聽起來像是一個ShortestPath的修改版本會很有用。它是雙向的,默認情況下它從末端節點反向搜索。如果雙方都使用相同的方向(比如說外向),那麼你會到達最低的共同祖先(至少就我的問題而言)。

相關問題