处理分配问题的算法

2024-02-03

我需要一种算法、技术或任何指导来优化以下问题:

我有两家公司:

  • A公司有员工324人
  • B公司有员工190人

员工总数(A+B)是514。我需要随机选择28%这 514 名员工中。

好的,那么我们就这样做吧:514 的 28% 是 143.92;哦...这很糟糕,我们在这里与人打交道,所以我们不能有小数位。好的,那么我会尝试向上或向下舍入。

如果我向下舍入:143 是 27,82101167%,这不好,因为我必须有至少 28%,所以我必须四舍五入为 144。

所以现在我知道必须选择144名员工。

现在主要问题来了...是时候检查每个公司必须使用多少百分比才能获得总数 144。我该如何做才能使每个公司的百分比尽可能接近 28%?

我来举例说明:

如果我只为每家公司申请 28%,我会得到:

  • A 公司有 324 名雇主:0.28 * 324 = 90.72
  • B 公司有 190 名雇主:0.28 * 190 = 53.2

再次,我以小数点结束。所以我必须弄清楚哪些应该向上舍入,哪些应该向下舍入以获得总共 144。

Note:在这个例子中我只使用了两家公司,但在实际问题中我有 30 家公司。


很多方法 http://www.ctl.ua.edu/math103/apportionment/appmeth.htm进行分配,没有目标最好的方法 http://www.ams.org/samplings/feature-column/fcarc-apportionii2.

以下是州和席位,而不是公司和个人。信用可能归功于拉里鲍文博士,他在第一个链接的基本网站上被引用。

汉密尔顿法
也称为最大余数法,有时也称为文顿法。

程序:

  1. 计算标准除数。
  2. 计算每个州的标准配额。
  3. 最初为每个州分配其较低配额。
  4. 如果有多余席位,请按照标准配额小数部分的降序顺序将它们一次一个地分配给各州。

在这里,标准除数可以通过将总人口(每个公司的人口总和)除以您想要抽样的人数(在本例中为 144 人)来找到。标准配额是公司人口除以标准除数。下限配额是该值向下舍入。然而,这种方法有一些缺陷。

问题:

  • 阿拉巴马悖论
    分配席位总数的增加会导致一个州失去一个席位。
  • 人口悖论
    一个州人口的增加可能会导致该州失去一个席位。
  • 新州悖论
    添加一个拥有公平份额席位的新州可能会影响其他州的席位数量。

这可能是最简单的实施方法。以下是一些其他方法及其相应的实现和缺点。

杰斐逊的方法
也称为最大除数法,在欧洲称为 d'Hondt 法或 Hagenbach-Bischoff 法。

程序:

  1. 计算标准除数。
  2. 计算每个州的标准配额。
  3. 最初为每个州分配其较低配额。
  4. Check to see if the sum of the Lower Quotas is equal to the correct number of seats to be apportioned.
    • 如果较低配额的总和等于要分配的正确席位数,则向每个州分配等于其较低配额的席位数。
    • 如果较低配额的总和不等于要分配的正确席位数,则通过反复试验找到一个数字,MD,称为修改除数来代替标准除数,以便当修改配额时,MQ,对于每个州(通过将每个州的人口除以 MD 而不是 SD 来计算)进行向下舍入,所有四舍五入(向下)修改配额的总和就是要分配的确切席位数。 (注意:MD 始终小于标准除数。)这些四舍五入(向下)的修改配额有时称为修改较低配额。分配每个州的修改后的较低配额。

Problem:

  • 违反配额规则。 (但是,它只能违反上限配额,而不能违反下限配额。)

韦氏方法
也称为韦伯斯特-威尔科克斯法以及大分数法。

程序:

  1. 计算标准除数。
  2. 计算每个州的标准配额。
  3. 如果某个州的标准配额的小数部分小于 0.5,则最初为其分配下限配额。
    如果某个州的标准配额的小数部分大于或等于 0.5,则最初为其分配上限配额。
    [换句话说,根据算术平均值(平均值)向下或向上舍入。]
  4. Check to see if the sum of the Quotas (Lower and/or Upper from Step 3) is equal to the correct number of seats to be apportioned.
    • 如果配额之和(步骤 3 中的下限和/或上限)等于要分配的正确席位数,则向每个州分配等于其配额(步骤 3 中的下限或上限)的席位数。
    • 如果配额总和(步骤 3 中的下限和/或上限)不等于要分配的正确席位数,则通过反复试验,找到一个数字 MD,称为修正除数以供使用的标准除数,以便当每个州的修改配额 MQ(通过将每个州的人口除以 MD 而不是 SD 来计算)基于算术平均值(平均值)进行舍入时,所有舍入的修改配额的总和是需要分配的确切席位数。分配每个州的修改后的舍入配额。

