學習后綴自動機想法

小序:學習后綴自動機是要有耐心的,clj的論文自己看真心酸爽!(還是自己太弱,ls,oyzx好勁啊,狂膜不止)

   剛剛在寫博客之前又看了篇論文,終于看懂了,好開心

正文:

  一.后綴自動機是什么?

   答:后綴樹+自動機

  二.能處理什么問題?

   答:字符串之類的啊,還要問

  三.有什么優點?

   答:代碼短,時間復雜度低

  四.怎么寫?

   1.首先你得知道什么是自動機和什么是后綴樹?

    這個是基礎問題,你可以去查查資料,本文不再闡述。

   2.后綴樹建樹點是N2的,怎么破?

    clj的ppt寫的很詳細,但是不是很容易懂,于是我這個蒟蒻就講講吧。

    (1).我們要破點又要能表示所有的狀態勢必就要合并點。

       可是什么樣的點是可以合并?

       這可謂是后綴自動機學習需要了解的關鍵之一,下面我就講一下我的想法:

       我們首先要定義一個right數組,表示一個子串s在母串ss中的右端點位置集合,例如aab在aabaabab中的right[s]={3,6};

       這個有什么用呢?

       我們來想一個這樣的問題如果兩個串s1,s2的right集合有交集那會是什么情況?

       先給出結論等下在證明:設sum[right[s]]代表right[s]集合的元素個數,如果兩個串s1,s2的right集合有交集,并且sum[s1]>=sum[s2]則s1是s2的子串;

       證明:設right[s1]∩right[s2]={v1,v2,v3.....,vk},就那v1來看吧,那么s1和s2勢必是v1前面的某兩個點到v1所形成的字符串,那么為什么sum[s1]>=sum[s2]則是s1是s2的子串?一個顯然的結論:如果一個子串的sum更大,那么它的長度越短。

       證明了這些東西,那么right集合相等的就可以合并了啊,是不是很神,然后我們就可以利用right集合建一顆樹了(可以表示出一個串的從屬情況)

       如下圖:

      ? ? ?  ??

       這樣就可以了嗎,能表示所有的子串狀態嗎?顯然是不行的,不然要自動機干嘛(可以自己yy一下)。

    (2).狀態數的線性證明.

       clj的ppt非常詳細,自己看看吧,我怕我自己的證明不嚴謹將讀者帶入歧路。

    (3).構造過程:

       設:已匹配串s,待匹配字符x,已建節點p。

       1.新建節點np,然后從p開始向fa[p]跳,如果有連出為x的邊并且val[p]+1=val[son[p][x]]則向np連一條為x的邊。否則執行步驟2.

       2.

        

      3.到這里你可能就要大喊一句為什么?為什么要新建節點?

       

     ? ? ?  

      論文上寫很好,你們如果不理解可以留言問我咯【本蒟蒻QQ:1481632287】

   五.總結:這個東西學起來有點難懂,但是學完了會發現還是很簡單的,雖說可能它的用處比后綴數組要小但是它的代碼短,又高效這才是更適合oi比賽的東東。

    剛剛發現一個好強的博客:http://blog.csdn.net/wangzhen_yu/article/details/45481269;

    

       

    

   

   

?

轉載于:https://www.cnblogs.com/HQHQ/p/5547694.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/372898.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/372898.shtml
英文地址,請注明出處:http://en.pswp.cn/news/372898.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【BZOJ】3575: [Hnoi2014]道路堵塞

題目鏈接:http://www.lydsy.com/JudgeOnline/problem.php?id3575 大概的做法是,按照順序枚舉每一條要刪去的邊,(假設當前點為$u$,在最短路徑上的下一個點是$v$)然后強制不走${u->v}$這條邊,將$u$入隊,做…

結合使用slf4j和Logback教程

在當前文章中,我將向您展示如何配置您的應用程序以使用slf4j和logback作為記錄器解決方案。 Java簡單日志記錄外觀(slf4j)是各種日志記錄框架的簡單外觀,例如JDK日志記錄(java.util.logging),lo…

mysql 分組top_MySQL:如何查詢出每個分組中的 top n 條記錄?

問題描述需求:查詢出每月 order_amount(訂單金額) 排行前3的記錄。例如對于2019-02,查詢結果中就應該是這3條:解決方法MySQL 5.7 和 MySQL 8.0 有不同的處理方法。1. MySQL 5.7我們先寫一個查詢語句。根據 order_date 中的年、月,…

ACM第四站————最小生成樹(普里姆算法)

對于一個帶權的無向連通圖,其每個生成樹所有邊上的權值之和可能不同,我們把所有邊上權值之和最小的生成樹稱為圖的最小生成樹。 普里姆算法是以其中某一頂點為起點,逐步尋找各個頂點上最小權值的邊來構建最小生成樹。 其中運用到了回溯&#…

利用jenkins的api來完成相關工作流程的自動化

