Algorithm 为学生指派伴侣的鲁棒算法

Algorithm 为学生指派伴侣的鲁棒算法,algorithm,robust,Algorithm,Robust,问题是:给定4组大小分别为A、B、C和D的学生,以及总共k名伴侣,设计一种算法,将伴侣分配给学生,比例几乎相等 你不能只给组k*A/N,k*B/N,k*C/N,k*D/N伴侣,因为伴侣的数量必须是一个正整数。你不能只是四处转转,因为那样你可能找不到合适数量的陪护。所以我的想法是,你扔掉小数部分,把整数部分给每组,整数除法也一样。然后你可能会有一些剩余的陪护,但最多3个,所以把他们交给剩余人数最多的小组 然后,采访者指出这有一个问题。如果你添加了另一个伴侣,那么将k增加到k+1,那么其中一组可能会

问题是:给定4组大小分别为A、B、C和D的学生,以及总共k名伴侣,设计一种算法,将伴侣分配给学生,比例几乎相等

你不能只给组k*A/N,k*B/N,k*C/N,k*D/N伴侣,因为伴侣的数量必须是一个正整数。你不能只是四处转转,因为那样你可能找不到合适数量的陪护。所以我的想法是,你扔掉小数部分,把整数部分给每组,整数除法也一样。然后你可能会有一些剩余的陪护,但最多3个,所以把他们交给剩余人数最多的小组

然后,采访者指出这有一个问题。如果你添加了另一个伴侣,那么将k增加到k+1,那么其中一组可能会以这种方式失去一个伴侣。她给了我一个例子,但我不记得了


有谁能想出一个算法来避免这个问题吗?

您试图解决的问题通常被称为 分配问题或选票分配问题。这是一样的 美国众议院席位分配问题 每个州的代表

您的方法(称为汉密尔顿方法)的鲁棒性问题 方法(或最大余数法)未能具有的称为 这个从 维基百科文章,“阿拉巴马悖论是1880年发现的,当时 结果发现,增加座位总数会减少 阿拉巴马州的份额从8%上升到7%。”

历史上,美国至少使用过四种不同的方法: 杰斐逊方法、汉密尔顿方法、韦伯斯特方法和 现在的 从1941年开始使用

后面这些方法背后的思想如下。设
D=N/k
, 总人口除以座位数/陪同人数。然后 让
d=d
,并修改
d
,直到四舍五入
k_i=round(G_i/d)
加起来就是正确的座位数,即

圆形(G_1/d)+圆形(G_2/d)+…+四舍五入(G_m/d)=k

关键在于函数
round
的工作方式。韦伯斯特方法 通常意义上的轮数:弱高于0.5,严格低于0.5 向下,这很像使用算术平均值。这个 亨廷顿-希尔方法基于使用几何平均数的思想 相反这些方法有一个很好的总结 . 注 所有这些除数算法都有缺陷,因为它们违反了 配额规则:一个州不能保证至少获得
楼层(地下室/地下室)
代表

如果你想更多地玩这个游戏,有一个很好的方法 关于这一点的文章已完成 历史、方程式和有趣的小程序

给定4组大小分别为A、B、C和D的学生,以及总共k名伴侣,设计一种算法,将伴侣分配给学生,比例几乎相等

这里有一个算法可以非常简单地解决这个问题:

  • 从每组分配0名陪同人员开始。如果任何小组都没有学生,那么就把那个小组扔掉,因为这样的小组不会有监护人

  • 如果指定的陪伴的总数等于k,那么我们就完成了

  • 为一组指派一名陪同人员。接受陪护的群体是每个学生陪护比例最低的群体。在平局的情况下,从每名学生陪同人数比例最低的学生中选择学生人数最多的一组。如果仍有平局,则从所选组中选择字母顺序排在第一位的组

  • 转至步骤2

  • 它做出明确的确定性赋值。比例将尽可能接近数值所允许的大小。增加k不会减少对任何组的分配,因为它实际上只会导致额外的迭代发生,而没有迭代会减少任何组的分配

    同样大小的两组有可能有不同数量的伴侣,但如果不重新说明问题,允许对k进行修改,这是无法纠正的。在任何情况下,相同规模的两组在分配上的差异都不会超过1


    在另一个答案中,所有用于为状态分配表示的算法都是不必要的复杂,并且设计用于最小化执行的计算步骤的数量(通过进行数值计算而不是增量分配)。我给出的算法在计算机上运行时非常简单。

    这些都是很好的链接。谢谢。我想这可能相当于韦伯斯特的方法。