多数决投票程序的实施

majorityjudgement的Python项目详细描述


这是执行多数决投票程序,如 由Michel Balinski和Rida Laraki在A theory of measuring, electing , and ranking中提出

它接受投票者提供的分数统计,并提供python类型 按照多数判决的顺序把它们包起来。

例如:

x = MajorityJudgement([5, 5])
y = MajorityJudgement([3, 7])
assert x < y

第一个是获得5票0票和5票的候选人的等级 共1页。第二位是3票0票、7票1票的候选人。因此 多数判决程序认为第一候选人比 第二个候选人。

如果你想知道更多关于投票细节的信息, 多数判断对象的行为类似于相应的等级表 分配给他们。

例如:

assert list(MajorityJudgement([2,2])) == [0,1,0,1]

多数判断对象的用法通常与 对应的等级列表。尤其是它支持所有的容器 方法有效。

在内部,实现是相当不同的。它被编码为 重复循环。所以列表

[0, 0, 0, 1, 0, 1, 0, 1]

内部表示为

[[[0], 3], [[1], 1], [[0, 1], 2]]

我们选择的表示法只会构建长度为1或2的循环:a 当存在一个明确的中间值时,通常建立一个长度周期,而 当上、下中隔层 不同(这不是完全正确的。例如,投票名单[1,1,1,1]将不会 产生任何长度为2的循环,但这是一个很好的经验法则)

与其构建整个列表然后压缩,不如将整个周期 通过计算从剩余的选票中可以弹出多大的一次竞选而立即构建 一下子把它全弹出来。这意味着即使是非常庞大的人口 投票人可能会得到有效的处理,因为最终的名单实际上非常 很小。

在这个压缩文件上也可以有效地进行比较 表现:平等在两个平等的意义上直接运作 投票将产生两个相等的代表。比较可以由 先弹出常用前缀:如果两个列表都以[x,n]和[x,m]开头 然后我们可以立即丢弃min(m,n)条目,而不必 迭代。

似乎所有的选票都可以被压缩成 此表单的列表,周期很少。我猜想它可以在 o(记录(投票者)),但尚未对此进行验证。当然,实际上 就是这样。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java当使用SAST工具时,为什么我们必须为编译语言(例如C/C++)使用“构建包装器”?   从C++调用java   java在键入时重新存储单词   java Magnolia实例化模块类失败   为什么我可以在java的for循环中创建很少的文件对象   netbeans JAVA:将事件创建为单独的程序。。。可能吗?   标准不使用java关键字的目的是什么?   java如何将列表计数与单个整数值进行比较?   编写谓词练习JAVA技能   Java 8中是否有Scala的等价物?   java有人能指出这段代码的错误吗?这是一个卡片重绘程序,但由于某些原因,一些卡片会重复   java使驱动程序“通用”   java如何在Hibernate中删除多个关联而不实际删除对象