我得到了二部有向图,最初没有边缘。一组节点称为主体,另一组称为对象。只能从对象到对象构造边缘。
分别给出了主题(numSubj
)和对象(numObj
)的数量。
此外,给出了可用边数(numEdges
)。
目标是将边缘从对象均匀分布到对象。这意味着所有被摄对象应具有相似数量的向外边缘,类似地,所有对象应具有相似数量的向外边缘。每个主体和物体必须至少具有一个相连的边缘。
请提出解决方案(例如伪代码)
答案 0 :(得分:0)
首先,让我们索引从1到numSubj
以及从1到numObj
的每组节点中的所有项目。我们还假设numSubj < numObj
(如果不正确,则只需翻转集合,再求解并再次翻转即可)。
现在计算出边的总数,即这些数目中的lcm
,然后您可以通过将结果除以numObj
(A
)来得出输出边的数目,然后通过除以numSubj
(B
)来找到内向。
在为每个主题进行此计算之后,为所计算的主题数创建一条边,其中进入的边数A
小于所计算的第二个数字-B
。
此过程可以这样完成:
i
已连接到[i * B, i * B + 1, ... , i * (B + 1) - 1 ] mod numObj
使用
2
和5
:
LCM = 10
Ingoing = 10 / 5 = 2
Outgoing = 10 / 2 = 5
1 -> 1, 2, 3, 4, 5
2 -> 1, 2, 3, 4, 5
使用
4
和8
:
LCM = 8
Ingoing = 8 / 8 = 1
Outgoing = 8 / 4 = 2
1 -> 1, 2
2 -> 3, 4
3 -> 5, 6
4 -> 7, 8
使用
4
和6
:
LCM = 12
Ingoing = 12 / 6 = 2
Outgoing = 12 / 4 = 3
1 -> 1, 2, 3
2 -> 4, 5, 6
3 -> 1, 2, 3
4 -> 4, 5, 6