最小表示法

2021-09-26 20:01:50 字數 921 閱讀 2359

例題漢語名:最小表示法

時間複雜度:線性

求最小表示。

迴圈同構:對於串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);

因此當發現i

ii不合法的時候,可以直接將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表示...