博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BF模式匹配算法改良
阅读量:6176 次
发布时间:2019-06-21

本文共 860 字,大约阅读时间需要 2 分钟。

/*

*子串查找(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;
};

转载地址:http://amzda.baihongyu.com/

你可能感兴趣的文章
乔布斯走了,苹果会坠落吗?
查看>>
java高级_01
查看>>
win8重装成win8.1后把hyperv的虚拟机导入
查看>>
linux命令汇总(mkdir、rmdir、touch、dirname、basename)
查看>>
mv或者cp带小括号文件名解析问题总结
查看>>
Elasticsearch学习笔记3: bulk批量处理
查看>>
EBS12.2.5 升级到EBS12.2.6的问题及跟踪处理
查看>>
网站访问流程
查看>>
java的日志工具log4j的配置方法
查看>>
jQuery on()方法
查看>>
步调一致才能得胜利
查看>>
mysql 锁机制
查看>>
add_header X-Frame-Options "SAMEORIGIN";NGINX
查看>>
linux中的计划任务
查看>>
Android style报错
查看>>
Lintcode130 Heapify solution 题解
查看>>
【Map】Map、HashMap
查看>>
解决纯数字字符串在js方法参数中不稳定或被截取的问题
查看>>
如何在VMware安装Windows系统
查看>>
阶段性理解phantomjs/selenium/casperjs
查看>>