Подсчитать входящие и исходящие ребра от заданной вершины до каждого соседа в мультидиграфе - PullRequest
0 голосов
/ 12 апреля 2019

Я пытаюсь найти запрос, который позволил бы мне получить своего рода счетчик групп входящих и исходящих вершин вершины в мультидиграфе.

enter image description here

Принимая приведенный выше график для V [0], мы должны получить:

[V [0], V [1], входящий: 2, исходящий: 0]

[V [0], V [2], входящий: 1, исходящий: 0]

[V [0], V [3], входящий: 0, исходящий: 1]

1 Ответ

1 голос
/ 12 апреля 2019

Задавая вопросы о Gremlin, картинка и описание графика хороши, но сценарий Gremlin, создающий некоторые примеры данных, еще лучше:

g = TinkerGraph.open().traversal()
g.addV('node').property(T.id,0).as('0').
  addV('node').property(T.id,1).as('1').
  addV('node').property(T.id,2).as('2').
  addV('node').property(T.id,3).as('3').
  addE('link').from('1').to('0').
  addE('link').from('1').to('0').
  addE('link').from('0').to('3').
  addE('link').from('2').to('0').iterate()

Вот один из способов сделать это:

gremlin> g.V(0).bothE().
......1>   group().
......2>     by(union(inV(),outV()).fold()).
......3>     by(fold().
......4>        project('incoming','outgoing').
......5>          by(unfold().inV().hasId(0).count()).
......6>          by(unfold().outV().hasId(0).count()))
==>[[v[0],v[1]]:[incoming:2,outgoing:0],[v[0],v[2]]:[incoming:1,outgoing:0],[v[3],v[0]]:[incoming:0,outgoing:1]]

По сути, мы group() каждого ребра связываем с соответствующими вершинами входа / выхода (строка 2 - то есть List входа / выхода, образованного union().fold()), а затем уменьшаем ребра, собранные на пару вершин (начиная с в строке 3). Операция сокращения просто создает список с fold(), а затем использует project() для преобразования этого List в Map с «входящими» и «исходящими» ключами - значения для этих ключей определены в следующих соответствующих by() модуляторы (то есть развернуть список ребер, отфильтровать для вершины "0" и count()).

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