BF模式匹配算法改良

简介: /**子串查找(BF)*BF算法是带回溯的模式匹配算法,如果缓冲标记已做的匹配,减少回溯,可以提高时间效率,当然会牺牲空间,实际运用中需要做权衡考虑*主串MS,长度为N*子串ms,长度为n,nN){       ...
/*

*子串查找(BF)
*BF算法是带回溯的模式匹配算法,如果缓冲标记已做的匹配,减少回溯,可以提高时间效率,当然会牺牲空间,实际运用中需要做权衡考虑

*主串MS,长度为N
*子串ms,长度为n,n<=N
*初始认为MS的[0,N-n]与子串是匹配位置,将其加入一个记录数组中,匹配个数为N-n+1
*将这些位置的字符与与子串第一个字符比较,匹配的位置前移存储,并记录匹配个数
*继续子串的其他字符进行比较,记录匹配的位置及匹配个数
*返回匹配个数
*/
#include <string.h>
#include <iostream>

int getSubPos(int *rec,char *MS,int N,char *ms,int n)
{
    if(rec==NULL||MS==NULL||ms==NULL||n>N){
        return 0;
    }
    int size=N-n+1;
    for(int i=0;i<size;i++){
        rec[i]=i;
    }
    for(int i=0; i<n;i++){
        int psize=0;
        for(int j=0;j<size;j++){
            if(ms[i]==MS[rec[j]+i]){
                rec[psize++]=rec[j];
            }
        }
        size = psize;
    }
    return size;
};

int main(int argc,char **argv)
{
    char MS[32]="aaaaaabab";
    char ms[12]="aab";
    //char MS[32]="abdabcabbabcabceabcabc";
    //char ms[12]="abcabc";
    int rec[32]={0};
    int size = getSubPos(rec,MS,strlen(MS),ms,strlen(ms));
    for(int i=0; i<size; i++){
        printf("find sub[%d]\n",rec[i]);
    }
    return 0;
};
目录
相关文章
|
6月前
|
算法 测试技术
库函数strstr的两种算法模拟实现(BF算法和kmp算法)
库函数strstr的两种算法模拟实现(BF算法和kmp算法)
|
7月前
|
数据采集 运维 监控
序列挖掘模式算法:提升企业电脑监控软件安全性的创新路径
当谈到提升企业电脑监控软件的安全性时,咱们不妨考虑一下序列模式挖掘算法,它们其实就是电脑监控软件的&quot;秘密武器&quot;,能够帮助我们识别和分析用户以及系统行为中的种种奇奇怪怪的模式。这可不是为了解密谜题,而是为了更好地抓住那些异常活动和潜在的安全威胁。下面我们来看看如何用序列模式挖掘算法来提高企业电脑监控软件的安全性——
129 0
|
2月前
|
算法 测试技术 C++
【数据结构】模式匹配之KMP算法与Bug日志—C/C++实现
【数据结构】模式匹配之KMP算法与Bug日志—C/C++实现
36 0
|
3月前
|
算法 Java
【数据结构】字符串匹配|BF算法|KMP算法|next数组的优化
【数据结构】字符串匹配|BF算法|KMP算法|next数组的优化
35 0
|
4月前
|
机器学习/深度学习 算法 数据挖掘
【数据挖掘】关联模式评估方法及Apriori算法超市购物应用实战(超详细 附源码)
【数据挖掘】关联模式评估方法及Apriori算法超市购物应用实战(超详细 附源码)
51 0
|
4月前
|
数据采集 算法 前端开发
【MATLAB】 稳健的经验模式分解REMD信号分解算法
【MATLAB】 稳健的经验模式分解REMD信号分解算法
63 0
|
4月前
|
存储 算法 安全
【408数据结构与算法】—串和BF算法(二十四)
【408数据结构与算法】—串和BF算法(二十四)
|
4月前
|
算法 测试技术 C#
C++单调向量算法:132模式枚举1简洁版
C++单调向量算法:132模式枚举1简洁版
|
4月前
|
算法 测试技术 C#
C++二分查找算法:132模式枚举3简洁版
C++二分查找算法:132模式枚举3简洁版
|
4月前
|
算法 测试技术 C#
C++单调向量算法:132 模式解法三枚举1
C++单调向量算法:132 模式解法三枚举1