Растущее влияние одного узла в направленном динамическом графе

#python #networkx #graph-theory #complex-networks

#питон #networkx #теория графов #комплекс-сети

Вопрос:

У меня есть программа, которая генерирует ориентированный график с Networkx каждый раз, когда происходит изменение целевого источника данных, динамической сети. Я использую эти графики, объединяя взаимодействия и анализируя вновь добавленные или удаленные ребра. Но я хотел бы также получить еще одну информацию:

Скажем, что при t = 0 у меня есть узел, который направлен к другому узлу:

N1 -gt; N2

При t = 1 между N2 и N3 появляется новое ребро:

N1 -gt; N2 -gt;gt; N3

При t = 2 новый узел появляется между N2 и N3:

N1 -gt; N2 -gt;gt; N4 -gt;gt;gt; N3

И так далее. Я не знаю правильного способа дать имя N1, но, может быть, семя? Потому что я хочу получить узлы, подобные N1, которые имеют растущий охват, например, распространение болезней. Но я хочу только иметь возможность возвращать эти узлы, а не имитировать распространение. Если этот узел получает доступ ко все большему и большему количеству узлов в каждый момент времени, как я могу назвать этот узел и какой алгоритм я могу использовать для его обнаружения? Я подумал, что, возможно, можно было бы измерить растущую центральную роль между ними, однако, если бы для этого существовал алгоритм, я бы предпочел полагаться на чье-то понимание, отличное от моего внутреннего ощущения.

Я думаю, что Networkx не поддерживает множество алгоритмов для временных графиков, но я видел библиотеки, которые это делают; pathpy, DyNetx.

Я буду признателен за любой ответ, заранее благодарю вас.

Ответ №1:

Я хочу, чтобы такие узлы, как N1, имели растущий охват

Я не совсем понимаю, что вы имеете в виду под этим.

Угадывание: Вам нужен список всех узлов, которые существовали в t, но которые могут достигать большего количества режимов при T 1?

Это кажется таким простым, я сомневаюсь, что это действительно то, что вы имели в виду.

Однако:

 Get t graph Get t 1 graph LOOP N over nodes in t 1  IF N not in t  CONTINUE to next node  CALCULATE Kt number of nodes reachable from N ( Dijsktra will do this ) in t  CALCULATE Kt 1 number of nodes reachable from N in t 1  IF Kt 1 gt; Kt  Add N to output  

Мне приходит в голову другая возможность: график представляет собой «лес деревьев», и вам нужен список всех корневых узлов деревьев, которые выросли в размерах.

 Get t graph Get t 1 graph LOOP N over nodes in t 1  IF N not in t  CONTINUE to next node  IF N is not root ( i.e. has out-edges but no in-edges )  CONTINUE to next node  CALCULATE Kt number of nodes reachable from N ( Dijsktra will do this ) in t  CALCULATE Kt 1 number of nodes reachable from N in t 1  IF Kt 1 gt; Kt  Add N to output