MP演算法詳細過程解析

2021-08-03 01:46:15 字數 979 閱讀 6784

目的:判斷目標串(t串)中是否含有模式串(p串),在下文中為了方便,命名目標串為「長串」,模式串為「短串」。

顯而易見的是,不斷判斷字元是否相同的過程就是兩個指標移動的過程。mp演算法就是要相比於暴力搜尋bf,簡化指標移動的過程。

首先對圖中的標識做解釋,黃色填充代表長串指標的移動,紅色字元代表匹配失效的時刻,綠色填充的數字代表列,也是長串每乙個字元的索引值,藍色填充數字代表短串的索引。   

mp演算法過程:長串的指標從來沒有回溯。長串指標移動規則:長串在與短串的第乙個字元匹配失敗時指標向前移動乙個位置,長串在短串某個字元匹配成功時向前移動乙個位置,長串在與短串(除第乙個字元)的某字元匹配失敗時不移動指標。短串指標移動規則:若在短串的j位置匹配失敗,下一次的匹配位置移動到f(j-1)+1 的位置。   

好了,按照這個規則我們用按圖索驥走一遍吧。第一次匹配失敗發生在第1列(綠色列),並不是短串的第乙個字元失匹,長串指標不動,短串指標j=1(藍色索引),下一次(f(1-1)+1)=0,指標到0索引,也就是第乙個字元。第二次不匹配發生在短串的第乙個字元,長串指標移動乙個,短串指標仍在第乙個字元。第三次不匹配發生在第八列,因為不是短串的首字元,長串指標不動,短串指標j=6,f(6-1)+1=2,指標移動到索引為2的字元。第四次不匹配,失匹字元不是短串第乙個,所以長串指標不動,短串指標j=2,f(2-1)+1=0,指標移動到索引0字元。最後一直在匹配,長串指標向前走。     mp好處:長串沒有回溯。從第三次不匹配到圖中第四次,短串走了很遠。肯定要比暴力一次走一步搜尋速度快。至於為什麼,就是因為短串中前部分子串和後部分子串有可能相同,這就導致移動的時候可以多移動點,用文字我解釋不清楚,大家再想想吧。

Kuhn Munkres 演算法詳細解析

直接進入正題,kuhn munkres 演算法 下文簡稱 km 演算法 是為了高效求解二分圖最佳完美匹配問題而生的,我們先溫習一下幾個概念,如果你對這幾個概念不是很熟悉的話,建議先去學習。不要被概念弄的暈了,用最直觀的方式考慮。情景是有乙個班級的學生要結成男女兩兩一組,但每個學生只想自己喜歡的異性結...

BFPRT演算法詳細解析

bfprt演算法即是選取中位數的中位數的方式,找出陣列n個元素中第k大的數。我們可以根據快速排序得到該值,但是快速排序的平均複雜度為o nlog n 最壞時間複雜度為o n 2 而堆排序也是乙個較好的方法,維護乙個大小為k的堆,時間複雜度為o nlog k 而bfptr演算法。它的最壞時間複雜度為o...

DNS網域名稱解析過程 詳細

根網域名稱伺服器 root name server 根網域名稱伺服器是最高層次的網域名稱伺服器。所有的根網域名稱伺服器都知道所有的頂級網域名稱伺服器的網域名稱和ip位址。根網域名稱伺服器是最重要的網域名稱伺服器,因為不管是哪乙個本地網域名稱伺服器,若要對網際網路上任何乙個網域名稱進行解析 即轉換為p...