后缀自动机 Suffix Automaton

Slides:



Advertisements
Similar presentations
简单迭代法的概念与结论 简单迭代法又称逐次迭代法,基本思想是构造不动点 方程,以求得近似根。即由方程 f(x)=0 变换为 x=  (x), 然后建立迭代格式, 返回下一页 则称迭代格式 收敛, 否则称为发散 上一页.
Advertisements

元大京華證券 組員名單 : A 楊之奇 A 廖本揚 A 宋俊承 A 陳冠廷 A 郭峻瑋 A 指導教授 : 許素華 副教授.
達悟族報告 作者 : 林琪崴, 許原碩 座號 :13 號,14 號 原碩負責 : 簡介, 傳說, 圖驣, 達悟族飛魚季, 琪崴 : 地理位置, 土地利用方式, 飲食文化, 豐收祭.
主讲:张天明 影像艺术工程师. 声音的聆听 指出听到的是什么物体发出的声音,这一 声音是在什么样的空间环境中传播的。 一、 答案: 1 、打气筒打气的声音 2 、手打打气筒给足球打气的声音 3 、手打打气筒给自行车轮胎打气的声音 4 、七次(七声)打气筒打气的声音 5 、(气流)摩擦的声音 6 、猪在发急时的叫声.
概念導向命題技巧與試題分析 臺灣師大地理系 陳國川. 教學評量是一種『抽樣調查』 實施教學評量時,需具備二項條件: 其一,瞭解命題的理論及其實踐的方法; 其二,瞭解各種題型的功能與命題方式。 壹、前言.
第十八章 林肯大郡 第十八章 林肯大郡災變緊急搶救應變措施 1997 年 8 月 18 日溫妮颱風襲台,汐止鎮 的林肯大郡山崩,遭崩場土石撞擊 1997 年 8 月 18 日溫妮颱風襲台,汐止鎮 的林肯大郡山崩,遭崩場土石撞擊造成二十八人罹難八十戶住宅倒塌的慘劇 此災變要喚起國人的重視 本章介紹搜救行動緊急應變措施。
高峰植物園行前解說 2005/12/07 By 羽明. 陽性先驅物種 陽性植物 --- 陽光需求量大 陰性 ( 或耐蔭性 ) 植物 --- 陽光需求量少, 或 日照太強反而無法生存 先驅植物 --- 森林大火或土石流地震後產生的 裸露空地, 先生長出來的植物.
報 告 人 : 胡 嘉 琪 ˙ˇ˙ 、 王 紫 庭 = ˇ = 台灣夜市文化 作者: 郭明澤‧私立明道高中‧綜二 4 班 馬炯修‧私立明道高中‧綜二 4 班.
5 ˙ 1 第五章 生物的協調作用 5 ‧ 1 神經系統. 5 ˙ 1 人體的神經系統 1. 協調動物生理反應的系統: 神經 系統、 內分 泌 系統。 2. 神經系統負責 統整 和 協調 。分為 中樞 神經 和 周圍 神經。 (1) 中樞神經包括 腦 和 脊髓 。 (2) 周圍 神經包括 腦神經 和.
从《西游》看大学生的成长 主讲人:颜廷学 时间: 地点:演艺大楼流行剧场.
新员工培训 设计部 思安新能源股份有限公司 主讲人: 韩少华 时 间:
前言:河流的主要功能 1. 交通運輸 優點-運費低廉,維護費用低 缺點-速度慢,裝載費時,不能到達生產區或消費區 的末端,需要轉載。 尚受到河流網路,河口位置,水量變化,河床 狀況,冰封時期 2. 水資源系統.
幽夢影~張潮 小佑子工作室 關於《幽夢影》 作者張潮,記寫他個人對人生世事之體驗透悟的 書。 書中文字,全為「語錄」形式,屬於格言,也是 最精鍊的隨筆。 全書可分為九卷:論才子佳人、論人與人生、論 朋友知己、論讀書、論閒情逸趣、論立身處世、 談文論藝、論四時佳景、論花鳥蟲魚。
猜谜语 有个小娃娃,真是没 礼貌。 见到小树摇一摇,吓 得树叶哇哇叫。 见到小花逗一逗,摘 去她的太阳帽。 没人和它交朋友,只 好自已到外处跑。
STR 五环性功能康复术. 技术名称: STR 五环性功能康复术 技术概述: “STR 五环性功能康复术 ” 是目前临床治疗男性功能障碍先进、有效、快 速的疗法。 “STR 五环性功能康复术 ” 是一种先进的治疗体系,集药物治疗、行为治疗、 物理治疗、心理治疗、手术治疗于一体,精确诊断找准病因后,根据患者个体化差异,
成人高考高起点 语文 冲刺班 主讲老师:邓君媚. 复习指导 高考语文含四大块内容: 语言知识和语言表达,古代诗文阅读,现 代文阅读,写作。 在全面复习的前提下,按照《考试大纲》 的要求,要做好思路整理,建立高考的整体框 架的工作。认真归纳整理基础知识、培养基本 能力,复习做到有的放矢。 复习指导.
一级建造师执业资格考试 《公路工程管理与实务》
無性生殖是由親代直接產生新的個體,並不涉及配子的生成與結合。
兒童崇拜的牧養 在教會中帶領兒童敬拜的是誰?這些敬拜帶領者(當中的你)有受過訓練嗎?你對敬拜有何理念?
大學入學考試中心 九十六學度學科能力測驗試題 國文科 -哈利波特番外篇-
黄帝内经 内经教研室 王黎.
专利技术交底书的撰写方法 ——公司知识产权讲座
大洋洲.
职官与科举 职官:在国家机构中担任一定职务的官吏,这里面有职官的名称、职权范围和品级地位等方面的内容。
花开有日 芬芳天下 “国培计划(2012)” ——幼儿园骨干教师远程培训项目 山东幼儿园教师8班第4期简报 主办人:张瑞美     
《卖火柴的小女孩》 《海的女儿》 你 认 识 这 些 图 片 的 故 事 吗 《丑小鸭》 《拇指姑娘》 它们都来自于哪位作家笔下?
(教育学博士,曾任中学副校长,兼职南京大学博士后)
当代 国 际 关 系(案例6) 冷战时期美苏关系的演变.
營利事業所得稅查核準則 相關概念介紹 南區國稅局 新營分局 林俊標 各位學員大家好:
民主國家的政府體制 我國的中央政府體制 我國中央政府的功能 地方政府組織與功能
台塑石化 與 全國 之 財務分析 :企管二甲、乙 班級 指導 :楊雪蘭 老師 :第六組 組別 組員
情緒與壓力管理 手部舒壓運動 第六組.
自然的食物就是你最好的醫生 上課之前先聽一首歌~稻香 歌詞、音樂還不錯和大家分享一下
怎樣吃才健康? 賴亭竹.
銷售與顧客關係管理 巫立宇.邱志聖 著.
胫腓骨骨折.
  中国技术交易信息服务平台 中国技术市场管理促进中心.
