2010-10-03 76 views
1

如果n个床位要分配给m个人。每个人可能有多种偏好或根本不喜欢。如何满足最大限度的人。有偏好并且得到相同的人将被记录为满意的人。分配偏好

我试着用最小的首选床位先分配一个最低偏好的人。有没有我失踪的情况,因为它给了我一个错误的答案?

回答

4

这是maximum bipartite matching的问题。 Wiki有很好的算法,也可以查询maximum flow

+0

您能否详细说明一下? – san8055 2010-10-03 17:51:12

+0

@ san8055 - 这很难阐述,因为这需要相当多的图算法知识?具体而言,您需要知道图表是什么以及BF搜索是什么。如果你知道这些,然后建立一个二部图,其中两组是“n”床和“m”人。如果那个人喜欢那张床,那么你有一个人从一个床边到一个床边。将容量1添加到这些边缘。然后将虚拟节点的容量1边添加到每个人,然后从每张床添加到另一虚拟节点。从第一个虚拟节点运行最大流量算法。饱和的边缘将代表您的分配。 – IVlad 2010-10-03 17:58:20

+0

@非常感谢。如果我的假设有任何不妥之处,可以先分配一个最低偏好的人,然后选择最低优先的睡床 – san8055 2010-10-03 18:58:17