Algorithm 将图节点分配到桶中
我有一个邻接矩阵Algorithm 将图节点分配到桶中,algorithm,graph-theory,graph-algorithm,Algorithm,Graph Theory,Graph Algorithm,我有一个邻接矩阵nxn。图中的每个节点都有m输出边,我想将这些节点分配到b存储桶中。 每个存储桶应至少容纳l和u节点(uxb=n)。bucket内的每个节点都应该至少有一条到bucket内另一个节点的传出边 我觉得我错过了解决这个问题的最佳角度。 您将如何处理此问题?首先将图形分割为连接的组件。这可以通过执行深度优先或广度优先搜索在O(n)时间和内存内完成 如果任何节点未连接到另一个节点,则无法找到解决方案 从每个DFS/BFS树的叶子(即仅连接到另一个节点的节点)开始,将每个连接的组件拆分为相
n
xn
。图中的每个节点都有m
输出边,我想将这些节点分配到b
存储桶中。
每个存储桶应至少容纳l
和u
节点(u
xb
=n
)。bucket内的每个节点都应该至少有一条到bucket内另一个节点的传出边
我觉得我错过了解决这个问题的最佳角度。
您将如何处理此问题?首先将图形分割为连接的组件。这可以通过执行深度优先或广度优先搜索在O(n)时间和内存内完成 如果任何节点未连接到另一个节点,则无法找到解决方案 从每个DFS/BFS树的叶子(即仅连接到另一个节点的节点)开始,将每个连接的组件拆分为相邻节点的成对(或三元组)。每对(或三元组)都应该进入下一个存储桶,其中节点数最少
o o
/ \ |
o o o o | | | | | |
| / \ / | | | | | | |
o o o o | | | | | |
\ \ / / |____| |____| |____|
--o---- Bucket 1 Bucket 2 Bucket 3
从左叶中删除2个节点
o o
/ \ |
a o o o |a | | | | |
| / \ / | || | | | | |
a o o o |a | | | | |
\ \ / / |____| |____| |____|
--o---- Bucket 1 Bucket 2 Bucket 3
从右叶中删除2个节点
o b
/ \ |
o o b |a | |b | | |
/ \ / | || | || | | |
o o o |a | |b | | |
\ / / |____| |____| |____|
o---- Bucket 1 Bucket 2 Bucket 3
然后删除最终阶数为1的顶点及其相邻顶点:
o
/ \
o o |a | |b | |c |
/ \ / || | || | || |
o o c |a | |b | |c |
\ / / |____| |____| |____|
c---- Bucket 1 Bucket 2 Bucket 3
这将在剩余子图中创建一个新的1度顶点,以便删除该顶点及其相邻顶点:
o
/ \
d o |a d | |b | |c |
/ \ / || | | || | || |
d o |a d | |b | |c |
|____| |____| |____|
Bucket 1 Bucket 2 Bucket 3
只剩下3个顶点,如果它适合放入一个桶中,则将其放入桶中-否则,将一对顶点从物品数量最少的桶移动到物品数量次之的桶中,并将三元组添加到其位置
e
\
e |a d | |e e | |c b |
/ || | | |\ / | || | |
e |a d | | e | |c b |
|____| |____| |____|
Bucket 1 Bucket 2 Bucket 3
唯一的问题是,当您获得星形连接组件时
o o
\ /
o--o--o
/ \
o o
然后,整个连接的组件将需要放入同一个桶中,因为您无法通过移除一对相邻顶点的三元组来拆分图形,而不保留单个不相交的顶点。您可以通过测试是否删除了一对相邻顶点的阶数为1,并将其添加到该对中来检查此问题。您对一致性(随机性)有什么期望,或者有什么解决方案可以吗?请您解释一下这一点好吗“bucket中的每个节点都应该至少有一个到bucket中另一个节点的传出边缘。”如果我重新表述这一点,是否意味着“每个bucket应该至少有两个不同的节点,它们之间有一个边缘。“@AhmadFaiyaz不,这还不够。对于bucket中的每个节点,至少有一个传出边需要指向同一bucket中的节点。@rici bucket中的互连节点越多越好。如何检查最终解决方案的正确性。所有节点都在一个bucket中,而每个bucket中有2个节点,哪个更正确?桶的数量是预先定义的吗?哇,这是一个很好的答案。我想我需要试试看我是否理解正确。我会回来报到的。但是已经谢谢你了。