Скажем, у меня 100 узлов, и я даю каждому уникальный идентификатор от 1: 100.
Если бы мне понадобился список всех комбинаций узлов, я полагаю, что он имел бы длину 2^100
. Это если какой-либо узел может отсутствовать на схеме.
Но скажем, у меня есть фрейм данных, который представляет связи между узлами:
head(conn_)
from to
2 1 2
3 1 4
4 2 3
5 2 5
6 4 6
7 154 100
8 102 101
Итак, в строке один из этого df указано, что существует соединение от узла 11
к узлу 10
Скажем, я хочу перечислить каждую комбинацию допустимых узлов, но комбинация действительна только в том случае, если нет разорванного соединения между элементами набора. Как я мог это сделать?
Например, если у меня есть узлы 1->2->3->4->5->6->7->8->9
, где ->
представляет собой двустороннее соединение (1
подключается к 2
, а 2
подключается к 1
), тогда два действительных подмножества будут {1, 2, 3} & {4, 5, 6}
, но недопустимым подмножеством будет {1, 3, 4, 6}
. Это было бы недействительно, потому что между двумя элементами в наборе разорвано соединение.
Если один узел подключается к нескольким другим узлам, это считается допустимым соединением, то есть для указанного выше фрейма данных я могу иметь действительный набор {1, 2, 4, 6}
Мне очень сложно найти способ сделать это рекурсивно или с помощью циклов for / while.
Кроме того, если существует максимум пять двусторонних соединений на узел, в случае 100 узлов, то можно ли перечислить все? Как эта проблема разрастается?
редактировать:
Вот пример ввода / вывода:
conn_ =
from to
1 2
1 4
2 3
2 5
4 6
Expected output : { {1}, {1, 2}, {1, 4}, {1, 2, 4}, {1, 2, 3}, {1, 2, 5}, {1, 4, 6}, {1, 2, 4, 6}, {1, 2, 3, 4}, {1, 2, 3, 4, 6}, {1, 2, 3, 4, 5, 6}, {2}, {2, 3}, {2, 5}, {2, 3, 5}, {3}, {4}, {4, 6} }
Обратите внимание, что {1, 3, 5}
отсутствует в выходных данных, потому что не может существовать разрыв между элементами в наборе, но {1, 2, 4, 6}
является допустимым, поскольку 1
подключается к 2
, а 1
подключается к 4
igraph
, лучше, чемDiagrammeR
? - person Frank   schedule 08.05.2020