第二单元(6-9课) 近代化的探索.
20、豆花庄的小家伙们.
CH11 心理疾病 李志鴻.
新帝國主義開港 (一)臺灣成為侵略者目標 1.背景: A.買賣利豐=鴉片進口+米、糖、樟腦、煤炭出口 B.地理位置優越=航行安全+商貿中心 2.新帝國主義: A.19C中:英、法、美、日為主 B.臺被迫開港通商,割地賠款,簽訂不平等條約.
佳力科技 防爆叉车的应用、发展 浙江佳力科技股份有限公司.
华 夏 之 祖 第 3 课.
法學緒論第六單元:法律適用 設計課程︰ 財經法律系 --楊東連 法學緒論-6.
第十一章 真理与价值 主讲人:阎华荣.
學 號:997I0010、997I0024 組 員:洪韋鈴、王婷婷 日 期: 指導老師:王立杰 老師
課程大綱 課程大綱:養生休閒活動」是探討休閒、生涯規劃與晚年健康之間的關係,且介紹各類老人機構所適合的休閒活動,並學習如何透過規劃及帶領老人休閒活動進而因應高齡化的社會需求。 本課程分為11章節,包括:健康為老年生活之基礎、老人休閒與健康、老人生涯規劃與休閒治療及健康維護、休閒活動設計與規劃的基本概念、長青學苑休閒遊憩活動規劃與設計、老人日托的休閒活動設計、社區關懷照顧據點的休閒遊憩活動、老人安養機構的休閒遊憩活動設計、護理之家休閒活動規劃與設計、銀髮休閒生活的未來與發展等。
战 后 国 际 关 系 专题五:冷战时期美苏关系的演变 政治学与行政管理系.
蔬菜常见缺素症状及防治方法 龙岩市科技局.
烟花爆竹企业开复工 安 全 培 训参考课件 浏 阳 市 安 监 局.
第七章 固 定 资 产.
四种命题 班级:C274 指导教师:钟志勤 任课教师:颜小娟.
CH1 . 集 合 与 命 题.
常规免疫接种率 监测 免疫规划科 章梦然.
入托、入学儿童预防接种证查验 武平县疾病预防控制中心 林传贵
Ch19 創業精神 管理學:整合觀點與創新思維3/e.中山大學企管系 著.前程文化 出版.
公司法(六) 股份有限公司 1.
以考试说明带动二轮复习 福州第三中学 张璐.
词类活用.
運輸與空間的交互作用 運輸發展的階段 一、分散的港口 二、侵入路線 三、發展支線 四、初步相互連結 五、完全相互連結 六、高度優越的幹線
跨越海峡的生命桥.
行政院國軍退除役官兵輔導委員會 嘉義榮民醫院.
產品語意 班級:夜四技產設三甲 學生:鄭舜鴻 學號:9A01C023 指導教師:唐蔚.
公立學校教職員退休資遣撫卹條例重點說明 苗栗縣政府人事處編製 主講人:陳處長坤榮 107年5月2日.
第二节 极限 一、数列极限 定义:.
新高中通識教育科教案設計分享會 現代中國: 中國文化與現代生活 朱秀玲老師.
國民年金 np97006.
河口生態系 紅樹林.
電 子 網 路 編 輯 學 網站首頁拍攝.
循环结构 刘华 江苏省苏州中学.
Presentation transcript:

后缀自动机 Suffix Automaton 杭州外国语学校 陈立杰 WJMZBMR

吐槽&回答 Q:你是哪里的弱菜?我听都没听说过! A:我是来自杭州外国语学校的陈立杰,确实是弱菜。 Q:Suffix Automaton?我根本就没有听说过这种数据结构。 A:这个还是有点用处的,等下我会讲的,你就当长知识 了吧。 Q:呼噜噜~~~~~~ A:睡好。。。

先让我们看SPOJ上的一道题目 1812. Longest Common Substring II 题目大意:给出N(N <= 10)个长度不超过100000的字 符串,求他们的最长公共连续子串。 时限:SPOJ上的2s

一个简单的做法 二分答案之后使用哈希就可以在O(LlogL)的时间内解决这 个问题。这个做法非常经典就不详细讲了。

看起来很简单。。但是。。。

我们可以看到大部分人都TLE了。。为什么呢? SPOJ太慢了

新的算法 我们需要新的算法来解决这个问题 在SPOJ的讨论版中,出题人提到了要使用suffix automaton来解决此题。

OI中使用的字符串处理工具 Suffix Automaton又是什么呢? Suffix Array 后缀数组 Suffix Tree 后缀树 Aho-Corasick Automaton AC自动机 Hash 哈希 Suffix Automaton又是什么呢? 提到字符串数据结构,大家都会想到这些

什么是自动机 有限状态自动机的功能是识别字符串,令一个自动机A,若它能识别字符串 S,就记为A(S)=True,否则A(S)=False。 自动机由五个部分组成,alpha:字符集,state:状态集合,init:初始状 态,end:结束状态集合,trans:状态转移函数。 不妨令trans(s,ch)表示当前状态是s,在读入字符ch之后,所到达的状态。 如果trans(s,ch)这个转移不存在,为了方便,不妨设其为null,同时null只能 转移到null。 null表示不存在的状态。 同时令trans(s,str)表示当前状态是s,在读入字符串str之后,所到达的状态。 了解AC自动机的同学都不会陌生,

