c 實現sunday演算法例項

2022-09-26 09:15:13 字數 1174 閱讀 2411

因正規表示式搜尋總是出現死迴圈,開始考慮改為其他搜尋方式,因為.net自帶的indexof預設只能找到第乙個或最後乙個,如果要把全部的匹配項都找出來,還需要自己寫迴圈substring,所以想找下有沒有現成的,就發現了在這個領域裡,bm演算法是王道,而sunday演算法據說是目前最好的改進版,這一點我沒有從國外的**尤其是wiki上找到印證,但中文談論sunday的文章很多,我就姑且認為它是最好的吧。

複製** **如下:

public static int sundaysearch(string text, string pattern)

else

int gap = pattern.length - k;

i += gap;

m = i + pattern.length;

&www.cppcns.comnwww.cppcns.combsp;      if (m > text.length) m = text.length - 1;

matchposition = i;

j = 0;}}

if (i <= text.length)

return -1;

}好了,現在測試下效能:

複製** **如下:

public static void performancetest()

watch.reset();

watch.start();

for (int i = 0; i < count; i++)

watch.stop();

console.writeline(watch.elapsedmilliseconds);

watch.reset();

watch.start();

for (int i = 0; i < count; i++)

watch.stop();

console.writeline(watch.elapsedmilliseconds);

}在可以找到匹配與不能找到匹配兩種情況下,sunday演算法耗時大概是indexof的20%左右。演算法確實有用。

但千萬不要使用substring來實現演算法,那樣會新生成很多字串中間變數,演算法帶來的好處遠遠不如分配記憶體複製字串的消耗大,注釋掉的部分就是使用substring實現的,比indexof慢很多。

本文標題: c#實現sunday演算法例項

本文位址:

SUNDAY 演算法 c 實現

public class sunday 實現sunday演算法 public int findchr string str,string sfind str length str.length fin length sfind.length while start fin length str le...

實現 Sunday 演算法

鑑於校園招聘筆試題,有個字串模式匹配的問題,99 都是暴力,偶爾一兩個寫kmp,但是明顯是知其表不知其裡。期待的 bm演算法 或者 sunday 沒有出現!鑑於的回覆,特此宣告 我的 假定字串中的字元都在ascii範圍內 by the way,國內有好多 是對sunday的改進,我本人是忽略不計,國...

Java實現Sunday演算法

sunday演算法是daniel m.sunday於1990年提出的字串模式匹配。其核心思想是 在匹配過程中,模式串發現不匹配時,演算法能跳過盡可能多的字元以進行下一步的匹配,從而提高了匹配效率。相比於另外幾個著名的字串匹配演算法,kmp以及bm演算法而言,sunday演算法不僅理解起來比較容易,而...