洗牌算法:部门随机播放晚餐

时间:2013-12-09 00:02:23

标签: algorithm

为了扩大沟通,公司决定将各部门混合在一起吃饭。假设每张桌子的设计允许10人吃晚餐,但添加另一个人也没关系。因此,如果员工人数N%10小于6,那么N%10人应该安排到其他10人选址表中。

假设有20个部门,每个部门有10~30人。你会如何随意安排晚餐,以便同一个部门内的人最少有机会在同一张桌子上,而且每两个部门的财产都有相同的机会在桌子上见面?

我的实现是先将10个人随机放入一个表。然后为每个表中的每个部门留下唯一的一个,并将其他部分放入并放入一个数组。该数组随机洗牌并放回表中。这样做直到成本函数F永远不会减少,而F被定义为同一个表中显示的同一部门的人数之和。

1 个答案:

答案 0 :(得分:0)

如果我理解了一切,这个问题似乎完全无足轻重。预先计算您需要的表格数量(使用您提供的标准,基于N%10)。从最大的部门开始,然后开始为每个部门的人员分配一个人。如果您到达最后一张桌子,请返回第一张桌子并继续为每张桌子分配一个人。当部门中的所有人员都被分配时,请转到第二大部门,依此类推。如果您到达一张已满的桌子,请跳过它。

如果最大部门的人数少于表格的数量,那么让同一个部门的人员在同一张桌子的机会是0。