我有一组N个节点,分为S个子组。每个子组中的节点数并不总是相等,但划分尽可能均匀。
我想创建边以在组之间形成连接,但受限制:
是否有人能够建议是否存在针对此类流程的特定算法或方法?似乎有一种既定的方法,但到目前为止我一直找不到任何东西。
*更新以提供更多信息(10/11)*
简要说明'伪代码':
确定所有N(N-1)/ 2种可能的组合,例如AB,AC,BC等。
我经常遇到的问题是,如果组的数量大于每个组中的节点数,则在后续配对有机会赶上之前,迭代的第一对配对中的节点已满。我试过随机化顺序我迭代可能的对,但它没有帮助。
我通过根据约束在组的形成中得出一些限制,稍微缓解了这个问题。
答案 0 :(得分:0)
你在这里描述的是一个微不足道的问题。您在每组节点周围绘制一个“超级节点”曲线。在每对超级节点之间制作两条边。最后,获取每个组/超级节点的边缘端点,并将它们均匀地分布在组的节点中。
根据OP评论更新
这个“早期节点”和“后期节点”是什么?如果您有关于此问题的更多信息,请提供。你分阶段这样做:
这为您提供了所需的映射,同时最小化了每组中的最大程度。如果存在,这将生成最佳解决方案。
10月11日OP更新的细化
<强>分析强>
您有 N 个节点和 S 子组(群组)。这意味着每个组中都有 N / S 节点。如果这不是整数,那么在某些组中你会有 P = floor(N / S),而在其他组中会有 P + 1 节点。
你有一个最大学位 k ;您至少有 N(N-1)边缘,每组需要 2(N-1)边缘端点。
引理:较小的组(具有P个节点)可以支持k P连接。 如果k P&lt; 2(N-1),那么你没有解决方案的要求。 否则(即2(N-1)<= k * P),那么你可以通过施工获得公平的解决方案。
<强>解决方案强>
以您喜欢的任何方式为每个组内的节点排序;让我们将它们编号为0到P-1或P(取决于组人口)。同样在每个组中,将组的端点编号为0到2(N-1) - 1。
对于每个组,迭代端点。对于每个端点号 i ,将其分配给节点 i mod P (或更大的组的P + 1)。这将在节点之间均匀分配所有端点。
Q.E.D。