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