所以我有一组用户,他们希望获得1个项目,但是他们可以根据他们的需要排序3个愿望。 但是,所有用户都可以限制一件物品被送走的次数。最后,每个人都应该(可能)得到他最想要的项目。
我已经尝试将希望项目X的每个用户添加到“wishers”列表中,如果此列表小于可用数量,则每个人都可以获得它。问题是,如果可用的项目数量更大,这并不尊重有人喜欢的项目。
我相信可能已经有一个数学问题试图解决这个问题。
答案 0 :(得分:1)
让我们说你有300个人,他们已经对他们的三个选择进行了排名。
一个简单的算法就是尝试先实现每个人的首选。所以我们说300人的首选是:150个苹果,120个香蕉,30个胡萝卜。如果可用物品的数量少于所需物品的数量,则每个人都得到一个。否则随机分发。
所以在上面的示例中,您可以完成230人的首选。
然后通过第二个(然后是第三个)选择剩余的人并重复。