sunday算法
㈠ 字符串匹配算法,最快的是哪种
目前在我遇到的字符串匹配算法中,最快的应该是sunday算法了。。
(BF、KMP、BM、sunday)
㈡ 设计一个高效的算法,从长度为500个中文字符(UTF-8编码)的内容中分析出keywords.txt中包含的关键字。
其实,比KMP算法速度快的算法大把大把,而且理解起来更简单,为何非要抓住KMP呢?笔试出现字符串模式匹配时直接上sunday算法,既简单又高效,何乐而不为?
说实话,想到sunday算法的那个人,绝对是发散思维,绝对牛。当我在被KMP折磨的够呛的时候,我就琢磨,有没有别的好算法呢??琢磨了半天也没想出个所以然来。笨啊,脑子不够发散。
㈢ 最容易理解,容易学的的字符串匹配算法
最简单的是暴力匹配 叫什么我忘了 就是双重for循环 复杂度是n1*n2
其次是Sunday算法 具体过程自己搜吧 也不难 算是剑走偏锋的 而且它的速度一般是最快的 复杂度 n1+n2
然后是kmp算法 纯论速度它还不如Sunday 算法 而且也比较难理解 但是它对于后面的一些其他的学习是有必要的 复杂度 n1+n2
㈣ 用c语言或c++语言实现在一段英语文章中找关键句的程序
楼上的说得对,这是模式匹配问题,KMP是典型的模式匹配算法,你可以试试;
下面的这个我不是用模式匹配算法做的,效率不是很高,但可以解决关键句出险次数的问题
#include<stdio.h>
#include<string.h>
void fun(char *a,char *b,int &sum)
{
int len1,len2,i,j,m;
len1=strlen(a);
len2=strlen(b);
for(i=0;i<=len1-len2+1;i++)
{
m=i;
for(j=0;j<len2;j++)
{
if(a[m]==b[j]) m++;
else break;
}
if(j==len2) sum++;
j=0;
}
}
void main()
{
int sum,flag=0;
char a[100],b[100],c;
do
{
sum=0;
printf("请输入您要查找的字符串:");
gets(a);
printf("请输入您要查找的关键字:");
gets(b);
fun(a,b,sum);
printf("您的文本中有%d个关键字。\n\n\n",sum);
printf("您是否还要继续进行相关操作?y/n\n");
printf("请输入您的选择:");
scanf("%c",&c);
if(c=='y'||c=='Y') flag=1;
printf("******************************************************\n\n\n");
}while(flag);
}
㈤ sunday 算法的算法实例
现举个例子来说明:
比如:
匹配串:O U R S T R O N G X S E A R C H
模式串:S E A R C H
这里我们看到O-S不相同,我们就看匹配串中的O在模式串的位置,没有出现在模式串中。
匹配串:O U R S T R O N G X S E A R C H
模式串: _ _ _ _ _ _ _ _ S E A R C H
移动模式串,使模式串的首字符和O的下一个字符对齐。
匹配串:O U R S T R O N G X S E A R C H
模式串:_ _ _ _ _ _ _ _ S E A R C H
继续比较,N-S不相同,字符R出现在模式串,则后移模式串,将把它们对齐
匹配串:O U R S T R O N G X S E A R C H
模式串: _ _ _ _ _ _ _ _ _ _ _ S E A R C H
㈥ sunday算法解析
例如我们要在"substring searching algorithm"查找"search",刚开始时,把子
串与文本左边对齐,
substring searching algorithm
search
^
结果在第二个字符处发现不匹配,于是要把子串往后移动。但是该移动多少呢?这
就是各种算法各显神通的地方了,最简单的做法是移动一个字符位置;KMP是利用
已经匹配部分的信息来移动;BM算法是做反向比较,并根据已经匹配的部分来确定
移动量。这里要介绍的方法是看紧跟在当前子串之后的那个字符(上图中的'i'。
显然,不管移动多少,这个字符是肯定要参加下一步的比较的,也就是说,如果下
一步匹配到了,这个字符必须在子串内。所以,可以移动子串,使子串中的最右边
的这个字符与它对齐。现在子串'search'中并不存在'i',则说明可以直接跳过一
大片,从'i'之后的那个字符开始作下一步的比较,如下图:
substring searching algorithm
search
^
比较的结果,第一个字符就不匹配,再看子串后面的那个字符,是'r',它在子串中
出现在倒数第三位,于是把子串向前移动三位,使两个'r'对齐,如下:
substring searching algorithm
search
㈦ sunday 算法的介绍
Sunday算法是Daniel M.Sunday于1990年提出的字符串模式匹配。其核心思想是:在匹配过程中,模式串发现不匹配时,算法能跳过尽可能多的字符以进行下一步的匹配,从而提高了匹配效率。
㈧ bm,horspool,sunday,kmp,kr,ac算法哪个效率最高
玩锝地方多,
但实在锝地方狠仯了
㈨ 用KMP算法查找出主串s中的所有子串t1并用t2替换,但是运行结果一直不对,应该怎么修改非常急!!
建议你看看sunday算法吧,比kmp快并且逻辑也简单
㈩ php的 strstr() 函数 效率高吗
如果你仅仅想确定 某字串 是否存在于另一字符串中,请使用速度更快、耗费内存更少的 strpos() 函数。