高速字串匹配 zzl演算法

2022-03-25 07:57:11 字數 1561 閱讀 2612

這個大概我這段時間稍微有點成就感的東西了。

學了資料結構,但是編寫**的時候還是照著書抄,沒有一點意思……

字串匹配在補丁的時候是非常有用的。

之前我用的普通方法查詢,就是乙個乙個的往前。搜尋乙個300kb的檔案大概需要4秒時間。

看了zzl演算法原理以後,自己就編寫了出來。查詢這個相同的檔案,需時約0.4秒。

大家能夠感覺到差距吧?整整10倍啊!

演算法思想大意是每次能夠盡量多的移動匹配位置,因此建立乙個開始匹配的索引。

整個程式需要兩部預處理預處理主要完成查詢模式串首字元在主串中的所有出現位置,並將其儲存在乙個陣列中。

查詢模式串首字元演算法如下:

k=0;

for(i=start;i#include int main()

;file *fp;

fp = fopen("xluser.dll", "rb");

fseek(fp, 0l, 2);

long filelen = ftell(fp);//為了加快速度,可自定義檔案長度

long feature = 0;

long point;

//索引順序表

int length = 200;

long *seek = (long *)malloc(length * sizeof(long));

int i = 0;

int j = 0;

//建立索引,我自己改進了一下zzl

//既然可以查詢首字元,那麼一次查詢兩個也行吧?

fseek(fp, 0l, 0);

while (ftell(fp) < filelen )

seek[feature] = ftell(fp);}}

//根據索引查詢

for (i = 0;i < feature;i++)

if (j > 8) point = ftell(fp);

}fclose(fp);

printf("%x", point);

return 0;

}這個就是我的迅雷補丁的核心演算法啦…自我感覺良好…哈哈實驗結果為 了評測該演算法的效能,隨機的抽取一段文字和模式串,並在同一臺計算機上用不同的演算法進行匹配。測試文字主串s=」fromautomated teller machines and atomic clocks to mammograms andsemiconductors,innumerable products and services rely in some way ontechnology,measurement,and standards provided by the national instituteof standards and technology」,模式串t=」products andservices」。分別用bf演算法、kmp演算法、bm演算法、sunday演算法和zzl演算法在同一臺計算機上進行匹配計算,並統計每種演算法匹配時總 的字元匹配次數。測試結果:

演算法 bf kmp bm sunday zzl

一次匹配的總的字

符匹配次數 116 95 108 110 23

**

高速字串匹配 zzl演算法

這個大概我這段時間稍微有點成就感的東西了。學了資料結構,但是編寫 的時候還是照著書抄,沒有一點意思 字串匹配在補丁的時候是非常有用的。之前我用的普通方法查詢,就是乙個乙個的往前。搜尋乙個300kb的檔案大概需要4秒時間。看了zzl演算法原理以後,自己就編寫了出來。查詢這個相同的檔案,需時約0.4秒。...

字串匹配演算法 字串匹配演算法總覽

字串匹配在文字處理裡非常重要,我們採用簡潔的python 把以下演算法一一實現並講解。樸素演算法 algorithm rabin karp 演算法 有限自動機演算法 finite automation knuth morris pratt 演算法 kmp algorithm boyer moore ...

字串匹配演算法

首先引用一下另一篇文章中對字串匹配的介紹 字串匹配指的是從文字中找出給定字串 稱為模式 的乙個或所有出現的位置。本文的演算法一律輸出全部的匹配位 置。模式串在 中用x m 來表示,文字用y n 來,而所有字串都構造自乙個有限集的字母表 其大小為 根 據先給出模式還是先給出文字,字串匹配分為兩類方法 ...