我有像这里的二分图
我正在尝试在图表的右侧找到最小的节点集,这样图表左侧的每个节点都连接到图表右侧的一个节点。对于上面的图表,看起来像这样。
我不太确定如何做到这一点。我感觉它类似于图论或基本CS中的一些常见问题,并且通过一些转换变得等同于已知解决方案的问题。
答案 0 :(得分:3)
你的问题是NP难的,因为set cover problem(或更确切地说,正如大卫所指出的exact cover problem)可以减少到它。一个简单的指数时间算法适用于节点子集上的动态编程。它可以在时间O(2 ^ m * n)中实现,其中m是左侧节点的数量,n是右侧节点的数量。
基于Branch& amp;的算法绑定可能在实践中更有效。
答案 1 :(得分:1)
“图表左侧的每个节点都连接到图表右侧的一个节点”这听起来像是一个精确的封面问题,它增加了封装约束来设置封面。它也是NP难的,而且我对整体编程的准确覆盖不如套装那么乐观,尽管它值得一试。 Knuth的Algorithm X在确切的封面上可能比封面更好,所以值得一试。