用“打架”来理解摩尔投票法,生动形象一看就懂

本文通过“打架”来形象解释摩尔投票法,当人数m和王座n不同时,如何确定能坐上王座的阵营。通过具体的例子和伪代码,阐述了摩尔投票法在解决寻找出现次数大于1/n * m次的数组元素问题中的应用。
摘要由CSDN通过智能技术生成

用“打架”来理解摩尔投票法,生动形象一看就懂

1.问题提出

摩尔投票法,最简单形象的理解,就是一群人去抢座位。

在某个战乱年代,有m个来自不同阵营的人,要去争抢n个王座,大家都想抢,怎么办呢,那肯定是谁的人多,谁就可以坐上王座呗。比如只有1个王座的话,那人数必须要大于总人数一半(1 / 2)的阵营才可以坐,否则其他阵营的人联合起来就可以把你搞死;有2个王座的话,那人数必须要大于总人数的 (1/3)的两个阵营可以坐,有n个王座,那阵营人数必须大于m * (1 / n)。

那么这个问题抽象化就是:如何从一个长度为m的数组中,找到出现次数大于(1 / n) * m次的数?

2.一个王座(n = 2)

A A B C B A A

假设现在有如上7个人来自A B C三个阵营,要抢一个王座,那么按照顺序:

  • 首先是A,一来发现王座是空的,那他就坐上去,此时王座属于A阵营

  • 下一个又是A,发现自家已经占了王座了,针不戳,于是王座的A阵营人员+1

  • 然后是B,发现座位上有人了,那不行,得打一架

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值