讲解Boyer-Moore算法

Boyer-Moore 算法讲解 Boyer-Moore算法不仅效率高,而且构思巧妙,容易理解。1977年,德克萨斯大学的Robert S. Boyer教授和J Strother Moore教授发明了这种算法。 下面我就给大家举个例子 第二行为字符串(HERE IS A SIMPLE EXANMPLE); 第三行为搜索词(EXAMPLE); Boyer-Moore算法有两种“规则”,1.“坏字符规则” 2.“... 阅读详情

Boyer-Moore算法是一种常用的字符串匹配算法,用于在一个主串中查找一个模式串的出现位置。它是一种高效的算法,其时间复杂度为O(n+m),其中n是主串的长度,m是模式串的长度。

Boyer-Moore算法的核心思想是利用两个规则:坏字符规则和好后缀规则。坏字符规则通过将模式串从后往前匹配,找到主串中的不匹配字符,根据不匹配字符在模式串中的位置,将模式串向右移动一定的距离。好后缀规则通过将模式串从后往前匹配,找到与主串中的后缀匹配的最长子串,并根据最长子串的位置,将模式串向右移动一定的距离。

具体来说,Boyer-Moore算法的步骤如下:

  1. 初始化坏字符规则表和好后缀规则表。坏字符规则表记录了模式串中每个字符在模式串中最右出现的位置,如果字符不在模式串中,则记录为-1;好后缀规则表记录了模式串中每个后缀的最右匹配位置,以及模式串中与主串匹配的最长后缀的位置。

  2. 从主串的第m个字符开始,向前遍历。如果找到了一个坏字符(即模式串中与主串不匹配的字符),则根据坏字符规则表和好后缀规则表,计算模式串向右移动的距离。选择较大的距离。

  3. 如果移动的距离为0,则表示找到了一个匹配的位置。将匹配位置加入到结果列表中。

  4. 移动模式串,将模式串向右移动移动的距离。

  5. 重复步骤2-4,直到找到所有匹配的位置。

Boyer-Moore算法的优势在于,它能够通过坏字符规则和好后缀规则,减少不必要的比较次数,从而提高匹配的效率。这是由于它从后往前匹配,利用了坏字符和好后缀的信息,可以跳过一些无效的比较。

总结起来,Boyer-Moore算法通过坏字符规则和好后缀规则,减少不必要的比较次数,提高字符串匹配的效率。它在实际应用中表现良好,被广泛使用。

众数问题 Boyer-Moore 投票算法 众数求解多种方法 (1)哈希表 用哈希映射(HashMap / 或者 unordered_map)来存储每个元素以及出现的次数。对于哈希映射中的每个键值对,键表示一个元素,值表示该元素出现的次数。 我们用一个循环遍历数组 nums 并将数组中的每个元素加入哈希映射中。在这之后,我们遍历哈希映射中的所有键值对,返回值最大的键。我们同样也可以在遍历数组 nums 时候使用打擂台的方法,维护最大的值,这样省去了最后对哈希映射的遍历。 (2)排序 如果将数组 nums 中的所有元素按照单调递增或单调递减的顺序排序 阅读详情

相关推荐

本地部署大模型框架 LMStudio和Ollama+WebUI对比

之前我们的辣妈系列文章介绍了很多如何使用Ollama框架+OpenWebUI做很多大模型框架下相关的事情。之后我们也尝试了LMStudio这样一体化的工具。本文介绍下LMStudio 和 Ollama+Web UI 各有优劣,具体选择取决于你的需求。

ms44的专栏 4027

【算法】Boyer-Moore 算法

本文介绍了 Boyer-Moore 算法的相关知识。

代码星辰的博客 2554

2019年数学建模美赛经验总结

