我的问题是:我想做一个“善意”的抽奖过程。如果可能的话,这个算法将平均分配奖品。这可能会被认为是不公平的人谁买了一张票,每一个奖项,因为他将更灵活地赢得不受欢迎的奖项,但不要介意,我们可以说,奖品大致相同。该算法有助于消除方差,减少掷骰子赢取奖品。(是的,无聊)
如果你能得奖的话,我会有比赛的。每个人都可以买一张票。
举个例子,这里有奖品和买票的人:
Prize1=[Pete,Kim, Jim]
Prize2=[Jim, Kim]
Prize3=[Roger, Kim]
Prize4=[Jim]
有4个奖项和4个唯一的名字,所以应该可以平均分配。
这个例子可能很容易解决,你应该在15秒内找到它,但是当
N
和M
增加时,它会变得更糟。我想做一个通用的算法,但是很难。我需要一些好的提示,甚至更好的解决方案或链接到解决方案。
最佳答案
理论:你有一个Bipartite graph。你必须找到一个Perfect matching。如果满足以下条件,则图中存在完全匹配:
| A=B|
图满足Hall condition
如果存在完全匹配,则可以运行Hungarian algorithm来查找它。