algorithm - 二分图中边的均匀分布

标签 algorithm graph-theory pseudocode

我得到了一个二分图和有向图,最初没有边。一组节点称为主题,另一组称为对象。边只能从主体到客体构建。 分别给出了主体数 (numSubj) 和客体数 (numObj)。 此外,还给出了可用边的数量 (numEdges)。

目标是将边缘从主体均匀分布到物体。这意味着所有主体都应该有相似数量的出边,类似地所有对象都应该有相似数量的入边。每个主题和对象都必须至少有一个连接边。

请提出解决方案(例如伪代码)

最佳答案

首先让我们索引每组节点中的所有项目,从 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

With 2 and 5:

LCM = 10  
Ingoing = 10 / 5 = 2  
Outgoing = 10 / 2 = 5   
1 -> 1, 2, 3, 4, 5   
2 -> 1, 2, 3, 4, 5

With 4 and 8:

LCM = 8  
Ingoing = 8 / 8 = 1   
Outgoing = 8 / 4 = 2   
1 -> 1, 2   
2 -> 3, 4 
3 -> 5, 6  
4 -> 7, 8  

With 4 and 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 

关于algorithm - 二分图中边的均匀分布,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55198878/

相关文章:

c# - 从坐标获得第一、第二、第三邻居的算法

algorithm - Code Jam 字符串匹配

c++ - 如何实现加法除法?

algorithm - 关于最短路径等的算法问题

python - 在 Python 中打印图形(顶点、边)

algorithm - 在二叉搜索树中删除节点的伪代码和条件

java - 我需要在此数组中找到作为局部最小值的值,但我遇到了 arrayindexoutofbounds 异常。我怎样才能解决这个问题?

algorithm - 如何充分计算这个矩阵

haskell - 首先遍历图的宽度,在Haskell中标记访问的节点

arrays - 获取分块数组中项的组索引的算法