zoukankan      html  css  js  c++  java
  • 对拼消耗【Boyer-Moore Majority Vote Algorithm】

    有幸博得一用,特引之为文

    对拼消耗 ~ 摩尔投票法

    每次从序列里选择两个不相同的数字删除掉(或称为“抵消”),最后剩下一个数字或几个相同的数字,就是出现次数大于总数一半的那个。

    故事阐述 + 算法实例

    故事阐述

    一个由不同王国组成的世界中,人数是一个定值且不同王国中的人战斗力都一致。某一天,发生了世界大战,王国之间互相都不信任,更不互相联盟。战场上,都冲到了一起,不同王国的人同归于尽,相同王国的人互不伤害。到最终,战争结束的时候,世界上将属于那个当初拥有超过半数人口的国家。

    1. 总人数固定;
    2. 战斗力一致;
    3. 亡异存同。

    算法实例

    在这里插入图片描述
    ①从索引为 0 的位置开始依次遍历,并将 result 赋值为 num[0];
    ②正在检索的值与 result 相同则通过计数器 +1;
    ③不同则通过计数器 -1;
    ④当 count 减为 0 的时候更新 result 为当前检索到的值。

    class Solution {
    public:
        int majorityElement(vector<int>& nums) {
            register int result(nums[0]), count = 1;
            for (int i = 1;i < nums.size(); ++i) {
                if (count == 0) {
                    result = nums[i];
                    count = 1;
                } 
                else if (nums[i] == result) count++;
                else count--;
            }
            return result;
        }
    };
    

    到重头戏了

    查找搜索

    要查找的字符串越长,搜索效率越高

    Boyer-Moore {简称BM}算法的重要性,观其应用足以见得,是目前被认为最高效的字符串搜索算法【比 KMP 快3 ~ 5 倍】,常用于文本编辑器中的搜索匹配功能

    For Example:GNU grep 命令使用该算法,使得GNU grep 比 BSD grep 快

    思想:有模式串中不存在的字符,那么肯定不匹配,往后多移动几位,提高效率

    附上一个值得深入研究的 BM 算法介绍【共同学习】:https://blog.csdn.net/qq_21201267/article/details/92799488

    让对手感动,让对手恐惧
  • 相关阅读:
    SpringMVC 2
    MySQL--事务,隔离性和隔离级别
    String.intern()
    初识消息队列--ActiveMq
    Java后台上传图片到七牛云
    Thread.interrupt(),Thread.isInterrupted(),Thread.interrupted()碎碎念
    Java基础--对象
    Java后台调用gcc编译C语言代码
    ToolProvider.getSystemJavaCompiler()方法空指针的排坑
    [LeetCode]29 两数相除和一个小坑点
  • 原文地址:https://www.cnblogs.com/RokoBasilisk/p/12305153.html
Copyright © 2011-2022 走看看