美文网首页程序员技术栈
算法: 选举机制里的 Schulze 方法

算法: 选举机制里的 Schulze 方法

作者: 写代码的海怪 | 来源:发表于2019-02-19 00:59 被阅读22次

简介

Schulze 方法是选举机制里比较出名的算法。假设有 n 个候选人,选民们都为它们打分进行选举,在选民打分完后就形成了该选民心中的候选人顺序。如下图所示,有 ABCDE 5 个候选人,选民对他们进行打分排序。

当然这个是已经排好序了,具体怎么打分这里不讨论。

现在的问题是怎么从上面的这个表上选一个合适的 Order of Preference 呢?难道直接选投票最多的那个么?那就太不科学了,所以就有 Schulze 方法。

抽象

为了能够抽象化这张表,我们先定义 d[X, Y] 表示 X 候选人在前,Y 候选人在后,即选民更喜欢 X。用上图举个例子 d[A, B] 为喜欢 A 候选人的人数,那么

d[A, B] = 5 + 5 +3 + 7 = 20

现在我们将每种情况都算出来,并做成下面的表格

其中绿色表示更优的,红色表示更差。比如 d[B, A] = 25,而 d[A, B] = 20,所以 d[B, A] 要更好一些。这里可以发现它们都是对称的,一红对应一绿。

有没有发现这个表格有点像我们以前看到的邻接矩阵呀,ABCDE 每个代表一个节点,表格里的数字是连接节点边的权值,所以我们可以用下面的图里表示(注意这里只表示更优的情况)

优化选择顺序

这时候你可能发现 d[A, B] 表示的就是以 A 为起点 B 为终点的路,而数值是这条路里最小权值的边。如 d[A, B] 的路是 A -> D -> C -> B 最小边为 D -> C 28。而这个 28 是比 d[B, A] = 25 大的,所以此时 A 比 B 更优,选民更喜欢 A。

上面是一个例子,现在我们将别的都表示出来(注意这里不再是 d[X, Y],而是使用了 p[X, Y]

这时我们的表格就要再更新一次了

通过上面的比较我们容易得出候选人的顺序 E A C B D.

相关文章

  • 算法: 选举机制里的 Schulze 方法

    简介 Schulze 方法是选举机制里比较出名的算法。假设有 n 个候选人,选民们都为它们打分进行选举,在选民打分...

  • 《源码_Zookeeper》_简述Zookeeper 选举

    选举是Zookeeper的重要技术之一,采用过半机制(Quorom) 选举算法图 服务端启动时期的Leader选举...

  • Elasticsearch的选举机制

    关于Elasticsearch的选举机制:ES选举master机制不像Hbase的HMaster选举, HMast...

  • zookeeper leader选举

    zookeeper选举算法 zookeeper有三种算法来实现leader选举:LeaderElection算法A...

  • ZooKeeper 的 Leader 选举机制

    选举机制中的概念: Serverid:服务器 ID。 编号越大在选择算法中权重越大。 Zxid:数据 ID。Zoo...

  • zookeeper选举过程

    Leader 选举 选举算法 : leaderElection AuthFastLeaderElection Fa...

  • 选举算法

    选举算法 霸道算法 Garcia-Monila 在 1982 年的一篇论文中发明了所谓的霸道选举算法(Bully ...

  • 选举算法

    2020-01-22 Zab https://cloud.tencent.com/developer/news/2...

  • Zookeeper选举算法

    算法说明 zookeeper采用的FastLeaderElection选举算法。 背景知识 logicalcloc...

  • Zookeeper内部原理

    Leader选举 选举机制 半数机制:集群中半数以上集群存储就可用,建议安装奇数台 Zookeeper在配置没有没...

网友评论

    本文标题:算法: 选举机制里的 Schulze 方法

    本文链接:https://www.haomeiwen.com/subject/mzrasqtx.html