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() 函數。