这个问题很熟悉,但我不记得解决方案(或者是否有任何好处)。
另一种方法是,你有N个潜在的匹配,以及它们可能在的M个位置 - 每个N只能适合M个位置的子集 - 这个配置是否有足够的位置。
图表更好地证明了这一点。将N设置为3(沿着顶部),将M设置为4,使用1表示请求者(N)需要哪个资源(M) - 资源不足的示例情况:
0 1 2
0 1 1 1
1 1 1 1
2 0 0 0
3 0 0 0
0 1 2
0 1 X X
1 X 1 X
2 0 0 0
3 0 0 0
一旦分配了0和1,2的子集中就没有可用的资源。另一方面,这种情况将允许足够的资源分配。
0 1 2
0 1 1 1
1 1 1 1
2 0 0 0
3 0 1 0
0 1 2
0 1 X X
1 X X 1
2 0 0 0
3 0 1 0
我真的只关心是否可以满足分配。不一定是满足它的配置。
如果没有简单的方法可以得到是或否,我想的是首先以最少的可能性来定位行和列。我认为这会迅速缩小范围。同样,识别不可满足的情况可能是一种很好的消除方式。
我的问题是,有什么数学,一个好的算法,或者我应该考虑的一类问题?它似乎来自实时编程或sodoku。即使只是一个谷歌的术语将非常感激。
谢谢!
答案 0 :(得分:1)
我相信你想查看作业问题(http://en.wikipedia.org/wiki/Assignment_problem)
接近它的一种方法是使用匈牙利算法(http://en.wikipedia.org/wiki/Hungarian_algorithm)
并且有一些库已经实现了它,例如:http://robotics.stanford.edu/~gerkey/tools/hungarian.html
答案 1 :(得分:0)
由于没有“成本”,我最终使用[Hall's Theorem] [1]。
编辑:我最终会使用二分匹配。