摩尔投票算法

Boyer-Moore majority vote algorithm(摩尔投票算法)是一种线性时间复杂度和常数级空间复杂度的算法,用来查找元素序列中的众数。它是用Robert S. Boyer和J Strother Moore两人的名字命名,是一种典型的流算法。

该算法的最简单的形式,查找最多出现的元素,也就是找到一个输入中出现一半以上的重复元素。但是,如果该数不存在的话,算法将检测不到真实结果,但是仍将输出输入元素中的一个元素。 但是,我们可以再次遍历输入序列,计算返回元素出现的次数,以确定它是否真的是众数。

该算法在其局部变量中维护一个临时变量m和一个计数器c,计数器初值为零。 然后我们遍历序列中的每个元素。如果c==0,则m=x;c=1;(其中x表示我们遍历到的元素)。 如果m==x,那么c++,否则c--。 最后返回m即可。

这可以用伪代码表示为以下步骤:

  • 初始化一个元素m和一个计算器c=0
  • 对于输入序列中的每个元素x
    • 如果i == 0, 那么 m = x 并且 i = 1
    • 如果m == x, 那么c++,否则的话c--
  • 返回m

举个例子:

[ 1 1 1 2 2 3 1] m = 0, c = 0
[*1 1 1 2 2 3 1] m = 1, c 
  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值