一尘不染

多数投票算法-错误?

algorithm

多数投票算法决定序列中的哪个元素占多数,前提是存在这样的元素。这是我在尝试理解时最常引用的链接。

http://www.cs.utexas.edu/~moore/best-
ideas/mjrty/index.html

问题是标记为正确的答案是错误的。请注意,该问题实际上允许输入具有单个元素的 精确 N / 2个副本(不一定 多数元素检测算法中通常假定的N /
2个副本大)。

我复制了代码,并使用[1、2、3、2]和[1、2、3、2、6、2]之类的输入进行了尝试(产生3和6的结果)。这实际上也适用于上面引用的算法(该算法返回“
No Majority
Element!”)。问题是这样的:只要在多数元素和其他任何元素之间存在交替,就会选择数组中不是多数元素的最后一个元素。请纠正我的错误想法(如果有),并告诉我如何在实施中避免它。


阅读 307

收藏
2020-07-28

共1个答案

一尘不染

该算法是正确的:您的示例中没有多数元素。仅当元素 大于 值的50%时才占多数。

如果您想检测最频繁的元素计数为的情况N/2,那么我看不出有任何方法可以一次通过O(1)。我最好的尝试是:

  • 运行与以前相同的算法,但也要记住前一个候选者。
  • 如果您切换到最后一个元素,那么正确的答案就是您当前的候选人或您以前的候选人。
  • 运行另一遍,计算每遍的数量,然后进行比较。
2020-07-28