顯示具有 String 標籤的文章。 顯示所有文章
顯示具有 String 標籤的文章。 顯示所有文章

2016年2月5日 星期五

[Uva 1449][AC自動機] Dominating Patterns

原題連結
給出字串集合A和字串B,請找出A中出現在B最多次的字串,如果次數相同則按照出現順序輸出。

2016年1月29日 星期五

[教學][String][Data Structure] 後綴自動機(Suffix Automaton)

==========!! Warning !!==========
此文內容皆是出自自己的理解,若有與實際情況不符之處,請以論文或是大神文章為主
==========!! Warning !!==========

後綴自動機(Suffix Automaton)大概是我見過網路上最多教學資源的資料結構了,許多大陸和外國的神人都有寫教學文,包括寫過持久化資料結構介紹的clj大神。
不過有鑒於許多教學不是為了力求邏輯通順,定義複雜繁瑣,就是講解過程中,省略許多思考步驟,導致讀起來不甚順暢。
最後我還是決定自己完整的給出一篇教學文,使用最少的定義(3個),盡量簡化構造它和使用它的思考流程,對於重要的性質除非必須,否則說明點到即止,不加以證明。

2016年1月27日 星期三

[SPOJ LCS2][Suffix Automaton] LCS2 - Longest Common Substring II

題目連結

跟 LCS 這篇的作法非常相似,基本概念就不說了
不過寫這題的時候花了頗大量的時間釐清答案的更新順序和debug(最後的bug竟然是錯在toposort寫爛了...)

難點在於要怎麼兩兩合併計算答案,這要對後綴自動機上的狀態表示感受到一定深度才能體會(?
code中的許多assert可以幫助理解一些關鍵點和常有的bug

[SPOJ LCS][Suffix Automaton] LCS - Longest Common Substring

原題連結

Suffix Automaton(後綴自動機)的初級練習題,關於Suffix Automaton的教學和介紹網路上有很多資源,我之後也會自己補上一篇的
這題會用SAM的主要原因是SPOJ會莫名的把O(nlogn)的Suffix Array解卡掉,所以能過的大概只有後綴自動機或是O(n)後綴樹、後綴陣列的構造法吧

2016年1月25日 星期一

[Codeforces 452E][MemSQL Start[c]UP 2.0 - Round 1][Suffix Array] Three strings

原題連結

首先老規矩,把三個字串用神秘的符號分隔後拼接起來,構造SuffixArray和Height陣列

相似的後綴會被排在一起,而且我們可以很快知道在SuffixArray的一群連續後綴的LCP(by H陣列)