Problem:

  • 违反配额规则。 (但是,违规行为很少见,并且通常与人为的情况有关。)

亨廷顿希尔法
也称为等比例法。

  • 目前用于分配美国众议院的方法
  • 由人口普查局首席统计师 Joseph A. Hill 和哈佛大学力学与数学教授 Edward V. Huntington 于 1911 年左右开发
  • 初步术语:几何平均数

程序:

  1. 计算标准除数。
  2. 计算每个州的标准配额。
  3. 如果某个州的标准配额的小数部分小于标准配额紧邻的两个整数的几何平均值(例如,16.47 紧邻 16 和 17),则最初为该州分配其下配额。
    如果某个州的标准配额的小数部分大于或等于标准配额紧邻的两个整数的几何平均值(例如,16.47 紧邻 16 和 17),则最初为该州分配上限配额。
    [换句话说,根据几何平均值向下或向上舍入。]
  4. Check to see if the sum of the Quotas (Lower and/or Upper from Step 3) is equal to the correct number of seats to be apportioned.
    • 如果配额之和(步骤 3 中的下限和/或上限)等于要分配的正确席位数,则向每个州分配等于其配额(步骤 3 中的下限或上限)的席位数。
    • 如果配额总和(步骤 3 中的下限和/或上限)不等于要分配的正确席位数,则通过反复试验,找到一个数字 MD,称为修正除数以供使用的标准除数,以便当每个州的修改配额 MQ(通过将每个州的人口除以 MD 而不是 SD 来计算)基于几何平均值进行舍入时,所有舍入的修改配额的总和就是准确的数量待分配的席位。分配每个州的修改后的舍入配额。

Problem:

  • 违反配额规则。

作为参考,配额规则:

配额规则

始终仅分配下限和/或上限的分配方法遵循配额规则。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

