關於字尾自動機的一些想法 題目收集(持續更新中)

2021-09-05 08:48:07 字數 2781 閱讀 3672

上週學習了字尾自動機。

於是蒟蒻ldx

ldxld

x在dzyo

dzyo

dzyo

和z xy

oi

zxyoi

zxyo

i的引導下逐漸對sam

samsa

m這個東西有了自己的認識。

為啥會有sam

samsa

m這個東西?

因為s am

samsa

m可以做到利用o(n

)o(n)

o(n)

的時空來識別乙個字串的n

2n^2

n2個字串。

因為s am

samsa

m am

samsa

m建出的par

en

tparent

parent

樹將所有狀態的從屬關係從圖形轉化成了樹形。

因為s am

samsa

m建出的par

en

tparent

parent

樹正是其反串的字尾樹。

自動機上的轉移邊

要談轉移邊,就先要提到乙個神奇的詞語:狀態

還記得在學習搜尋的時候,我們就已經開始接觸狀態這個詞語了。

我對狀態的理解就是:記錄了某一類具有相同性質的事物的集合

而對於sam

samsa

m來說也同樣是這樣:同乙個狀態中的字串都有著相同的特點:end

po

sendpos

endpos

集合相同。這些都是後話了

而兩個狀態之間的聯絡正是神奇的轉移邊。

也就是說,乙個字串被識別的過程正對應著dag

dagda

g上的一條路徑。

並且,這個關係是乙個雙射,即唯一的乙個字串對應著一條唯一的路徑妙不可言。

max

le

nmaxlen

maxlen

陣列的妙用

在構建好sam

samsa

m之後,設乙個狀態的大小為[mi

nlen

i,ma

xlen

i]

[minlen_i,maxlen_i]

[minle

ni​,

maxl

eni​

]。其字尾鏈結是lin

ki

link_i

linki​

,那麼有性質:min

leni

=max

lenl

inki

+1

minlen_i=maxlen_+1

minlen

i​=m

axle

nlin

ki​​

+1還有就是兩個狀態的lcp

lcplc

p就是其lca

lcalc

a的maxl

en

maxlen

maxlen

大小。sam

samsa

m與回文串的判斷

對原串建立乙個字尾自動機,然後用反串在上面匹配。

如果當前匹配的區間[l,

r]

[l,r]

[l,r

]包裹了當前狀態的end

po

sendpos

endpos

中的最大值,那麼[l,

maxp

os

][l,maxpos]

[l,max

pos]

就是乙個回文串。

廣義sam

samsa

m

即對於所有的母串建立的字尾自動機。

廣義s am

samsa

m的3種建法:

5.1. 每建完乙個字串之後把las

tlast

last

指向根節點

5.2. 乙個乙個建,如果當前已經有相同轉移就看是否需要**

5.3. 離線bfs

bfsbf

s按照層劃分順序來建。

sam

samsa

m可以解決的問題(動態更新)

最長公共子串

第k

kk小的子串

第k

kk小的本質不同的子串

某乙個字串在另乙個字串裡的出現次數

模板求公共子串個數

求最長公共子串長度

求所有回文串出現次數

給兩個字串,讓你求長度不小於k的公共子串的數量

給出最多10個串求最長公共子串

求第k

kk小子串

求長度為1~n的子串出現次數的最大值

支援動態在串尾插入字元,查詢在串中出現超過k次的子串的個數

求求字尾兩兩lcp

lcplc

p之和給出n個字串,對每個串求出有多少個子串在至少k個字串中出現過

給出一棵trie樹,求樹上所有路徑組成的不同字串數

給乙個字串,對於每個位置求出經過這個位置且只在字串中出現一次的子串的長度的最小值

關於tv app的一些想法

以前是做iptv機頂盒的,現在是做網際網路電視機頂盒的,在技術上的區別是不大的。通過這些年與電信,廣電打交道,現在對產品有了一些小想法。那麼在顯示上都是以web為主,用web來顯示epg內容,用osd來顯示狀態。但是隨著android的出現,現在大部分機頂盒或電視劇集廠家,都開始了智慧型之旅。乙個是...

關於敏捷的一些想法

敏捷軟體開發宣言 個體和互動 勝過 過程和工具 可以工作的軟體 勝過 面面俱到的文件 客戶合作 勝過 合同談判 響應變化 勝過遵循計畫 今天看了robert martin的ppp一書的第一部分,敏捷開發 回顧了自己曾經加盟過的幾個公司,經歷過的大大小小的專案,感慨良多。這些公司中不乏奉過程開發為寶典...

關於 Apple Metal API 的一些想法

更方便和友好的多執行緒 gpu 渲染支援 gles 的設計,所有東西都必須跟乙個 gl context 繫結,由 gl context 內部所控制的狀態機驅使,而 gl context 又跟單個執行緒本身緊密繫結在一起,導致很難支援構建乙個良好的多執行緒 gpu 渲染架構,chrome 的解決辦法是...