[本文出自天外歸云的博客園] 背景 1. 實際工作中涉及到安卓客戶端方面的測試,外推或運營部門經常會有很多的渠道,而每個渠道都對應著一個app的下載包,這些渠道都記錄在安卓項目下的一個渠道列表文件中。外推或運營部門經常會有新的渠道產生&a…

擁有成本分析:Oracle WebLogic Server與JBoss

Crimson Consulting Group 撰寫的非常有趣的白皮書 ,比較了Weblogic和JBoss之間的擁有成本 。 盡管JBoss是免費的,但該白皮書卻嚴肅地宣稱,從長遠來看,Weblogic更便宜。 盡管此研究是由Oracle贊助的,但它看起來非常嚴肅…

mysql limit 分頁 0_Mysql分頁之limit用法與limit優化

Mysql limit分頁語句用法與Oracle和MS SqlServer相比,mysql的分頁方法簡單的讓人想哭。--語法:SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset--舉例:select * from table limit 5; --返回前5行select * from table limit 0…

與硒的集成測試

總覽 我已經使用了一段時間,遇到了一些似乎可以使生活更輕松的事情。 我以為可以將其作為教程分享,所以我將向您介紹這些部分: 使用Maven設置Web項目,配置Selenium以在CI上作為集成測試運行 尋找使用“頁面對象”為網站中的頁面…

linux每天一小步---sed命令詳解

1 命令功能 sed是一個相當強大的文件處理編輯工具,sed用來替換,刪除,更新文件中的內容。sed以文本行為單位進行處理,一次處理一行內容。首先sed吧當前處理的行存儲在臨時的緩沖區中(稱為模式空間pattern space&#xf…

mysql trace工具_100% 展示 MySQL 語句執行的神器-Optimizer Trace

在上一篇文章《用Explain 命令分析 MySQL 的 SQL 執行》中,我們講解了 Explain 命令的詳細使用。但是它只能展示 SQL 語句的執行計劃,無法展示為什么一些其他的執行計劃未被選擇,比如說明明有索引,但是為什么查詢時未使用索引等。…

MOXy作為您的JAX-RS JSON提供程序–服務器端

在以前的系列文章中,我介紹了如何利用EclipseLink JAXB(MOXy)創建RESTful數據訪問服務。 在本文中,我將介紹在服務器端利用MOXy的新JSON綁定添加對基于JAXB映射的JSON消息的支持有多么容易。 MOXy作為您的JAX-RS JSON提供程序–服…

006_過濾器

過濾器 過濾器(Filter)把附加邏輯注入到MVC框的請求處理,實現了交叉關注。所謂交叉關注(Cross-Cutting Concerns),是指可以用于整個應用程序,而又不適合放置在某個局部位置的功能,否…

Android_項目文件結構目錄分析

android項目文件結構目錄分析 在此我們新建了一個helloworld的項目,先看一些目錄結構: 這么多的文件夾和文件中,我們重點關注是res目錄、src目錄、AndroidManifest.xml文件: 一、res目錄主要是用來存放android項目的各種資源文件&…

實體 聯系 模型mysql_數據庫系統概念讀書筆記――實體-聯系模型_MySQL

bitsCN.com數據庫系統概念讀書筆記——實體-聯系模型前言為了重新回顧我寫的消息系統架構,我需要重新讀一下數據庫系統概念的前三章,這里簡單的做一個筆記,方便自己回顧基本概念實體-聯系(E-R)數據模型基于對現實世界的這樣一種認識&#xff…

使用Twitter Bootstrap,WebSocket,Akka和OpenLayers玩(2.0)

原始帖子可以在ekito網站上找到。 對于我們的一位客戶,我們需要顯示一張具有實時更新的車輛位置的地圖。 因此,我開始使用Play制作原型! 框架及其最新發布的版本2.0,使用Java API。 我從Play的網絡聊天室開始! 2.0個樣…

同步時間

同步時間 [rootlocalhost 03]# ntpdate 0.centos.pool.ntp.org 轉載于:https://www.cnblogs.com/cglWorkBook/p/5556920.html

mysql 5.6.23免安裝_mysql5.6.23免安裝配置

1.官網下載,并解壓2.環境變量,path下,追加mysql的bin路徑D:\Program Files\mysql\bin;3.mysql目錄下的my-default.ini重命名為my.ini,并添加下面的代碼basedirD:/Program Files/mysql #mysql路徑datadirD:/Program Files/mysql/d…

在Intellij IDEA中運行Vaadin應用

在本文中,我將向您展示如何使用Intellij IDEA運行vaadin應用程序。 Vaadin提供了一些用于Eclipse和Netbeans的插件。 但是對于Intellij IDEA來說,還沒有插件。 但是部署vaadin應用程序比其他兩個IDE容易。 這是您要遵循的步驟。 1.首先創建一個新項目&am…

mysql主從數據庫

Mysql主從配置,實現讀寫分離 大型網站為了軟解大量的并發訪問,除了在網站實現分布式負載均衡,遠遠不夠。到了數據業務層、數據訪問層,如果還是傳統的數據結構,或者只是單單靠一臺服務器扛,如此多的數據庫連…