处理分配问题的算法 的相关文章

  • 算法:找到圆中的峰值

    Given n排列成圆圈的整数显示了一种可以找到一个峰值的有效算法 峰值是不小于它旁边的两个数字的数字 一种方法是遍历所有整数并检查每个整数以查看它是否是峰值 这产生O n 时间 似乎应该有某种方法来分而治之 以提高效率 EDIT 好吧 基
  • OpenMP 共享与第一私有性能比较

    我有一个 pragma omp parallel for在类方法内循环 每个线程只读访问很少的方法局部变量 很少调用私有数据和方法的参数 所有这些都在一个声明中声明shared条款 我的问题 性能方面不应该有任何区别声明这些 变量share
  • 涉及数学的方法给出与计算器不同的答案

    我是java新手 所以请耐心等待 我试图从比赛总数中获得胜利的百分比 但我正在做的事情还很遥远 我获取百分比的方法如下 public double winPercentage int wins int total return wins t
  • java中的Anagram算法

    我想做字谜算法但是 这段代码不起作用 我的错在哪里 例如 des 和 sed 是字谜 但输出不是字谜 同时我必须使用字符串方法 不是数组 public static boolean isAnagram String s1 String s2
  • 算法 - 树中所有节点的最大距离

    所以 找到树中两个节点之间的最长路径相当容易 但我想要的是找到从节点出发的最长路径x到树中的另一个节点 对于所有x 这个问题也可以用以下方式表达 计算从给定的树中可以生成的所有有根树的高度 One way of course is to j
  • Scikit Learn GridSearchCV 无需交叉验证(无监督学习)

    是否可以在没有交叉验证的情况下使用 GridSearchCV 我正在尝试通过网格搜索优化 KMeans 聚类中的聚类数量 因此我不需要或想要交叉验证 The 文档 http scikit learn org stable modules g
  • 埃拉托斯特尼筛法是生成 1 到 N 素数的最佳算法吗?

    我在一次采访中被问到这个问题 我使用埃拉托色尼筛子概念和数组实现了一种算法 有没有更好的方法来解决这个问题 对于不知道筛子的人 请点击以下链接 http en wikipedia org wiki Sieve of Eratosthenes
  • 大小为 n 的数组,其中一个元素 n/2 次

    给定一个由 n 个整数组成的数组 其中一个元素出现超过 n 2 次 我们需要在线性时间和恒定的额外空间中找到该元素 YAAQ 又一个数组问题 我有一种偷偷的怀疑 这类似于 在 C 中 We don t need an array publi
  • RNG 技术的可移植性和可重复性

    我可以使用两种方法之一来创建一个伪随机数序列 该序列具有两个重要特征 1 它可以在不同的机器上重现 2 该序列永远不会重复范围内的数字 直到所有数字都被发出 我的问题是 这两种方法在可移植性 操作系统 Python 版本等 方面是否存在潜在
  • 测试 xmm/ymm 寄存器是否为零的更快方法?

    It s fortunate that PTEST does not affect the carry flag but only sets the rather awkward ZF also affects both CF and ZF
  • 公共领域还好吗?

    在你像我最初那样做出直觉反应之前 请阅读整个问题 我知道它们让你感觉很脏 我知道我们以前都被烧伤过 我知道这不是 好风格 但是公共场所可以吗 我正在开发一个相当大规模的工程应用程序 该应用程序创建并使用结构的内存模型 从高层建筑到桥梁再到棚
  • 模式识别算法

    过去我必须开发一个充当规则评估器的程序 你有一个先行词和一些后续词 动作 所以如果先行词评估为真 则执行的动作 当时我用的是修改版RETE算法 http en wikipedia org wiki Rete algorithm RETE 有
  • 如何缩短 PHP if 语句?

    我有一个 if 语句 我需要将单个字符串与许多不同的选项进行比较 我在下面发布的代码非常清楚地表明了我的意思 我知道有两种方法可以做到这一点 但另一种甚至更长 那么 是否有任何函数可以以更短的方式实现类似的功能 我的要求可能看起来很愚蠢 但
  • javascript - 找到在一定限制下给出最大总和的子集(子集总和)

    我有一个包含一些整数值的数组 我需要获取它们的子集 该子集给出小于给定值的最大总和 假设我有这个数组 40 138 29 450 我想获得该数组的一个子集 使总和最大化 但低于用户给出的限制 比如说 250 在这种情况下 它应该返回 139
  • std::__gcd 和 std::gcd 有什么区别?

    Many https www geeksforgeeks org stdgcd c inbuilt function finding gcd websites https codeforces com submissions Madiyar
  • 我该如何解决? KnapSack - 值完全相同,但每个对象都有三个权重

    我在解决我的练习时遇到问题 我读到了动态规划和算法 我认为我的练习是 特定背包问题 我用暴力法解决了它 但我无法用动态规划解决它 我有一艘重300吨的船 背包 有些晶体本身含有 3 种物质 X Y Z 每种物质都有重量 并且所有晶体都具有相
  • 如何发现“贪婪”算法?

    我正在读一本关于 贪婪 算法 但我很难发现它们解决真正的 顶级程序员 问题 If I know给定的问题可以用 贪婪 算法来解决 因此编写解决方案非常容易 然而 如果我没有被告知这个问题是 贪婪的 我就无法发现它 用 贪婪 算法解决的问题有
  • 如何计算加权平均值?

    我的语言是PHP 但是算法应该是相当通用的 我有一个关联数组 比方说 评级和评级次数 ratings array 1 gt 1 2 gt 3 3 gt 6 4 gt 3 5 gt 3 这相当于 1 2 2 2 3 3 3 3 3 3 4 4
  • 将代码保存在 L1 缓存中

    我一直在阅读维基百科关于 K 编程语言的文章 http en wikipedia org wiki K programming language Performance characteristics这就是我所看到的 解释器的小尺寸和语言的
  • 期望最大化算法的数值示例[重复]

    这个问题在这里已经有答案了 由于我不确定给出的公式 有人可以提供 EM 算法的简单数字示例吗 一个非常简单的具有 4 或 5 个笛卡尔坐标的坐标就可以了 那这个呢 http en wikibooks org wiki Data Mining

