日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

浅谈WM算法

發布時間:2024/7/19 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 浅谈WM算法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1. ?WM(Wu-Manber)算法的簡單理解: (1)WM算法需要的參數: ∑:字母集 c: 字母集數目 m:模式串集合中,字符串長度最小的模式串的長度 B:字符塊長度,是shift表的索引,一般取2或者3 h:當前掃描過程中長度為B的模式串子串 T:文本串 N:文本串總長度 P={P1, P2....Pk}:模式串集合 k:模式串的數目 C:前綴長度(PREFIX表使用) (2)WM算法的時間復雜度: O(BN/kM),由此可以看出,WM使用于大規模的模式串集合且模式串集合中最小長度較大的場景! (3)WM算法的核心思想: WM算法是對BM算法的延伸繼承,用BM算法的核心框架,用字符塊來計算shift表(取代壞字符表)進行跳轉,在進行匹配時,用hash和prefix計算前后綴的hash值來從眾多可選的模式串中快速篩選出正確匹配的模式串。 (4)WM算法的三張核心表: shift表:用于記錄文本串向右移動的長度,即一張跳轉表(ps:有點類似BM算法的壞字符表,不過BM是針對單字符,WM是針對字符塊)。 hash表:hash表記錄了所有模式串后綴(長度為B)與模式串本身的映射關系。當shift[h]=0時,B與對應模式串P的映射關系,但是存在一對多的映射,因為模式串集合中存在相同后綴的模式串,所以hash表的value應該是一個鏈表的形式,存儲多個模式串(ps:當shift[h]=0時,說明匹配到了某模式串,此時要用hash表查匹配到了哪個模式串P) prefix表:prefix記錄了所有模式串前綴(長度為B)與模式串本身的映射關系。同hash表一樣,B與對應模式串P的映射關系存在一對多,所以prefix表的value也是一個鏈表的形式,存儲多個模式串。(ps:hash與prefix兩個表取交集極大地縮小了需要匹配的次數) 2. ?WM(Wu-Manber)算法的匹配過程: 當B個字符構成的子串h在模式串集合中沒有匹配,即shift[h]<0,則跳轉的距離是:m-B+1(相對保守的策略) 當B個字符構成的子串h在模式串集合中有匹配且非后綴,即shift[h]>0,則跳轉的距離是:shift[h](相對安全的滑動) 當B個字符構成的子串h在模式串集合中且是后綴,即shift[h]=0,則查hash和prefix表確定匹配到了哪個模式串 3. ?WM(Wu-Manber)算法的簡單例子(來自joylnwang專欄-WM算法詳解): 目標串target[1...10]=dcbacabcde,模式結合P={abcde,bcbde,abcabe}(ps:m=5,B=2,k=3,C=2),預處理后得到的三張表如下所示:

    

WM算法的匹配過程是: ? ? (1)從i=5(因為m=5)開始執行算法,首先我們發現target[4...5] = ac(target[i-B+1](5-2+1)),SHIFT表中不存在ac,所以i = i+4?(shift表中沒找到,則 i += m-B+1 (2)此時i=9,發現target[8...9]=cd,查SHIFT[cd]=1,所以i += SHIFT[cd]。 (3)此時i=10,然后發現target[9...10]=de,?查SHIFT[de]=0,表明可能出現匹配到模式串的情況。 (4)查HASH[de]有兩個模式串abcde和bcbde;在target中取長度為C的從i-m+1開始的子串,即target[6...7] = ab,查PREFIX[ab] = abcde。此時確定模式串是abcde。 4. ?WM(Wu-Manber)算法的程序實例:   

?

轉載于:https://www.cnblogs.com/ladawn/p/9281509.html

總結

以上是生活随笔為你收集整理的浅谈WM算法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。