b-f字符串匹配算法

叽叽喳喳,嘻嘻哈哈 叽叽喳喳,嘻嘻哈哈     2022-08-12     346

关键词:

Brute-Froce 算法是串的匹配模式算法中的一种
其匹配方式如下:
1、设有字符串 a ,b;a为主串,在 a 中查找 b 串的位置
2、匹配方式如下:
2.1:
分别从 a,b串的第一个元素开始比较a,b 中每个元素是否相等。如果相等,那么比较a,b各自的下一个元素。直到a,b中出现了某个元素不相等(或者是a或者b中所有的元素都比较了一个遍,这种情况一会说)。那么:
2.2:
从a中的第二个字符和b中的第一个字符开始比较,看是否相等,如果相等,那么顺序比较a,b中各自后面的元素。直到出现了不相等(或者是a或者b中所有的元素都比较了一个遍,这种情况一会说):
2.3:
重复2.2,从a中的第三个开始和b中的第一个元素开始比较。。。。。。直到出现了不相等。

一直重复以上过程,直到:
3.1 b中所有元素都比较完了:
这说明,找到了b在a中的位置
3.2 a中所有的元素都比较完了:
这说明,a中不含有b


图示如下:

开始查找

 

a[i] != b[j] 出现了不匹配的元素

 

从a 的第二个元素开始和b的第一个元素开始匹配

 

 

 

a[i]  != b[j]

从a的第三个元素开始和b的第一个元素开始匹配

 

 

 

多图之后就会发现,如果出现不匹配,那么那么它们的初始匹配位置就在 a[i-j] 而下一次匹配 就从  a[i-j+1] 开始匹配 b[0] 然后依次匹配下去。。。。。

直到  a全部匹配完:

 

或者是 b 全部匹配完:

 

 代码如下:

 

 

#coding:utf-8

a = input("a  >")
b = input("b  >")

a_len = len(a)
b_len = len(b)


i = 0
j = 0

while(i < a_len and j < b_len):  # i,j 为索引,所以不可能等于a,b的长度
    
    if a[i] == b[j]:
        i += 1      # 如果两个元素相等,那么就匹配下一个元素
        j += 1
    else:
        i = i-j+1   # a 从 第 i-j+1 的位置开始重新匹配
        j = 0       # b 依旧从 0 开始匹配


if i>=a_len: # 说明 a 已经全部匹配了。仍未找到b
    print('a字符串中不含有b字符串')
else:  # 说明退出while循环条件为  j>=b_len更具体来说是 j=b_len  ,已经把b找完了。说明a中含有b,
    site = i - j # 所以他们的最后一次匹配的开始位置就是  i - j
    print('a中含有b.且初始匹配位置为 %d,匹配长度为 %d' % (site, j))

 

 

 

 

 


字符串模式匹配算法sunday算法

  Sunday算法的思想类似于BM算法中的坏字符思想。差别在于Sunday算法在失配之后,是取目标串中当前和模式串匹配的部分后面一个位置的字符来做坏字符匹配。  举例:    BM算法在b与x失配后,坏字符为b(下标1),在模... 查看详情

算法基础-朴素模式匹配算法、kmp模式匹配算法

参考技术A假设我们要从主字符串goodgoogle中匹配子字符串google朴素模式匹配算法就是通过从主字符的头部开始一次循环匹配的字符串的挨个字符如果不通过则主字符串头部位置遍历位置+1在依次遍历子字符串的字符匹配过程主字... 查看详情

字符串匹配算法——kmp算法

1、字符串匹配字符串匹配是计算机的基本任务之一。字符串匹配是什么?举例来说,有一个字符串"BBCABCDABABCDABCDABDE",我想知道,里面是否包含另一个字符串"ABCDABD"?许多算法可以完成这个任务,Knuth-Morris-Pratt算法(简称KMP)是... 查看详情

horspool算法-字符串匹配

