例題漢語名:最小表示法
時間複雜度:線性
求最小表示。
迴圈同構:對於串s
ss,某個數字i
ii,滿足s[1
,2…i
]+s[
i,i+
1…n]
=t
s[1,2\ldots i]+s[i,i+1\ldots n]=t
s[1,2…
i]+s
[i,i
+1…n
]=t,則稱串t
tt是串s
ss的迴圈同構。
最小表示:串s
ss字典序最小的迴圈同構稱為s
ss的最小表示。
求最小表示,可以暴力比較每個迴圈同構的大小。
for
(int i=
1,j=
2,i,j;i<=n&&j<=n&&k<=n;j++
)
在隨機資料下,該方法表現良好。
但在構造資料如"aa
a…a"
"aaa\ldots a"
"aaa…a
",時間複雜度退化為o(n
2)
o(n^2)
o(n2);
因此當發現iii不合法的時候,可以直接將i=i
+k+1
i=i+k+1
i=i+k+
1。o(n)證明略
證畢
//c++
template
<
typename name>name*
expression
(name* l,name* r)
}return l+
min(i,j)
;}
工藝 最小表示法
最小表示法就是找出字串s的的迴圈同構串中字典序最小的乙個。那麼什麼是迴圈同構串呢。是 設s bcad 且s 是s 的迴圈同構的串。s 可以是 bcad 或者cadb,adbc,dbca 即在字串s中從i 0開始,從i迴圈到字串末尾,再從頭迴圈到i,所形成的字元就是s迴圈同構串。因為這樣的同構串不止乙...
最小表示法
最小表示法 思想 在字串迴圈同構問題中的應用 摘自周源的ppt 前言 最小表示法 比起動態規劃 貪心等思想,在當今競賽中似乎並不是很常見。但是在解決判斷 同構 一類問題中卻起著重要的作用。本文即將討論字串中的同構問題,如何巧妙地運用最小表示法來解題呢,讓我們繼續一起思考吧。到底什麼是迴圈同構的字串呢...
最小表示法
最小表示法與kmp演算法一樣都可以解決字串匹配問題,但效率更高,短,作用更大。最小表示法就是乙個字串的最小字典序。怎麼求乙個字串的最小字典序呢?首先將這個字串擴充套件一倍 建設存在d陣列裡 然後我們用三個指標i 0,j 1,k 0,來尋找最小字典序的開頭字母,為了優於kmp,我們要做到o n i表示...