Lyndon word問題的Duval演算法入門詳解
一.Lyndon串的定義.
對於兩個串s1與s2,令 , 僅當 且 , 僅當 ,或 且 .
一個字串s為Lyndon串僅當s在它的所有後綴中最小.
二.Lyndon串的一個性質.
性質1:當u,v為Lyndon串且u<v時,uv(u與v相連線)也為Lyndon串.
證明如下:
首先顯然uv大於任意一個u的字尾與v連線.
然後因為
,所以
.
綜上所述,uv小於所有它的字尾,即uv為一個Lyndon串.
證畢.
三.Lyndon word問題.
Lyndon word問題是指,將一個字串s分解成 ,其中 為Lyndon串, ,求拆分方案.
這個問題首先具有存在性,證明:
首先當一個串只有一個字元時,顯然這個串為一個Lyndon串.
當一個串S不是Lyndon串時,它顯然可以被分成
個單個字元組成的字串合併的形式.
根據性質1,這些串中只要有
的情況,就可以被合併成一個新的Lyndon串.
證畢.
這個問題也具有唯一性,用反證法證明如下:
設若有兩種方案,設兩種方案不同的位置為
,兩種方案分別為
與
,且
.
我們令
,其中
表示
的一個字首.
根據定義,
.
證畢.
四.Duval演算法.
Duval演算法是用來線上性求解拆分方式的一種演算法,它需要用到下面這個性質2:
當字串s與字元c組成的字串sc是某個Lyndon串的字首時,對於字元
滿足sd為Lyndon串.
證明如下:
首先顯然對於一個Lyndon串的字首s
,即s小於等於它的所有後綴.
所以s與sc必然都滿足小於等於它們的所有後綴,加入一個大於c的字元自然也就變成了Lyndon串.
證畢.
那麼我們就可以開始講解Duval演算法了,Duval演算法只需要維護三個指標i,j,k就可以求出一個串的Lyndon分解.
首先,i表示當前未確定拆分的第一個點,即 已經被確定了拆分方式.
然後,我們設 ,其中 都是Lyndon串,v必須是一個