处理分配问题的算法

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(使用前将#替换为@)

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

  • 缩短文本并仅保留重要句子

    德国网站 nandoo net 提供了缩短新闻文章的可能性 如果使用滑块更改百分比值 文本会发生变化并且某些句子会被遗漏 您可以在这里看到它的实际效果 http www nandoo net read article 299925 http
  • 如何在给定目标索引数组的情况下对数组进行就地排序?

    你如何对给定的数组进行排序arr in place给定目标索引数组ind 例如 var arr A B C D E F var ind 4 0 5 2 1 3 rearrange arr ind console log arr gt B E
  • 图中的后边

    I m having a hard time understanding Tarjan s algorithm for articulation points I m currently following this tutorial he
  • 寻找距离原点最近的 100 颗恒星的算法

    首先让我提出正确的问题 问 有一个文件包含超过一百万个点 x y 每个点代表一颗星星 a b 处有一颗行星地球 现在 任务是构建一种算法 返回距离地球最近的 100 颗恒星 您的算法的时间和空间复杂度是多少 这个问题在各种采访中被问过很多次
  • 如何确定算法函数的复杂度?

    您如何知道算法函数对于特定操作是否需要线性 常数 对数时间 它取决于CPU周期吗 您可以通过三种方式 至少 做到这一点 在网上查找算法 看看它是如何描述其时间复杂度的 根据输入大小 自己检查算法 查看嵌套循环和递归条件等内容 以及每个循环运
  • 点集子集的最小周长凸包

    给定平面上的 n 个点 没有 3 个共线 给定数字 k 找到 k 个点的子集 使得 k 个点的凸包在 k 个点的子集的任何凸包中具有最小周长 我可以想到一个简单的方法 运行时间为 O n k k log k 找到大小为 k 的每个子集的凸包
  • 由周期表元素形成的最大单词的算法

    我想为以下问题场景编写一个算法 根据元素周期表元素的名称 找到可以组成的最大单词 符号如Na Ne等应被视为单个元素 这是在一家知名公司的求职面试中被问到的 有人可以帮我解决这个问题吗 我认为更好的方法是检查字典中的每个单词 看看是否可以从
  • 在 C++ 中通过引用传递 std 算法谓词

    我正在尝试从 a 中删除元素std list并保留已删除元素的一些统计信息 为此 我使用列表中的remove if 函数 并且我有一个谓词 我想使用这个谓词来收集统计数据 这是谓词的代码 class TestPredicate privat
  • Karasuba算法递归过多

    我正在尝试用 c 实现 Karasuba 乘法算法 但现在我只是想让它在 python 中工作 这是我的代码 def mult x y b m if max x y lt b return x y bm pow b m x0 x bm x1
  • 从三点求圆心的算法是什么?

    我在圆的圆周上有三个点 pt A A x A y pt B B x B y pt C C x C y 如何计算圆心 在Processing Java 中实现它 我找到了答案并实施了一个可行的解决方案 pt circleCenter pt A
  • 0-1背包算法

    以下 0 1 背包问题是否可解 浮动 正值和 浮动 权重 可以是正数或负数 背包的 浮动 容量 gt 0 我平均有 这是一个相对简单的二进制程序 我建议用蛮力进行修剪 如果任何时候你超过了允许的重量 你不需要尝试其他物品的组合 你可以丢弃整
  • 关于在字典中查找所有有效单词的算法问题

    给定一个字典 只是一个字符串列表 您收到来自外部来源的未知数量的信件 给定字母串 您将如何列出您可以通过这些字母的任意组合组成的所有有效单词 来自字典 因此 如果您收到 applead 你应该找到apple bad pad lead等 我知
  • 分而治之策略来确定列表中是否有超过 1/3 的相同元素

    我正在使用分治算法来确定列表中是否有超过 1 3 的元素相同 例如 1 2 3 4 不 所有元素都是唯一的 1 1 2 4 5 是的 其中 2 个是相同的 没有排序 是否有分而治之的策略 我陷入了如何划分的困境 def is valid i
  • C 埃及分数

    古埃及人仅使用以下形式的分数1 n因此任何其他分数都必须表示为这些单位分数的总和 而且 所有单位分数都是不同的 在C或Java中使任何分数成为埃及分数 总和越少越好 的好方法是什么 可以使用什么算法 分支定界 a 例如 3 4 1 2 1
  • 在常数空间中创建 1..N 的随机排列

    我正在寻找枚举固定空间中数字 1 N 的随机排列 这意味着我无法将所有数字存储在列表中 原因是 N 可能非常大 超过可用内存 我仍然希望能够一次遍历这样一个数字的排列 只访问每个数字一次 我知道对于某些 N 可以这样做 许多随机数生成器随机
  • 数学组合的完美最小哈希

    首先定义两个整数N and K where N gt K 两者都在编译时已知 例如 N 8 and K 3 接下来 定义一组整数 0 N or 1 N 如果这使答案更简单 并调用它S 例如 0 1 2 3 4 5 6 7 的子集数量S wi
  • 如何检查是否存在可能的路径?

    我正在开发一个基于 javascript 的实验性游戏 玩家必须在二维平铺地图上移动才能退出 请随意检查这个小提琴并演奏 http jsfiddle net moonlife 74vLd 我只是随机放置障碍物 但有时障碍物会挡住玩家和出口之
  • 绘制多边形

    我正在使用 Google Maps API V3 根据路径绘制多边形 该路径是随机未排序坐标点 LatLng 的数组 这会产生以下形状 Polylines intersect Problem 由于多边形的形状取决于路径中点的顺序 因此如何对
  • 具有 2 个属性的背包算法。如何在 3d 数组中实现它?

    当有超过 1 个属性时 我无法理解背包问题 当有 1 个属性时 我必须编写一个使用具有 2 个属性的背包算法的程序 老师告诉我们 它必须在 3d 数组中完成 错误的实现将导致 O 2 n 处理时间 我无法想象这样的数组会是什么样子 假设这是
  • 从一种数字系统转换为另一种数字系统后会有多少位数字

    主要问题 有多少位数字 让我解释 我有一个二进制数 11000000 十进制数是192 转换为十进制后 它有多少位 以十进制表示 在我的示例中 它是 3 位数字 但是 这不是问题 我在互联网上搜索并找到了一种用于整数部分的算法和一种用于小数

随机推荐

  • 在 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 哦