算法 - 通过框

时间:2017-08-24 00:39:08

标签: algorithm data-structures

我正在制作一个个人项目并遇到障碍。我不会完全按照原样指出问题,因为它很难解释,相反我会提出一个类似的问题,我认为可以像解决实际问题一样解决问题。

想象一下:你有3个项目(A,B和C),这些项目只能放在某些方框(1,2或3)中。每个项目可以放在0或更多的框内。例如,假设这些项目可以放在这些框中:

  • 项目A可以放在方框1或2中。
  • 项目B只能放在方框2中。
  • 项目C只能放在方框3中。

想法是弄清楚是否存在解决方案(不是解决方案本身),其中所有项目都可以放在一个盒子里,一个盒子只能容纳1个项目。例如,上述示例的可能解决方案可以是项目A - >方框1,项目B - >方框2,项目C - >方框3。

这个想法是为任何N个项目和任意M个盒子解决这个问题。我一直试图在整个晚上解决这个问题,但除了明显的暴力解决方案外,我一直在苦苦挣扎。

正确方向的任何指针? :)

提前致谢。

1 个答案:

答案 0 :(得分:4)

您有一个二分图,其中的项目和框作为两组顶点,以及所有允许展示位置的边。

您的问题被称为"最大的二分匹配",并且经过充分研究。 Hopcroft-Karp算法在O(E * sqrt(V))时间运行,例如:https://en.wikipedia.org/wiki/Hopcroft%E2%80%93Karp_algorithm

如果您连接单个"来源"顶点到每个项目顶点,并将每个框顶点连接到一个" sink"顶点,然后你的问题成为一个最大的流问题,这也是经过充分研究,并经常用福特福克森算法解决:https://en.wikipedia.org/wiki/Ford%E2%80%93Fulkerson_algorithm