Neo4j логика моделирования ворот, как?

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

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

Конечно, ширина сначала не сделает работу. Мне нужно собрать ВСЕ листья и подняться к корню. Другими словами

A = (B & (C & Z))

Мне нужно разрешить C @ Z в первую очередь.

Мне нужно поместить этот тип вещи в график и пройти вверх.

1 ответ

Вы, вероятно, создадите каждую из операций как узел, который имеет N входящих и одно исходящее соединение. Конечно, вы также можете иметь более сложные операции, инкапсулированные как узел.

С Neo4j 2.0 я бы использовал метки для трех типов операций.

Я предполагаю, что ваши листья будут булевыми значениями? На самом деле я думаю, что у вас много корней и только один лист (результат выражения)

(input1)-->(:AND {id:1})-->(:OR {id:2})-->(output)
(input2)-->(:AND {id:1})
(input3)------------------>(:OR {id:2})

Тогда вы можете использовать CASE, когда для принятия решения о типе метки и использовать предикаты коллекции (ALL, ANY) для вычисления

Смотрите: http://docs.neo4j.org/chunked/milestone/cypher-query-lang.html

Предикаты: http://docs.neo4j.org/chunked/milestone/query-function.html

Метки: http://docs.neo4j.org/chunked/milestone/query-match.html

Другие вопросы по тегам