我所概述基础上,博耶-穆尔多数表决算法的方式在这里.
你记得(最多)(m-1)最近比其他元素和相关数量更常见的元素.当看到记住的元素时,其计数会增加.当看到一个未记忆的元素时,如果有一个空闲的插槽,你会记住它并将其计数设置为1,否则你从记忆元素的所有计数中减去1.忘记了计数为0的记忆元素.任何元素的比例都高于1/m记忆元素之一.如果您不知道某些m-1元素出现次数超过n/m,则需要第二遍来计算记住元素的出现次数.
编辑:在访问指示的页面后,我看到它是完全相同的解决方案,除了它没有考虑到记住的非支配者.
完成此操作后,任何计数大于1的计数变量在列表中都有超过10个自身实例.
是不正确的,但所有小数的支配者都会记住>= 1最后的计数.我没有通过那里的代码,所以它可能包含错误,但算法是正确的,除了缺少检查通行证.
如果我们有第二遍,状态发展,那么建议的反例就会被正确处理
0 1 2 3 4 5 6 7 8
1 1 1 1 1 1 1 1 1 // coming 9
0 0 0 0 0 0 0 0 0 // all forgotten, no slots occupied, coming 10
10 - - - - - - - -
1 - - - - - - - - // coming 0
10 0 - - - - - - -
1 1 - - - - - - -
Run Code Online (Sandbox Code Playgroud)
最后,有两个插槽被占用,10和0都被记住,计数为1. 10不是十进制显性,但是0是,而且它是唯一的,因为将通过第二个检查通道验证.