2016-06-09 1 views
2

Я новичок в построении графика и попытаюсь понять, как контекстуальные отношения могут отображаться в них.Графики, ребра и контекстная информация

Я посмотрел на примерах, которые систематически вводить простые демки (1), например:

# I want to organize the seating arrangement for my party 
# Bob does not like John, so I can say 

-----------      ------------ 
| Bob | <--- excludes --- | John | 
-----------      ------------ 

Но что, если я хочу сказать, что Боб на самом деле любит Джона, но не любит быть вокруг него, когда его сопровождает его подруга Мэри (вы знаете, они целуются все время, и вы больше не можете с ними разговаривать). Я думал о двух решениях:

# solution 1: create an intermediary node. 
# now, the problem is that, if I want to know who John excludes, 
# I have to look at the node John + every other node he might be the child of. 


                | John | 
-----------      -------------  ----------- 
| Bob | <--- excludes --- | Couple | < 
-----------      -------------  ------------ 
                | Mary | 
                ------------ 

# solution 2: target the edges, and make them cumulative 
# here if I want to know who John excludes, 
# I just have to target the node John and then check for 
# additional logic (in this case, check if Mary is present too). 

-----------      ------------ 
| Bob | <--- excludes --- | John | 
-----------   ^  ------------ 
    ^    | 
     |     | 
excludes <---- requires (some logic here) 
     | 
---------- 
| Mary | 
---------- 

Обратите внимание, что я не нашел ни одного примера, как это, и я даже интересно, если обработка такого рода проблемы непосредственно в графе является правильным решением. Любая мысль? Благодарю.

(1), например, о Neo4j, http://www.slideshare.net/thobe/django-and-neo4j-domain-modeling-that-kicks-ass/25-The_Neo4j_Graph_data_model

ответ

0

Если вы не ограничивать себя множество людей, их отношения, но к Power Set все людям, вы можете также модели отношения между по-разному пронумерованных группами - например, снова используя график. Решение является чистым в смысле того, что все узлы являются частью определенного набора. Вы должны будете проверить все узлы, в которых находится человек, как вы уже упоминали.

1

два подхода пришла мне в голову:

  1. Объединить людей пар и так далее в конкретных лиц; так на самом деле у вас будут отношения Боб < - Джон и Боб < - Джон + Мэри. Но с большим количеством данных, я думаю, это может выглядеть уродливо.
  2. Создать конечный автомат: вы сможете отслеживать различные состояния для разных ситуаций. Так, например, состояние «Джон пришел один» будет иметь переход к «Сидеть рядом с Джоном», в то время как «Джон пришел с Мэри» не будет.
+0

Thanks Bodan! Государственный образец выглядит многообещающим. Если я хорошо пойму, целевой узел будет насыщен Джоном. Кажется, что модель государства решает одну часть проблемы. Например: если вы ищете, кого Джон исключает, когда присоединяется Мэри, я сразу же получаю Боба. Однако, когда вы ищете, кто исключает Боба, мне нужно было бы перебирать множество состояний для множества объектов. – Raphael

+1

Извините, я больше об этом подумал. Кажется, это имеет смысл: вы просто связываете Джона и Боба, а затем проверяете, соблюдены ли условия для исключения. Благодаря! – Raphael

Смежные вопросы