小神童·哈密尔顿解决分配问题

news/2024/11/25 17:38:09/

目录

  • 前言
  • 一、问题提出
  • 二、汉密尔顿方法
  • 三、方法实现:
  • 四、具体问题分析并解决:
  • 总结


前言

简要介绍哈密尔顿

哈密尔顿自幼聪明,被称为神童。他15岁开始对数学产生浓厚的兴趣。在对复数长期研究的基础上,他于1843年正式提出四元数这一概念,是代数学中的一项重要成果。此外,他还在矩阵理论中提出了哈密尔顿-凯莱定理。

一、问题提出

数学问题:设美国一共有 s 个州,众议院一共设有 h 个议员席位。设第 i 州的人口为pi(i =1,2, . . . , s),则全国总人口有 P = p1 + p2 + ⋯ + ps,第 i 州的人口占全国总人口的比例为pi/p。
按照人口比例原则,如何分配各州的议员名额?
设第 i 州应有qi = h ∗pi/P(i = 1,2, . . . , s)个议员“份额”,则显然有h = q1 + q2 + ⋯ + qs 且qi有可能不是整数,那怎么取qi?

二、汉密尔顿方法

第一步:取各州的份额qi的整数部分 qi (如qi = 1.5, qi = 1;qi = 0.82, qi = 0),先让第 i州拥有 qi 个议员名额。
第二部:再看各州份额qi的小数部分。按从大到小的顺序,把余下的议员名额逐个分配给各
相应的州,分完为止。具体做法是:小数部分(qi − qi )最大的州优先取得余下名额

三、方法实现:

以下代码以Python为例

class Hamilton:def __init__(self, source: list, amount: int):self.source = sourceself.seatAmount = amountdef getAssignment(self):data = self.sourceamount = self.seatAmountdecimalFraction = []sumsource = sum(data)integer = [int(amount*(x/sumsource)) for x in data]#得到整数部分seat = [x for x in integer]#安排整数席位remAmount = amount - sum(integer)for i in range(len(data)):decimalFraction.append((data[i] / sumsource - integer[i],i))#得到小数部分decimalFraction.sort(reverse=True, key=lambda x: x[0])#依据小数大小进行降序排序for i in range(remAmount):seat[decimalFraction[i][1]] += 1#进行小数席位分配return seatdef setAmount(self, amount: int):#用于更改席位self.seatAmount = amount

四、具体问题分析并解决:

现有五方人数分别为5117,4400,162,161,和160.使用哈密尔顿方法进行分配100个席位,并返回各方所占席位数

  hamilton=Hamilton([5117,4400,162,161,160],100)res = hamilton.getAssignment()print(res)

总结

今天分享数学建模的内容就没有了,呜呜呜,主要是想要记载一下学习经历与心得,希望能给大家有所帮助,还是一个小白,如有不对的地方,希望各位多多包涵并反馈给我,大家一起进步。


http://www.ppmy.cn/news/539428.html

相关文章

设计模式之命令模式笔记

设计模式之命令模式笔记 说明Command(命令)目录命令模式示例类图订单类厨师类抽象命令类订单命令类服务员类测试类 说明 记录下学习设计模式-命令模式的写法。JDK使用版本为1.8版本。 Command(命令) 意图:将一个请求封装为一个对象,从而使得可以用不同的请求对客…

性能测试的具体流程

以下是一个基本的性能测试过程,旨在帮助了解性能测试的具体流程和步骤。 1. 确定性能测试目标及指标 首先,需要确定性能测试的目标和指标,包括响应时间、吞吐量、并发用户数等方面。这些指标应该根据业务需求和用户场景进行设定&#xff0c…

vue pdfjs-dist 语法错误

vue pdfjs-dist 语法错误 Module parse failed: Unexpected token (2267:39) You may need an appropriate loader to handle this file type, currently no loaders are configured to process this file. See https://webpack.js.org/concepts#loaders | | async getXfa()…

PCS-943开关量开入回路

开入回路 输入回路接点联系图 输入回路接点联系图 电源光耦监视 光耦电源正应连接光耦正(0814),以用于保护监视光耦开入电源是否正常;光耦电源负连接光耦负(0815) 功能压板开入 投差动(差动…

pdf.js 版本引发问题You may need an appropriate loader to handle this file type.

运行项目出现 ./node_modules/pdfjs-dist/build/pdf.js 1132:13 Module parse failed: Unexpected token (1132:13) You may need an appropriate loader to handle this file type. 说明pdf.js 版本不对 解决方案: npm uninstall pdfjs-dist npm install pdfj…

【解决】ERROR Failed to compile with 1 error;error in ./node_modules/pdfjs-dist/build/pdf.js

接手别的同事的Vue项目,下载好依赖,执行npm run dev运行的时候,出现问题,如下: 根据报错信息发现"pdfjs-dist"装的也有,项目中也有用到,版本是2.0.943: 此时&#xff0c…

CodeForces 893C

这个得先了解&#xff1a;并查集 并查集板子&#xff1a; #include<bits/stdc.h> using namespace std; typedef long long ll; const int mod1e97; const int m100008; /* 规则:1.初始化、合并(谁当谁领导问题)、查询 注意&#xff1a;1.每棵树记录树高2.两棵树树高不…