Cypher (Neo4j) Сопоставить все пути с указанными c длиной и значением - PullRequest
0 голосов
/ 12 апреля 2020

Я новичок в Cypher и Neo4j, но я нахожу это действительно интересным и пытаюсь использовать его для решения математической задачи, которая у меня есть. Чтобы облегчить иллюстрацию проблемы, я уменьшил ее и надеюсь, что вы поможете мне найти правильные логики c.

Математическая задача: учитывая набор плиток, как многими способами вы можете выбрать 3 плитки, с суммой, меньшей x?

В моем примере, давайте просто скажем, что у меня есть 5 плиток (100, 100, 80, 80, 50), и это Я должен включить по крайней мере одну 100-плитку, и это x равно 270.

Поскольку порядок не имеет значения, я думаю о проблеме так, что я начинаю с самого высокого nr, а затем с можно выбрать go либо для того же номера снова, либо для следующего меньшего числа, либо для второго меньшего числа. Это означало бы, что начиная с 100, я мог бы выбрать либо 100, либо 80 (следующий нижний), либо 50 (второй нижний).

Пока что я могу определить путь, начинающийся с 100 и идущий на 2 шага дальше к m:

MATCH path = (n:Node {value:100})-[:CONNECTED*2]-(m)

ВОПРОС: Как найти все пути с указанной c суммой node.value? Поскольку порядок не имеет значения, меня интересуют только уникальные односторонние пути. (Имеется в виду, например, что если я получу один путь как 100-80-50, то меня не интересует путь 50-80-100, так как он содержит точно такие же плитки, только в другом порядке).

Спасибо !

neo4j image

1 Ответ

1 голос
/ 13 апреля 2020

ты это имел ввиду?

MATCH path = (n:Node {value:100})-[:CONNECTED*2]-(m)
WITH REDUCE(x=0,n in nodes(path)|x+n.value) as expected, [n in nodes(path)|n.value] as listNode
WHERE expected >100
RETURN listNode
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...