随机推荐

  • 在 IntelliJ 和 Eclipse 开发人员都在工作的项目中使用 @NotNull

    IntelliJ IDEA 的一位同事 从事另一个项目 向我展示了令人惊叹的 NotNull 注释 我在这里读过有关如何开始在各处添加 NotNull 的消息 节省了大量时间和麻烦 IntelliJ 10 甚至可以在检测到该情况时自动将 N
  • 如何创建通用 JsonDeserializer

    我需要创建一个通用解串器 换句话说 我不知道反序列化的目标类是什么 我在互联网上看到过一些例子 他们创建了一个反序列化器 例如JsonDeserializer
  • 如何使用 Django 创建三重联接表

    使用 Django 的内置模型 如何在三个模型之间创建三重连接 例如 用户 角色和事件是模型 用户有很多角色 角色有很多用户 多对多 事件有许多用户 用户也有许多事件 多对多 但对于任何给定的事件 任何用户可能只有一个角色 如何在模型中表示
  • 必需的字段验证在 JQuery Popup MVC 4 中不起作用

    我有 JQuery 弹出窗口 我想在其上放置必需的字段验证 为此 我在模型中设置了必需的属性 并在视图中为它们设置了验证消息 但所需的字段验证不适用于弹出窗口 必需的字段验证在 JQuery 弹出窗口以外的表单上运行良好 请指导我应该如何解
  • Google 计算引擎 (GCE) 电子邮件传送解决方案?

    我刚刚在 Google Compute Engine 上设置了几个实例 但由于 GCE 阻止了端口 25 465 和 587 上的出站连接 因此电子邮件发送系统出现了问题 GCE 提 供详细解决方案 https developers goo
  • 如何从 C++ 更改 Windows 闪烁光标形状?

    如何将 Windows 闪烁光标形状从默认的垂直 更改为水平 如 dos 中使用的 有没有一些好的功能可以解决这个问题 OS win7 这实际上被称为caret 而不是一个cursor 这可能就是混乱的根源 也是为什么寻找解决方案没有产生太
  • 如何添加与夏令时时区相关的每周时间增量

    我想向本地化日期时间对象添加或减去周 或天 月或年 问题是 由于夏令时时区 这种天真的方法会导致 1 小时轮班 2014 03 27 12 00 就在冬令时转夏令时之前 例如 如果我向欧洲 柏林时区本地化的日期添加一周的时间增量 结果将是
  • 自动夹具奇怪的错误

    我收到这个错误 Ploeh AutoFixture Kernel IllegalRequestException 对 IntPtr 的请求是 检测到 这是不安全的资源 如果使用的话 进程会崩溃 所以请求被拒绝 普通的 IntPtr请求的来源
  • 在 WiX Burn 自定义托管引导程序中将 WIC 添加为 .NET 4.0 之前的要求

    我在获取包含自定义托管引导程序应用程序的刻录包以在某些不附带 Windows 成像组件的平台上启动时遇到问题 而安装 NET 4 0 需要使用该组件 Windows 2003 就是其中之一 我们使用标准方法来定义托管引导程序应用程序所需的内
  • 如何在php代码中嵌入html文件?

    我有很多 html 文件 现在我想使用一些 php 代码一一调用每个文件 但每当我尝试运行 php 代码来从文件夹中调用这些 html 文件时 它都不起作用 1 html view 2 html view 3 html view 因此 1
  • 无法将 Ribbon TextBox isEnabled 设置为 False

    我一直在尝试功能区控件并遇到可能的错误 或者我可能做错了什么 如果我有一个RibbonTextBox on the RibbonTab 并设置已启用 to False or True在代码后面 我只能将其设置为 false 而不能设置为 t
  • 无法使用L SDK的部分功能

    我正在尝试在新的 SDK 中使用新的活动转换 我尝试了这一行 getWindow requestFeature Window FEATURE CONTENT TRANSITIONS 但问题是Window不包括FEATURE CONTENT
  • Python 3.5 中的注释给出 unicode 错误

    我使用的是 Spyder IDE Python 3 5 它是 anaconda 发行版的一部分 下面给出了代码的前几行 coding utf 8 Created on Tue Sep 20 16 22 40 2016 author pava
  • 在后台线程上保存到 CoreData Context

    我已经为此苦苦挣扎了一段时间 苹果的文档和 SO 到目前为止没有帮助 我在 UIManagedDocument 上使用 ManagedObjectContext 并且下面的代码工作正常 然后我决定在 AppDelegate 中使用 Appl
  • 如何使用 RegEx 匹配方括号文字?

    匹配方括号的正则表达式是什么 我在用着 在一个模式中eregi replace 但似乎找不到 是正确的 但请注意 PHP 本身也有 作为转义字符 所以您可能必须使用 或不同类型的字符串文字
  • 帮助树递归

    我有一个 Person 类 我想创建一棵树 这是 Person 类的构造函数 public Person String name int age char gender Person c1 Person c2 c1 是左边的孩子 c2 是右
  • 在 Rails 中动态插入参数到 link_to

    在我的主页中 我有一个输入框 用户可以输入搜索查询 然后我有一个 link to 它将使用搜索查询向不同的页面 搜索页面 发出 get 请求 根据设计 我无法使用 Rails form for 在检测到输入框中的更改后 如何将查询动态插入到
  • 从 Pandas 数据框中的值中删除反斜杠

    我有一个包含反斜杠的 Pandas 数据框 我想去掉那些反斜杠 但我无法让替换功能工作 这就是我正在做的 df pd DataFrame data col1 a b ab col2 c cd df replace to replace va
  • 如何从 YouTube 上的多个视频 ID 创建播放列表?

    我有大量视频 ID 200 多个 我想使用所有视频 ID 创建一个 YouTube 播放列表 我从这里尝试了解决方案 https webapps stackexchange com questions 120451 how to creat
  • 处理分配问题的算法

    我需要一种算法 技术或任何指导来优化以下问题 我有两家公司 A公司有员工324人 B公司有员工190人 员工总数 A B 是514 我需要随机选择28 这 514 名员工中 好的 那么我们就这样做吧 514 的 28 是 143 92 哦