最小表示法

2021-06-21 03:34:28 字數 922 閱讀 1927

最小表示法就是找出字串s的的迴圈同構串中字典序最小的乙個。

那麼什麼是迴圈同構串呢。是

--設s=bcad

,且s』是s

的迴圈同構的串。

s』可以是

bcad

或者cadb,adbc,dbca

即在字串s中從i>=0開始,從i迴圈到字串末尾,再從頭迴圈到i,所形成的字元就是s迴圈同構串。

因為這樣的同構串不止乙個,所以我們要找出其中字典序最小的乙個(即字串從小到大排序,其中最小的乙個)

為什麼要找出其中最小的乙個呢?我也不知道誒

最小表示法其實就是找到位置i,從這個位置輸出s,使得到的同構串字典序最小。

樸素演算法的思想就是

讓i=0;j=1(i和j

如果

str[i]如果

//我們要讓i發起迴圈的串最小

str[i]>str[j];//說明i發起迴圈的串大於j發起的令i=j;j=j+1;

如果

str[i] ==str[j];//就引入乙個指標k,令k自加比較由i發起迴圈的串和j發起的串的餘下字元的大小

//直到str[i+k]!=str[j+k]或者kstr[j+k];//令i=j;j++;

下面是**:

//尋找字典序迴圈同構串

#include#includeusing namespace std;

int find_min_subs(string &str);

int main()

else if(str[i] < str[j])//說明j指向的串不是最小的,比較下乙個

else//相等,不能判斷兩個字串哪個小,比較下一位

int find_min_subs(string &str)//改進的演算法

} return i

最小表示法

最小表示法 思想 在字串迴圈同構問題中的應用 摘自周源的ppt 前言 最小表示法 比起動態規劃 貪心等思想,在當今競賽中似乎並不是很常見。但是在解決判斷 同構 一類問題中卻起著重要的作用。本文即將討論字串中的同構問題,如何巧妙地運用最小表示法來解題呢,讓我們繼續一起思考吧。到底什麼是迴圈同構的字串呢...

最小表示法

最小表示法與kmp演算法一樣都可以解決字串匹配問題,但效率更高,短,作用更大。最小表示法就是乙個字串的最小字典序。怎麼求乙個字串的最小字典序呢?首先將這個字串擴充套件一倍 建設存在d陣列裡 然後我們用三個指標i 0,j 1,k 0,來尋找最小字典序的開頭字母,為了優於kmp,我們要做到o n i表示...

最小表示法

最小表示法是判斷同構的一種方法,和hash一樣都有字串和樹的兩種 給定乙個字串,把它首尾相連形成字元環,然後從某個點開始的字串字典序最小,為該字串的最小表示 用兩個指標i,j,且k 0,然後若x i k x j k 則k 直到不等 若x i k x j k 那麼i k 1 x i k x j k 說...