【发布时间】:2023-04-02 15:50:01
【问题描述】:
我有一组 N 个节点,分为 S 个子组。每个子组中的节点数并不总是相等,但划分尽可能均匀。
我想创建边以在组之间形成连接,但受约束:
- 每个节点的最大度数为k。
- 每组之间至少有 2 个连接。
有人能建议这种过程是否存在特定的算法或方法吗?似乎有一种既定方法可以解决的事情,但到目前为止我一直找不到任何东西。
* 更新以提供更多信息 (10/11)*
简而言之“伪代码”:
-
确定所有 N(N-1)/2 组可能的组合,例如 AB、AC、BC 等。
- 遍历每一对
- 对于每一对:
- 随机选择组 1 中的一个节点
- 随机选择第 2 组中的一个节点
- 在以下情况下建立这些节点之间的连接:
- 两个节点的度数
- 边缘不存在
- 重复直到出现所需数量的连接。
我经常遇到的问题是,如果组数大于每个组的节点数,那么在后面的pairings有机会赶上之前,第一个pairings迭代通过的节点就已经满了。我已经尝试随机化我遍历可能的对的顺序,但它没有帮助。
我通过在基于约束的组的形成中推导出一些限制来稍微缓解这个问题。
【问题讨论】:
-
您的意思是“每个对组之间至少有2个连接”吗?
-
您似乎在这里描述的是一个微不足道的问题。您在每组节点周围绘制一条“超级节点”曲线。在每对超级节点之间制作两条边。最后,获取每个组/超级节点的边缘端点,并将它们均匀地分布在组的节点之间。
-
是的。谢谢你的纠正。我曾考虑过这种方法,但我(可能天真地)认为在“超级节点”之间重新分配连接比直接将边分配给节点更难实现。这种方法的问题是边缘的分布变得非常不均匀,因为早期节点在后面的节点之前填满。谢谢你的小费,普鲁恩。我会考虑并试一试。
标签: python algorithm graph-theory