關於字串的交迭與邊界問題演算法的一些回顧

2021-08-29 13:31:11 字數 1300 閱讀 5088

又見字串演算法,看到那個交迭和邊界的演算法,真是看到腦殼痛。由於原文資料還是英文的,上週就在那翻譯了,還沒仔細看過,也不知道翻譯的對不對,今晚拿著列印版的跑到教室坐了會,假日人少但很清靜!整個晚上光看交迭和邊界問題了。文章演算法給出來了,不至於看不懂吧,但實際上就是看不懂

①:什麼叫兩個字串x和y的交迭?很簡單,就是盡可能多的獲取x的結尾部分和y的開頭部分之間的交集。如:abacaba和acabaca 的交換長度就是5   因為有abacaba

acabaca。  字串x和字y的交迭表示為 overlap(x,y)。

②:什麼叫字串x的邊界?字串x的邊界就是x和x的交迭。如:abaababa的邊界就是3,因為有 abaababa 

abaababa  字串x的邊界記為border(x),顯然有border(x)=overlap(x,x)。

正因為有②中overlap(x,x)=border(x)的關係,所以這兩個問題其實可以歸併到乙個問題中來,這裡都歸到邊界演算法中來,為什麼,按我弱弱的想法,後者少乙個引數。嘿嘿。

擴充套件:當x是y的字首,a是字母時,有overlap(xa,y)=border(xa)。例如:x=aba, y=x#=aba#,xa=abaa那麼有overlap(xa,y)=overlap(abaa,aba#)=1,因為abaa

aba#,同時border(xa)=overlap(xa,xa)=overlap(abaa,abaa)=1  因為abaa

abaa。

我們假定z=overlap(x,y)。那麼有公式一:

overlap(xa,y)=① za   za是y的字首

② border(za)    其他 

又設u=border(z),對每個字母a,有公式二:

border(za)=① ua    ua是x的字首

②border(ua)  其他

公式一的②情況又可以用公式二來解決,於是交迭問題歸併到邊界問題中來解決。

現在用下面這一演算法來解決邊界問題:

計算長度為m的乙個字串x的邊界的長度,設定乙個包含m+1個整數的陣列b,使得b[j]是字串x[0,1...j-1]的邊界的長度。特別的,border(x)的長度就是b[m],這裡規定b[0]=-1。

border演算法的實現:

//border演算法

public class border

i++;

}b[m]=i;

system.out.println( b[m]);}}

上面就是演算法的精華。我好像看到過一片文章大概意思差不多,但好懂些,不早了,睡覺了,明天找找。goodnight!

關於演算法的邊界問題

有很多演算法思路很簡單,但是具體要實現的時候總會碰到一些麻煩的邊界問題,這邊整理一下。思路不用多說,先貼一種可行的 int binarysearch vector int nums,int tar return 1 從第乙個邊界我們就可以確定我們的搜尋範圍,這裡r可以取nums.size 也可以取n...

TCP通訊協議(中)字串邊界問題

案例來自張子陽的 net之美 經消化後放在這。如果希望字串整齊傳輸,那麼需要提出乙個 標誌 比如下面傳輸 今天聖誕,祝大家節日快樂!在字串前加入 length 13 有點類似資料報的幀頭幀尾,有效資料總是緊跟其後。得到有效資料的長度後,可以進行擷取 列印。有效資料的長度可以自定義,例子中是13,即每...

演算法 與字串有關問題

1 模式匹配問題 題目概述 給定字串text和pattern,在字串text中找出字串pattern出現的第乙個位置 從0開始 如果不存在,則返回 1。輸入樣例 h el lo hello hellollll ll輸出樣例 2 22解決方法 void getnext char p,int next ...