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