trans(s,str) Cur = s; For i = 0 to Length(str)-1 Cur = trans(Cur,str[i]); trans(s,str) 就是Cur

 

后缀自动机的定义 给定字符串S S的后缀自动机suffix automaton(以后简记为SAM)是一个能 够识别S的所有后缀的自动机。 即SAM(x) = True,当且仅当x是S的后缀 同时后面可以看出,后缀自动机也能用来识别S所有的子 串。

状态数量太多了!怎么破? 最简单的实现 考虑字符串”aabbabd” 我们可以讲该字符串的所有后缀 插入一个Trie中,就像右图那样。 那么初始状态就是根,状态转移 函数就是这颗树的边,结束状态 集合就是所有的叶子。 状态数量太多了!怎么破? 如果时间复杂度达到N^2级别,这个数据结构也就没有意义了。 演示插入的过程。  

最简状态后缀自动机 顾名思义,就是状态数最少的后缀自动机,在后面可以证 明它的大小是线性的,我们先来看一些性质。 假如我们得到了这个最简状态后缀自动机SAM。 我们令ST(str)表示trans(init,str)。就是初始状态开始读入字 符串str之后,能到达的状态。

分析  

分析  

分析  

分析  

状态数的线性证明  

状态数的线性证明 1,2,3,4,5,6,7,8 1,2,3 1 2,3 2 3 4 5 6,7,8 6 7 8

状态数的线性证明  

一些性质  

一些性质  

关于子串的性质 由于每个子串都必然包含在SAM的某个状态里。 那么一个字符串s是S的子串,当且仅当,ST(s)!=null 同时也可以求出这个子串的出现个数,就是所在状态Right 集合的大小。

关于子串的性质 在一个状态中直接保存Right集合会消耗过多的空间,我们 可以发现状态的Right就是它Parent树中所有孩子Right集合 的并集,进一步的话,就是Parent树中它所有后代中叶子 节点的Right集合的并集。 那么如果按dfs序排列,一个状态的right集合就是一段连续 的区间中的叶子节点的Right集合的并集,那么我们也就可 以快速求出一个子串的所有出现位置了。 树的dfs序列:所有子树中节点组成一个区间。

线性构造算法 我们的构造算法是Online的,也就是从左到右逐个添加字 符串中的字符。依次构造SAM。 这个算法实现相比后缀树来说要简单很多,尽管可能不是 非常好理解。 让我们先回顾一下性质 说了这么多,如果不能给出一个构造SAM的算法,也没有意义。

定义和性质的回顾 状态s,转移trans,初始状态init,结束状态集合end。 母串S,S的后缀自动机SAM(Suffix Automaton的缩写)。 Right(str)表示str在母串S中所有出现的结束位置集合。 一个状态s表示的所有子串Right集合相同,为Right(s)。 Parent(s)表示使得Right(s)是Right(x)的真子集,并且Right(x) 的大小最小的状态x。 Parent函数可以表示一个树形结构。不妨叫它Parent树。

定义的回顾 一个Right集合和一个长度定义了一个子串。 对于状态s,使得Right(s)合法的子串长度是一个区间,为| [Min(s),Max(s)] Max(Parent(s)) = Min(s)-1。 SMA的状态数量和边的数量,都是O(N)的。 不妨令trans(s,ch)==null表示从s出发没有标号为ch的边,

定义的回顾  

每个阶段  

每个阶段  

每个阶段  

每个阶段  

每个阶段  

每个阶段  

每个阶段 接下来考虑节点nq,在转移的过程中,结束位置L+1是不起作 用的,所以trans(nq)就跟原来的trans(q)是一样的,拷贝即 可。

每个阶段  

每个阶段 自此我们圆满的解决了转移的问题。 嘟嘟噜,搞完啦~~

每个阶段:回顾  

每个阶段:回顾 否则新建节点nq,trans(nq,*)=trans(q,*) Parent(nq) = Parent(q) (先前的) Parent(q) = nq Parent(np)=nq 对所有trans(v,x) == q的p的祖先v,trans(v,x) 改成nq