...置疑的…… 因为老师划了重点,所以讲一下horspool的字符串匹配算法的原理吧。 先声明几个概念,被找的字符串称为匹配串,要找的字符串被称为模式串,当前和模式串相匹配的匹配串的子串被称为匹配子串(废话 ... 查看详情

字符串匹配算法(代码片段)

1.1BF算法其实就是暴力解法,直接双重循环,干就完事了。虽然算不上什么好方法,但是非常简单。对于所有的暴力算法,我们应该思考如何进行优化,比如BF算法,当我们遇到不匹配字符的时候,只能从头的下一个字符开始匹... 查看详情

kmp算法字符串匹配算法(代码片段)

简介字符串的模式匹配是对字符串的基本操作之一,广泛应用于生物信息学、信息检索、拼写检查、语言翻译、数据压缩、网络入侵检测等领域,如何简化其复杂性一直是算法研究中的经典问题。字符串的模式匹配实质上就是寻... 查看详情

字符串匹配---kmp算法

字符串匹配---KMP算法 来源-http://blog.csdn.net/ebowtang/article/details/49129363前言   KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt同时发现,因此人们称它为克努特——莫里斯——普拉特操作(简称KMP算法)... 查看详情

字符串的模式匹配:sunday算法

  Sunday算法是DanielM.Sunday于1990年提出的字符串模式匹配。其核心思想是:在匹配过程中,模式串发现不匹配时,算法能跳过尽可能多的字符以进行下一步的匹配,从而提高了匹配效率。其效率在匹配随机的字符... 查看详情

字符串匹配算法之kmp算法

kmp算法是一种效率非常高的字符串匹配算法,是由Knuth,Morris,Pratt共同提出的模式匹配算法,所以简称KMP算法算法思想在一个字符串中查找另一个字符串时,会遇到如下图的情况我们通常的做法是从第一个串A的下一位B再逐位比... 查看详情

漫画:如何优化“字符串匹配算法”?(代码片段)

漫画:如何优化“字符串匹配算法”?说起“字符串匹配”,恐怕算得上是计算机领域应用最多的功能之一,为了满足这一需求,聪明的计算机科学家们发明了许多巧妙的算法。在上一篇漫画中,我们介绍了BF算法和RK算法,没... 查看详情

算法——字符串匹配之bm算法

前言    Boyer-Moore算法是一种基于后缀匹配的模式串匹配算法(简称BM算法),后缀匹配就是模式串从右到左開始比較,但模式串的移动依旧是从左到右的。在实践中。BM算法效率高于前面介绍的《KMP算法》,算法分为... 查看详情

字符串匹配之sunday算法

Sunday算法不像KMP算法那么复杂,但是效率又比较高,在KMP之上,下面简单介绍Sunday算法及其实现。Sunday算法由DanielM.Sunday在1990年提出,它的思想跟BM算法很相似:只不过Sunday算法是从前往后匹配,在匹配失败时关注的是文本串中... 查看详情

kmp--字符串匹配

现在计算机处理涉及到大量的字符串操作,字符串的匹配是使用频率最高的字符串操作之一,大学数据结构与算法中字符串一章,也专门介绍了字符串匹配。字符串的单模式匹配中最基础的算法是朴素的模式串匹配算法,比这更... 查看详情

字符串模式匹配kmp算法

字符串模式匹配指的是,找出特定的模式串在一个较长的字符串中出现的位置。朴素的模式匹配算法很直观的可以写出下面的代码,来找出模式串在一个长字符串中出现的位置。/*朴素的模式匹配算法功能:字符串的模式匹配参... 查看详情

字符串匹配算法(bf算法&&kmp算法)(代码片段)

字符串匹配算法暴力匹配(BF)算法KMP算法next数组求next数组的练习next数组的优化(nextval数组)练习暴力匹配(BF)算法BF算法,即暴力(BruteForce)算法,是普通的模式匹配算法,BF算法的思想就是... 查看详情

kmp算法

 1、概述  KMP算法是一种改进的字符串匹配算法,关键在于利用匹配失败后的信息,尽量减少模式串与主串的次数。2、算法原理  举个简单的例子:主串为“BBCABCDABABCDABCDABDE”,匹配串为“ABCDABD”   通常我们比较... 查看详情

模糊搜索算法(近似字符串匹配算法)

】模糊搜索算法(近似字符串匹配算法)【英文标题】:Fuzzysearchalgorithm(approximatestringmatchingalgorithm)【发布时间】:2015-11-2700:23:16【问题描述】:我希望创建一个模糊搜索算法。然而,经过数小时的研究,我真的很挣扎。我想创... 查看详情

常用算法3-字符串查找/模式匹配算法(bf&kmp算法)

...linux是如何在浩如烟海的文本中正确匹配到我们所需要的字符串呢?这就牵扯到了模式匹配算法!1.模式匹配什么是模式匹配呢?模式匹配,即子串P(模式串)在主串T(目标串)中的定位运算,也称串匹配假设我们有两个字符串:T(Tar... 查看详情