2013-12-09 56 views
-1

为了扩大沟通,公司决定在晚餐时混合部门。假设每张桌子的设计都允许10人吃晚饭,但增加另一个人也是可以的。因此,如果职员人数N%10小于6,那么N%10人应该放入另外10个人选的表中。洗牌算法:晚餐部门洗牌

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

我的执行是先随意放10人一桌。然后为每个表中的每个部门留下唯一的一个,并将其他人拿出并放入数组中。数组随机洗牌并放回桌子。直到成本函数F永不减少,而F被定义为同一表中显示的同一部门的人数的总和。

+0

你的问题的定义是不完整的 - 你必须定义什么是可接受的解决方案。 –

+0

@AlexD谢谢,我已经修改了这个问题,更准确地说。 – hailinzeng

+0

上次编辑表示必须“随机”分配人员。这使问题变得毫无意义。只要你做任何事情来偏袒任务,使人们不太可能最终得到来自同一部门的人员,它就不再是“随机”了。 –

回答

0

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

如果人在最大的百货数量小于表的数量,您具有同一个部门里的人同台的机会是0