我的问题如下: 我和我的团队正在搬到办公室的另一部分,我们必须确定每个人的坐位。但是,每个人都有优先事项。我想找到一种算法,可以帮助我们以每个人都满意的方式分配座位。 (或至少其中的大多数。)
我已经开始实施自己的算法,向每个人询问3个首选选项(该团队由10个人组成,并且有10个位置),并考虑其中的“资历”(他们花了很长时间)团队之间)。
但是,我一直运气不好,试图浏览互联网寻找一种算法,该算法可以解决类似的问题,但没有找到任何解决方法。
解决此问题的最佳方法是什么?有没有 解决此问题或类似问题的众所周知的算法?
谢谢!
答案 0 :(得分:2)
首先让我想到的是稳定的婚姻问题。这是原始算法的问题说明:
给出n个男人和n个女人,每个人都按照优先顺序对所有异性进行排名,将这些男人和女人结婚,这样就不会有两个异性愿意彼此相爱的人他们目前的合作伙伴。如果没有这样的一对人,婚姻就被认为是稳定的。
请仔细阅读Gale–Shapley algorithm,这是我将要解决的问题。
让每个工人列出所有地点的排名。这些将是“男人”。然后,每个地点将使用年资排名作为他们对“男人”的排名。这些斑点将成为Gale-Shapley算法中的“女性”。
您将获得没有“不稳定婚姻”的座位分配。这是不稳定的婚姻:
第一个匹配集中的元素A比第二个匹配集中的某个给定元素B优先于已经匹配A的元素,并且
B相对于已经匹配B的元素,B也更喜欢A。
在这种情况下,不稳定的婚姻意味着W1
和S1
之间存在一个工人席位,因此另一个工人W2
的排名S1
高。不仅如此,S1
的排名也高W2
。由于席位是根据资历列表进行的,因此W2
的资历更高。
实际上,这意味着您将获得座位分配,这样就不会让任何工人拥有一个其他资历较高的人想要“更多”的座位。
该Wiki文章的底部提到了已经在R和Python中实现该算法的软件包,因此输入首选项列表取决于您。
免责声明:这可能不是最有效的算法。所有座位都具有相同的排名列表,因此某个地方可能会有捷径。但是,如果大炮已经为您编写了R / Python,则使用大炮杀死苍蝇会更容易。而且,这是我记得uni的唯一算法,因此这是我钉任何钉子的唯一锤子。
答案 1 :(得分:1)
我决定实施强力解决方案,这是许多评论所建议的。 因此:
我确定有些人建议使用一些更好的算法来执行此操作,但是我已经没时间了。
我没有发布代码,因为它真的很长,实现起来也不太复杂。但是,如果您需要它,请不要犹豫删除私人消息。