北京时间2019年1月29号上午9时,数模美赛结束。美赛结束已经10多天了,我在这次竞赛中负责建模和编程,趁现在记忆还比较清晰,写下这篇博客记录第一次参加数学建模美赛的经历。 补更:2019年4月20日公布成绩,笔者最终获得了美赛一等奖 目录 1、基本情况 2、选题 3、分工合作 4、论文写作 5、建模 6、编程 7、入门资源 ...

Smallactive 7万+

Boyer-Moore算法,超全解释

Boyer-Moore算法是一种高效的字符串匹配算法,采用反向搜索的方式,在最坏情况下仅需O(n/m)次比较操作就可以完成匹配过程。Boyer-Moore算法包含两个步骤:预处理和匹配。在实际应用中,可以通过双关键字索引、快速跳跃、多模式匹配等优化策略进一步提高Boyer-Moore算法的运行效率。

m0_72410588的博客 2204

第一次面试经历:集创北方数字IC前端面试(崩)总结

时间:2020年8月11日上午10点 公司:集创北方,做LED、LCD、OLED、AMOLED等显示器芯片的公司,应该主要是做显示驱动、图像处理、电源管理等这一块。 岗位:数字IC前端设计 城市:北京 形式:线上面试。感觉我俩是两个社畜,他说摄像头开不开都可以,我说那语音OK吗他说OK,于是直接语音问答。 项目经历:基于FPGA的车牌识别 & 先导存储器集成工艺开发(课题组) & 基于FPGA的贪吃蛇小游戏 反正是凉凉的,这时候准备还不足,前面都在复习项目没怎么刷过题。 过程如下: 自我介绍

coin的博客 6678

python爬取淘宝数据