C++的代码实现

C++的代码实现 虽然我讲了这么多 代码还是很好写的

让我们实战一下吧 实践出真知! 实践是检验真理的唯一标准!

I.最小循环串 给一个字符串S,每次可以将它的第一个字符移到最后面, 求这样能得到的字典序最小的字符串。 如BBAAB,最小的就是AABBB 考虑字符串SS,我们就是要求SS的长度为Length(S)且字典 序最小的子串,那么我们构造出SS的SAM,从init开始每 次走标号最小的转移,走Length(S)步即可以得到结果。 为什么这样是对的就留给大家作为小思考了。

II.SPOJ NSUBSTR 给一个字符串S,令F(x)表示S的所有长度为x的子串中,出 现次数的最大值。求F(1)..F(Length(S)) Length(S) <= 250000 我们构造S的SAM,那么对于一个节点s,它的长度范围是 [Min(s),Max(s)],同时他的出现次数是|Right(s)|。那么我们 用 |Right(s)|去更新F(Max(s))的值。 同时最后从大到小依次用F(i)去更新F(i-1)即可。 为什么这样是对的也作为小思考。

III.BZOJ2555 SubString 你要维护一个串,支持在末尾添加一个字符和询问一个串 在其中出现了多少次这两个操作。 必须在线。 构造串的SAM,每次在后面加入一个字符,可以注意到真 正影响答案的是Right集合的大小,我们需要知道一个状态 的Right集合有多大。

III.BZOJ2555 SubString 回顾构造算法,对Parent的更改每个阶段只有常数次,同 时最后我们插入了状态np,就将所有np的祖先的Right集合 大小+了1。 方法1:使用动态树维护Parent树。 方法2:使用平衡树维护Parent树的dfs序列。 这两种方法跟今天的主题无关,不详细讲了。

IV:SPOJ SUBLEX 给一个长度不超过90000的串S,每次询问它的所有不同子 串中,字典序第K小的,询问不超过500个。 我们可以构造出S的SAM,同时预处理从每个节点出发, 还有多少不同的子串可以到达。 然后dfs一遍SAM,就可以回答询问了。 具体实现作为小练习留给大家。

V:SPOJ LCS 给两个长度小于100000的字符串A和B,求出他们的最长公共连 续子串。 我们构造出A的后缀自动机SAM 对于SAM的每个状态s,令r为Right(s)中任意的一个元素,它代 表的是结束位置在r的,长度在[Min(s),Max(s)]之间的所有子串。 AAAAAAAAAAAAAAAAAAAArAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAArAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAArAAAAAAAAAAAAA 我们不妨对状态s,求出所有B的子串中,从任意r开始往前能匹 配的最大长度L,那么min(L,Max(s))就可以更新答案了。

V:SPOJ LCS 我们考虑用SAM读入字符串B。 令当前状态为s,同时最大匹配长度为len 我们读入字符x。如果s有标号为x的边, 那么s=trans(s,x),len = len+1 否则我们找到s的第一个祖先a,它有标号为x的边,令 s=trans(a,x),len=Max(a)+1。 如果没有这样的祖先,那么令s=root,len=0。 在过程中更新状态的最大匹配长度

V:SPOJ LCS 注意到我们求的是对于任意一个Right集合中的r,最大的 匹配长度。那么对于一个状态s,它的结果自然也可以作 为它Parent的结果,我们可以从底到上更新一遍。 然后问题就解决了。

VI:SPOJ LCS2  

一些其他的东西 其实不仅仅有Suffix Automaton还有。。 Factor Automaton Suffix Oracle Factor Oracle Suffix Cactus Oracle的意思是神谕!听起来很强吧。

Factor Oracle 一个串的Factor Oracle是一个自动机,可以识别这个串的 所有子串的集合,但也可以识别一些别的乱七八糟的东西。 其实Oracle也有预言的意思,所以这个是不一定准的。 Factor Oracle的构造算法非常的简单,不过我也不知道这 个在OI中有什么用,就不讲了。

Queries are welcomed!

广告 我会把课件和代码放在我的博客上,地址是: http://hi.baidu.com/wjbzbmr/