微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

线性时间投票算法我不明白

如何解决线性时间投票算法我不明白

该算法仅在集合占多数时才起作用-超过一半的元素相同。AAACCBB在您的示例中没有这样的多数。最频繁的字母出现3次,字符串长度为7。

解决方法

当我阅读本文时在数组中找到最常见的条目,建议使用Boyer和Moore的线性时间投票算法

如果您单击该站点的链接,则会逐步说明该算法的工作原理。对于给定的序列,AAACCBBCCCBCC它提供了正确的解决方案。

当我们将指针向前移到元素e上时:

  • 如果计数器为0,则将当前候选项设置为e,并将计数器设置为1。
  • 如果计数器不为0,则根据e是否为当前候选者来递增或递减计数器。

完成后,如果存在多数,则当前候选者为多数元素。

如果我在一张纸上使用此算法AAACCBB作为输入, 建议的候选对象将成为B, 这显然是错误的。

在我看来,有两种可能性

  1. 作者除了从未完全尝试过他们的算法外AAACCBBCCCBCC,完全没有能力,应当场开除 (怀疑
  2. 我显然缺少了一些东西 ,必须从中禁止它,并且再也不允许再次接触涉及逻辑的东西。

注意:这是Niek Sanders提供的该算法的C++实现。我相信他正确地实现了这个想法,因此它有同样的问题(不是吗?)。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。