python爬取淘宝数据淘宝评论 淘宝评论 打开淘宝,选择打开需要爬取的商品的评论。在谷歌浏览器选择开发者工具,选择network,找到list_detail_rate.htm?itemId=624466733121,点击headers、previews,可以看见相应的评论数据。 爬取一页屏评论代码如下 import re import requests headers = { 'Referer': '在headers中', 'User-Agent': '在

qq_36333776的博客 5797

Boyer Moore 算法介绍

Boyer Moore 算法:简称为 BM 算法,是由它的两位发明者 Robert S. Boyer 和 J Strother Moore 的名字来命名的。BM 算法是他们在 1977 年提出的高效字符串搜索算法。在实际应用中,比 KMP 算法要快 3~5 倍。BM 算法思想:对于给定文本串T与模式串p,先对模式串p进行预处理。然后在匹配的过程中,当发现文本串T的某个字符与模式串p不匹配的时候,根据启发策略,能够直接尽可能地跳过一些无法匹配的情况,将模式串多向后滑动几位。

m0_73737898的博客 1546

EBS开发_创建AP付款

--以下代码于20181002在Tony环境测试通过 /* BEGIN   --mo_global.init('SQLAP');   apps.fnd_global.apps_initialize(user_id => 1110, resp_id => 50597, resp_appl_id => 20003);   --mo_global.set_policy_context(...

蜗牛先生快跑的博客 4765

算法数据结构——字符串搜索算法BM(Boyer Moore)精讲及python实现

Boyer Moore 算法:简称为 BM 算法,是由它的两位发明者 Robert S. Boyer 和 J Strother Moore 的名字来命名的。BM 算法是他们在 1977 年提出的高效字符串搜索算法。在实际应用中,比 KMP 算法要快 3~5 倍。BM 算法思想:对于给定文本串T与模式串p,先对模式串p进行预处理。然后在匹配的过程中,当发现文本串T的某个字符与模式串p不匹配的时候,根据启发策略,能够直接尽可能地跳过一些无法匹配的情况,将模式串多向后滑动几位。

白话机器学习 2389

Android BluetoothSocket

BluetoothSocket是Android中用于在蓝牙设备之间进行数据传输的一种Socket。它提供了一种类似于TCP/IP协议的数据传输方式,可以在两个设备之间建立一个虚拟的通信管道,使得两个设备之间可以进行数据的传输和接收。BluetoothSocket可以用于客户端和服务端之间的通信,通过BluetoothSocket可以实现数据的双向传输。

liuning1985622的博客 1477

auboi5 + d435i 使用easy handeye进行标定时,遇到相关问题记录。

解决办法:在easy_handeye默认的 calibrate.launch 文件中move group 的默认值为 "manipulator",但针对每个人的机械臂,这个值需要更改。以aubo_i5为例,需要将其改为"manipulator_i5",或者自己编写launch文件时,传入参数move group的值,便能顺利解决问题!easy_handeye_calibration_server 进程出现崩溃。

weixin_61025092的博客 958

Boyer-Moore算法

一.概述         在当前用于查找子字符串的算法中,BM(Boyer-Moore)算法是当前有效且应用比较广的一中算法,各种文本编辑器的“查找”功能(Ctrl+F),大多采用Boyer-Moore算法。比我们在学习的KMP算法快3~5倍。         Boyer-Moore算法不仅效率高,而且构思巧妙,容易理解。1977年,德克萨斯大学的Robert S. Boyer教授和J Str

appleprince88的专栏 1万+

Apollo Control——超详细入门教程(六):MPC二次规划问题转化

专栏文章列表 Apollo Control——超详细入门教程(一):基于道路误差的车辆动力学模型 Apollo Control——超详细入门教程(二):连续状态空间方程离散化与离散LQR公式推导 Apollo Control——超详细入门教程(三):基于Frenet坐标系及XY坐标系的多项式轨迹生成 Apollo Control——超详细入门教程(四):控制模块轨迹误差计算 Apollo Control——超详细入门教程(五):油门刹车标定表之双线性插值算法 ...

凉了鸭的博客 2233

字符串查找_实例讲解:字符串查找之Boyer-Moore算法

Boyer-Moore算法简称BM算法,它是在字符串查找的方法中同KMP算法一样重要的字符匹配算法。BM算法相对于KMP算法效果更高且实现过程更容易理解和实现。例如针对被搜索的字符串“小丽同学忙着在吃巧克力,小张同学不吃巧克力”,搜索的字符串为“不吃巧克力”,其步骤大致如下:1、第一步将被搜索字符串和搜索字符串的头部对齐,如下图所示,但是比较的顺序从尾部开始,这也是BM算法中比较好的一种策略,因为...

weixin_34455676的博客 249

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Boyer-Moore投票算法找多数元素

  Boyer-Moore可能很多同学并不了解,但你如果百度一下就会发现这是位牛人、大佬,他在1977年提出的BM(Boyer-Moore)算法被认为是最高效的字符串搜索算法, 一般情况下,比KMP算法快3-5倍,因此文本编辑器中的搜索匹配功能,多使用该算法实现。 力扣第169题: 多数元素   给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。   你可以假设数组是非空的,并且给定的数组总是存在多数元素。 示例 1: 输入:[3,2,3] 输出:3

行者无疆的博客 307

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Boyer-Moore投票算法(基础版)

leetcode-Majority Element AC代码(投票算法基础版) class Solution { public int majorityElement(int[] nums) { int count = 0; int candiadate = 0; for(int i : nums) { if(count == 0) { count++;

nth2000的博客 2099

Boyer-Moore投票算法详解

(用于在O(n)时间、O(1)空间内找出数组中出现次数超过一半的元素),并通过示例逐步演示其工作原理。,用Boyer-Moore算法找出多数元素。

m0_75034893的博客 1150

[基础算法学习] 字符串匹配还在用暴力?(二) Boyer-Moore算法:终极优化版本

本文介绍了Boyer-Moore(BM)字符串匹配算法,它通过坏字符规则和好后缀规则实现高效匹配。BM算法在Horspool算法基础上增加好后缀规则,能够实现更大步长的跳跃。文章详细讲解了两种规则的计算方法:坏字符规则根据不匹配字符确定移动距离,好后缀规则则利用已匹配部分寻找模式中的重复子串。通过比较两种规则的移动距离,取最大值实现最优跳跃。最后给出了完整的代码实现,包括构建坏字符表、好后缀表以及BM算法的核心匹配逻辑。该算法在文本编辑器、IDE等场景中广泛应用,是字符串匹配领域的重要算法。

qwertyui666的博客 1359

leetcode 169. Majority Element 解法 python 多数投票算法(Boyer-Moore Algorithm)

一.问题描述 Given an array of sizen, find the majority element. The majority element is the element that appearsmore than⌊ n/2 ⌋times. You may assume that the array is non-empty and the majority elem...

CSerwangjun的博客 1051

字符串匹配算法----KMP算法,Boyer-Moore算法和Rabin-Karp算法

KMP算法 target(查找子串) source(待匹配子串) KMP算法是在原有的暴力逐个比较算法上进行的改进,即从target的第一个字符与source的第一个字符进行比较,若两个字符相等则逐个向后比较,当出现不相等字符时,target回到第一个字符,source向后移动一个字符重复之前的步骤。KMP算法主要思想是当出现比较不相等的情况时,对target的回溯位置(新的进行比较的字符)进行优化,以减少不必要的比较。 例如: source = abcabcabe target = abcabe 前五个字

weixin_50899769的博客 504

算法笔记-多数元素

多数元素,数组中出现次数大于 ⌊ n/2 ⌋ 的元素 投票算法

byakuya的博客 259

字符串算法大全Algorithms39:KMP、Boyer-Moore、Manacher算法终极指南

Algorithms39项目是一个全面的算法与数据结构集合,其中包含了多种高效的字符串算法实现。本文将深入解析三种经典字符串算法:KMP算法、Boyer-Moore算法和Manacher算法,帮助你掌握字符串匹配与回文查找的核心技术。 ## 为什么需要高效字符串算法? 在计算机科学中,字符串处理是最常见的任务之一。从文本编辑器的查找替换到搜索引擎的关键词匹配,都离不开高效的字符串算法。普通的暴

gitblog_00985的博客 629

多数投票算法(Boyer-Moore Algorithm)

一、问题来源 : LeetCode169. Majority Elements 二、解决问题 :寻找数组中的众数 三、算法介绍 1、传统方法: 包括但不仅限于暴力法(双重循环逐个数字判断是否为众数)、HashMap法(计数)、排序法(中位数一定为众数,因为即便从距离中点最远的两端起,众数依旧能够到达中位数的位置)、随机数法(随机找数组中一个数判断是否为众数)、分治法 ...

chauncyyoung的博客 2189

grep之字符串搜索算法Boyer-Moore由浅入深(比KMP快3-5倍)

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34179762的博客 99

字符串匹配的Boyer-Moore算法

Boyer-Moore算法不仅效率高,而且构思巧妙,容易理解。1977年,德克萨斯大学的Robert S. Boyer教授和J Strother Moore教授发明了这种算法。 下面,我根据Moore教授自己的例子来解释这种算法。 1. 假定字符串为”HERE IS A SIMPLE EXAMPLE”,搜索词为”EXAMPLE”。 2. 首先,”字符串”与”搜索词”头

318

字符串匹配算法

kmp是啥? 又名模式匹配算法,是用来1、判断A是否是B的子串,2、如果是子串的话,就可以记录A在B中出现的位置; kmp算法分两步; 第一步是对A进行自我匹配,求出一个next数组,next[i]为A中以i结尾的非前缀子串与A的前缀能匹配的最长长度; 第二步是对A和B进行匹配,求出一个f数组,f[i]表示B中以i结尾的非前缀子串长度与A的前缀能匹配的最长长度; 那么怎么求next数组呢? 首先看...

altoer的博客 307
上一篇: 讲解KMP算法
下一篇: 讲解Floyd-Warshall算法
懒人刘
博客等级 码龄4年 541粉丝 263原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值