如何解决分配组
我在将变量分配给集合时遇到问题。每个集合都有一个可以分配给它的变量限制,每个变量可以分配给总集合的某些子集。
示例:
-
a
可以位于A
或B
组中
-
b
可在集合B
中
-
c
可以位于A
或B
组中
-
d
可在集合A
中
因此,我们可以有A: a,d; B: b,c
或A: c,d; B: a,b
(集合中变量的顺序无关紧要)/
当然,有时无法分配所有变量,有时有多个选项,有时只有1个选项。
我觉得这个问题有一个简单的版本,但是我似乎没办法。任何指针将不胜感激。
解决方法
使用最大流量可有效解决。准备一个流动网络,从源到每个变量的单位容量弧,从每个变量到它可以归属的每个集合的单位容量弧,以及从每个集合到容量池的弧等于该集合的容量的弧。例如,
ARCS
tail head capacity
------------------
s a 1
s b 1
s c 1
s d 1
a A 1
a B 1
b B 1
c A 1
c B 1
d A 1
A t 2
B t 2
使用您喜欢的最大流量算法,该算法会产生积分流,并根据设置圆弧具有流量的变量提取分配。
,此问题是NP完全的,这意味着没有多项式时间解。 在这种情况下,您将不得不使用回溯。
看看这些链接:
https://www.geeksforgeeks.org/vertex-cover-problem-set-1-introduction-approximate-algorithm-2/ https://www.geeksforgeeks.org/set-cover-problem-set-1-greedy-approximate-algorithm/
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。