模式匹配算法的问题

liuweiwei1 2002-08-02 10:35:41
顺序串上的模式匹配算法描述为
int NaivesrMateh(segstring T,segstring P)
{
int i,j,k,g,m,n;
m=p.length;
n=T.length;
for(i=0;i<n-m;i++)
{
j=0;k=i;
while(j<m&&T.ch[k]==P.ch[j])
{
k++;j++
}
if(j==m)
return i;
}
return -1;
}

模式匹配算法是什么意思?
上面的描述怎么理解?
...全文
107 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Wargod2002 2002-09-15
  • 打赏
  • 举报
回复
这里的回溯是指主串的指针往前返回,
比如在12341275里找子串127,主串
指针为3时发现不匹配,就要回溯到2继续
查找,用kmp算法就可以避免这种回溯,时间
复杂度为O(m+n)
liuweiwei1 2002-09-14
  • 打赏
  • 举报
回复
回溯是什么概念?
LeeMaRS 2002-08-02
  • 打赏
  • 举报
回复
int NaivesrMateh(segstring T,segstring P) // 串T为主串 串P为子串
{
int i,j,k,g,m,n;
m=p.length; // 储存串p的长度
n=T.length; // 储存串n的长度
for(i=0;i<n-m;i++) // 循环,i为主串的的匹配起点
{
j=0; k=i;// j为子串的匹配起点 k为主串的匹配起点
while(j<m&&T.ch[k]==P.ch[j]) // 只要未到子串尾 且 主串和子串在当前匹配位置上匹配
{
k++;j++ // 主串和子串的匹配位置后移一位
}
if(j==m) // 如果到达子串尾(说明刚才for是因为j<m不满足而停的)
return i; // 返回主串与子串的匹配起点
}
return -1; // 匹配失败
}

这是朴素的串匹配法,很容易理解的.不过偶的解释中有一些术语不够专业.
chengxueann 2002-08-02
  • 打赏
  • 举报
回复
更简单的讲,确定:“abc”,在“cdabcd”中的算法返回位置号2,比一个一个循环的找快一点。你的算法好象复杂度很高,应该用function_next[]算法
vacherin5008 2002-08-02
  • 打赏
  • 举报
回复
串的模式匹配即子串定位是一种重要的串运算。设s和t是给定的两个串,在主串s中找到等于子串t的过程称为模式匹配,如果在s中找到等于t的子串,则称匹配成功,函数返回t在s中的首次出现的存储位置(或序号),否则匹配失败,返回-1。t也称为模式。
liushmh 2002-08-02
  • 打赏
  • 举报
回复
看看kmp吧,效率都高些
wei_lil 2002-08-02
  • 打赏
  • 举报
回复
建议您多看看数据结构方面的书籍,还有KMP,NP等算法,
时间复杂度会更小!
多多努力
「已注销」 2002-08-02
  • 打赏
  • 举报
回复
KMP算法才是比较常用的,以上给出的算法都是过于简单的。KMP算法避免了主串的指针回溯问题,而仅仅在子串中回溯指针。以上的简单算法却是同时在回溯主串与子串的指针。
gaochunrong 2002-08-02
  • 打赏
  • 举报
回复
LeeMaRS(小菜虎_水壶的仇人)提供的算法是最容易理解的,学过数据结构的兄弟应该知道,还有一个KMP算法,但是比较复杂。

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