【问题标题】:Robust algorithm to assign chaperones to students为学生分配伴侣的稳健算法
【发布时间】:2011-12-12 06:39:09
【问题描述】:

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

您不能只给组 k*A/N、k*B/N、k*C/N、k*D/N 伴侣,因为伴侣的数量必须是正整数。而且你不能只是四舍五入,因为那样你可能得不到正确数量的伴侣。所以我的想法是你把小数部分扔掉,把整数部分给每个组,整数除法也是如此。那么你可能会有一些剩余的伴侣,但最多 3 个,所以把它们分配给剩余最多的组。

然后,面试官指出这是有问题的。如果您添加另一个伴侣,因此将 k 增加到 k+1,那么其中一个组实际上可能会以这种方式失去一个伴侣。她给了我一个例子,但我不记得了。

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

【问题讨论】:

    标签: algorithm robust


    【解决方案1】:

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

    您的方法(称为 Hamilton 的 方法或最大余数的方法)没有被称为 Alabama Paradox。来自 维基百科文章,“阿拉巴马悖论于 1880 年被发现,当时 发现增加席位总数会减少 阿拉巴马州的份额从 8 增加到 7。”

    从历史上看,美国至少使用了四种不同的方法: Jefferson 方法、Hamilton 方法、Webster 方法和 当前Huntington-Hill's method 自 1941 年开始使用。

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

       round(G_1/d) + round(G_2/d) + ... + round(G_m/d) = k

    关键在于函数round 的工作方式。韦伯斯特的方法 通常意义上的回合:略高于 0.5 上升,严格低于 0.5 往下走,这很像使用算术平均值。这 Huntington-Hill 方法基于使用几何平均值的思想 反而。这些方法有一个很好的总结 here。笔记 所有这些除数算法都有缺陷,因为它们违反了 配额规则:一个州不能保证至少获得 floor(G_m/D)代表。

    如果您想更多地玩这个,有一个很好的 Cut The Knot 上关于此的文章 历史、方程式和有趣的小程序。

    【讨论】:

    • 这些链接很棒。谢谢。
    【解决方案2】:

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

    这是一个非常简单地解决问题的算法:

    1. 从每组 0 名伴侣的分配开始。如果任何小组中没有学生,则丢弃该小组,因为不会为这样的小组分配监护人。

    2. 如果分配的伴侣总数等于 k,那么我们就完成了。

    3. 为一组分配一名陪护人员。接受监护人的小组是每个学生的监护人比例最低的小组。在平局的情况下,从每个学生的监护人比例最低的小组中选择学生最多的小组。如果仍有平局,则从选定的组中选择按字母顺序排在第一位的组。

    4. 转到第 2 步。

    它做出明确的确定性分配。在数值允许的范围内,比例将几乎相等。增加 k 不会减少对任何组的分配,因为它实际上只会导致发生额外的迭代,并且没有迭代会减少任何组的分配。

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

    其他答案中用于将表示分配给状态的所有算法都不必要地复杂,并且旨在最大限度地减少执行的计算步骤的数量(通过进行数值计算而不是增量分配)。我给出的算法在计算机上运行时非常简单。

    【讨论】:

    • 我觉得这可能相当于韦伯斯特的方法。
    猜你喜欢
    • 2018-08-17
    • 1970-01-01
    • 2013-10-19
    • 2011-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-13
    相关资源
    最近更新 更多