【发布时间】:2020-05-09 14:04:44
【问题描述】:
假设我有 100 个节点,然后我从 1:100 给每个节点一个唯一的 ID。
如果我想要每个节点组合的列表,我相信它的长度应该是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),那么两个有效子集将是 @987654331 @,但无效的子集是 {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 连接到@987654340 @
【问题讨论】:
-
看起来像一个图形问题。所以,第一步,使用包 igraph 把你的 data.frame 变成一个图。这似乎有点有趣,但没有一个小的可重现示例(包括完整的预期结果),我没有在做这个。
-
谢谢,我去看看
igraph,比DiagrammeR好吗? -
我不明白为什么 {1, 2, 3, 4} 不在输出中。
-
啊,漏了几例,抱歉!
标签: r enumeration