Вычислить расстояния между двумя узлами и их наименьшим общим предком (LCA) - PullRequest
0 голосов
/ 05 апреля 2019

Мне нужно вычислить расстояние, которое разделяет два узла A и B с их наименьшим общим предком на графике.Я использую функцию followinf, чтобы найти LCA:

match p1 = (A:Category {idCat: "Main_topic") -[*0..]-> (common:Category) <-[*0..]- (B:Category {idCat: "Heat_transfer"}) 
return common, p1

Есть ли в Neo4j какая-либо функция, которая позволяет возвращать соответствующее расстояние между d (A, common) и d (B, common).

Спасибо за вашу помощь

1 Ответ

0 голосов
/ 05 апреля 2019

Если я правильно понимаю lowest common ancestor, это сводится к поиску кратчайшего пути между A и B с хотя бы одним узлом между ними.Что вы можете сделать с помощью этого запроса.Здесь условие, что длина p больше 1, вынуждает хотя бы один узел между ними.Приведенный ниже пример использует игрушечную базу данных IMDB и возвращает фильм Аватар.

match p=shortestPath((n:Person {name:'Zoe Saldana'})-[r*1..15]-(n1:Person {name:'James Cameron'})) where length(p) > 1 return nodes(p)[1]

В основном вы можете выбрать любой элемент из узлов в пути, кроме первого и последнего (посколькубудет A и B)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...