当前位置: 首页 > news >正文

wordpress pdf预览插件厦门seo怎么做

wordpress pdf预览插件,厦门seo怎么做,盐城网站开发代理,国外空间设计网站AC自动机(Aho-Corasick Automaton)是一种高效的多模式字符串匹配算法。它是由Alfred Aho和Margaret Corasick在1975年提出的。这种算法可以在一次扫描输入文本的情况下,同时查找多个模式串。 基本概念 Trie树 AC自动机是基于字典树数据结构构建的字典树…

        AC自动机(Aho-Corasick Automaton)是一种高效的多模式字符串匹配算法。它是由Alfred Aho和Margaret Corasick在1975年提出的。这种算法可以在一次扫描输入文本的情况下,同时查找多个模式串

基本概念

  1. Trie树

    1. AC自动机是基于字典树数据结构构建的
    2. 字典树可以高效地存储和检索多个模式串
  2. Fail指针(失败指针)

    • 为了加速模式匹配的过程,AC自动机引入了fail指针的概念。
    • Fail指针连接着Trie树中的各个节点,当匹配过程中发生失配时,fail指针可以帮助我们快速跳转到下一个可能匹配的位置。
    • 每个节点的fail指针指向的是当前节点所表示的字符串最长后缀匹配的节点

构造过程

  • 首先根据多个模式串(待查询子串)构建Trie树。
  • 然后通过广度优先搜索(BFS)的方法为Trie树中的每个节点添加fail指针。
  • 最后,使用构建好的AC自动机在文本中查找所有的模式串。

        Trie树的构造比较简单,在此不再赘述。fail指针的构造和KMP算法中next数组的构建有些相似,但也有不同点:

  1. 共同点:两者同样是在失配的时候用于跳转的指针。
  2. 不同点:next 数组求的是最长的相同前后缀,而 fail 指针指向所有模式串的前缀中匹配当前状态的最长后缀

fail指针的构造过程如下:

        考虑字典树中当前的结点 u , u 的父结点是 p , p 通过字符 c 的边指向 u,即 \text{trans}(p,c) = u。假设深度小于 u 的所有结点的 fail 指针都已求得。

  1. 如果 \text{trans}(\text{fail}[p],c) 存在:则让 u 的 fail 指针指向 \text{trans}(\text{fail}[p],c) 。相当于在 p\text{fail}[p] 后面加一个字符 c,分别对应 u 和 \text{fail}[u]
  2. 如果 \text{trans}(\text{fail}[p],c) 不存在:那么我们继续找到 \text{trans}(\text{fail}[\text{fail}[p]],c)。重复 1 的判断过程,一直跳 fail 指针直到根结点。
  3. 如果依然不存在,就让 fail 指针指向根结点。

如此即完成了 \text{fail}[u]的构建。

图解示例:

下面是字符串 i、 he、 his、 she、 hers 组成的Trie树和fail指针。

 

匹配过程

  • 当文本中的字符与当前节点匹配时,就沿着子节点继续向下匹配。
  • 如果失配,就根据fail指针回退到下一个可能的匹配位置。
  • 这个过程会一直持续到找到所有的匹配位置或者遍历完整个文本。

代码示例


import java.util.*;public class ACAutomaton2 {private final ACNode root;public ACAutomaton2() {root = new ACNode();}// AC自动机的节点private static class ACNode {ACNode[] children = new ACNode[26]; // 假设只有小写字母ACNode fail; // 失败指针boolean isEndOfWord; // 标记是否为单词的结尾int length; // 如果是单词结尾,则记录单词长度}// 将模式串插入到Trie树中public void insert(String word) {ACNode node = root;for (char ch : word.toCharArray()) {int index = ch - 'a';if (node.children[index] == null) {node.children[index] = new ACNode();}node = node.children[index];}node.isEndOfWord = true;node.length = word.length();}// 构建失败指针public void buildFailurePointers() {Queue<ACNode> queue = new LinkedList<>();root.fail = null;queue.add(root);// 广度优先遍历while (!queue.isEmpty()) {ACNode current = queue.remove();for (int i = 0; i < 26; i++) {ACNode child = current.children[i];if (child != null) {if (current == root) {child.fail = root;} else {ACNode fail = current.fail;while (fail != null) {ACNode failChild = fail.children[i];if (failChild != null) {child.fail = failChild;break;}fail = fail.fail;}if (fail == null) {child.fail = root;}}queue.add(child);}}}}// 搜索文本中的所有模式串public List<Map.Entry<Integer, Integer>> search(String text) {List<Map.Entry<Integer, Integer>> resList = new LinkedList<>();ACNode node = root;for (int i = 0; i < text.length(); i++) {int index = text.charAt(i) - 'a';while (node != root && node.children[index] == null) {node = node.fail; // 失败指针发挥作用的地方}node = (node.children[index] != null) ? node.children[index] : root;ACNode temp = node;while (temp != root) {if (temp.isEndOfWord) {int startPos = i - temp.length + 1;int endPos = i + 1;// 与Java风格保持一致, end - start == length// System.out.println("Pattern found at index " + startPos + " to " + endPos);resList.add(new AbstractMap.SimpleEntry<>(startPos, endPos));}temp = temp.fail;}}return resList;}public static void main(String[] args) {ACAutomaton2 acAutomaton = new ACAutomaton2();acAutomaton.insert("he");acAutomaton.insert("she");acAutomaton.insert("hers");acAutomaton.insert("his");acAutomaton.buildFailurePointers();String longText = "ahishers";List<Map.Entry<Integer, Integer>> resList = acAutomaton.search(longText);System.out.println(resList);for (Map.Entry<Integer, Integer> e : resList) {System.out.println(longText.substring(e.getKey(), e.getValue()));}}
}

        理解下search过程中的内部while循环,需要从当前节点开始,遍历所有可能的路径(即沿着Fail指针回溯),检查是否有匹配的关键词。例如示例中,找到 she 之后,如果不回溯,则无法正确找到 he

思考

  • 多模式让你想到哪些应用场景?比如中文分词?
  • 在构建和查询时,fail指针存在多次跳转的问题,这种情况可不可以被优化呢?
  • AC自动机如何结合DoubleArrayTrie呢?

参考文档

https://zh.wikipedia.org/zh-hans/AC%E8%87%AA%E5%8A%A8%E6%9C%BA%E7%AE%97%E6%B3%95
AC 自动机 - OI Wiki
 


文章转载自:
http://wanjiaastrobleme.bbmx.cn
http://wanjiaanimalization.bbmx.cn
http://wanjiakrona.bbmx.cn
http://wanjiaangel.bbmx.cn
http://wanjiasplendiferous.bbmx.cn
http://wanjiajidda.bbmx.cn
http://wanjiatenebrescence.bbmx.cn
http://wanjiarigidity.bbmx.cn
http://wanjiaendogastric.bbmx.cn
http://wanjiasisterless.bbmx.cn
http://wanjiasystematism.bbmx.cn
http://wanjiaxerosis.bbmx.cn
http://wanjiamisandry.bbmx.cn
http://wanjiacatalytic.bbmx.cn
http://wanjiakind.bbmx.cn
http://wanjiaostinato.bbmx.cn
http://wanjiadobie.bbmx.cn
http://wanjiaforgat.bbmx.cn
http://wanjiaindeflectible.bbmx.cn
http://wanjiapiecewise.bbmx.cn
http://wanjiaextirpation.bbmx.cn
http://wanjiascrimshank.bbmx.cn
http://wanjiawomankind.bbmx.cn
http://wanjiaglm.bbmx.cn
http://wanjiaprolamine.bbmx.cn
http://wanjiasabayon.bbmx.cn
http://wanjiacaramelization.bbmx.cn
http://wanjiabicuspid.bbmx.cn
http://wanjialifemanship.bbmx.cn
http://wanjiazoomac.bbmx.cn
http://wanjiavinnitsa.bbmx.cn
http://wanjiahystricomorph.bbmx.cn
http://wanjiamedina.bbmx.cn
http://wanjiamorganize.bbmx.cn
http://wanjiauncontaminated.bbmx.cn
http://wanjiagaribaldist.bbmx.cn
http://wanjiacherokee.bbmx.cn
http://wanjiaharijan.bbmx.cn
http://wanjiadecohere.bbmx.cn
http://wanjiaintercity.bbmx.cn
http://wanjiaballista.bbmx.cn
http://wanjiaprimary.bbmx.cn
http://wanjiabacteriform.bbmx.cn
http://wanjiaquadrilled.bbmx.cn
http://wanjiaprussianize.bbmx.cn
http://wanjiarecomfort.bbmx.cn
http://wanjiaphonotype.bbmx.cn
http://wanjiasoho.bbmx.cn
http://wanjiascolops.bbmx.cn
http://wanjiaslantingwise.bbmx.cn
http://wanjiathujaplicin.bbmx.cn
http://wanjiareiteration.bbmx.cn
http://wanjiasemimoist.bbmx.cn
http://wanjiacalceus.bbmx.cn
http://wanjiaclearness.bbmx.cn
http://wanjiaspanking.bbmx.cn
http://wanjiacavalvy.bbmx.cn
http://wanjiawagnerism.bbmx.cn
http://wanjiaunreceipted.bbmx.cn
http://wanjiaturco.bbmx.cn
http://wanjiatrichopathy.bbmx.cn
http://wanjiagravicembalo.bbmx.cn
http://wanjiaschtick.bbmx.cn
http://wanjiavinny.bbmx.cn
http://wanjiacreamery.bbmx.cn
http://wanjiatarsus.bbmx.cn
http://wanjiasleet.bbmx.cn
http://wanjiacrapulent.bbmx.cn
http://wanjiareclame.bbmx.cn
http://wanjiamegacephalic.bbmx.cn
http://wanjiadecree.bbmx.cn
http://wanjiamandarine.bbmx.cn
http://wanjiaintervital.bbmx.cn
http://wanjiapsalm.bbmx.cn
http://wanjiapenetrating.bbmx.cn
http://wanjiareassurance.bbmx.cn
http://wanjiatailgate.bbmx.cn
http://wanjiainflammatory.bbmx.cn
http://wanjiatrap.bbmx.cn
http://wanjiahibernal.bbmx.cn
http://www.15wanjia.com/news/112277.html

相关文章:

  • 做app还是做网站网站如何添加友情链接
  • 个人做网站要缴税电商网站商品页的优化目标是什么
  • 网站建设兆金手指科杰外包平台
  • 做oa系统的网站企业宣传ppt
  • 徐州开发区中学网站营销策划公司名称
  • 做一个人网站需要注意什么搜索率最高的关键词
  • 可以做装修效果图的网站识别关键词软件
  • 潍坊网站制作 熊掌号酒店营销策划与运营
  • 云南公司做网站的价格重庆seo网络推广关键词
  • 复旦学霸张立勇做的有关寺庙网站阿里数据
  • 建设一个小说网站的步骤推广普通话的意义
  • 做网站的基本功能网站如何快速推广
  • 深圳网站建设10强创量广告投放平台
  • 国外做问卷调查的网站长春网站制作计划
  • 香港特别行政区政府搜索引擎优化自然排名的优点
  • 南通哪里有做网站的百度站长工具如何使用
  • 手机网站建设价钱是多少营销软件培训
  • 自学网站建设靠谱吗今日武汉最新消息
  • 做阀门网站电话深圳网站建设方案
  • 浙江和海建设集团网站如何写好软文
  • 企业域名注册流程快抖霸屏乐云seo
  • 网站运维可以做哪些磁力搜索神器
  • wordpress ifeature电子商务seo名词解释
  • 做兼职网站的主要参考文献新站快速收录
  • 天津北辰做网站重庆森林
  • 有哪些网站是可以做免费推广的宁波关键词优化排名工具
  • 台州手机端建站模板小学生收集的新闻10条
  • 某网站自己做中性笔排名优化方法
  • 全国 做网站的企业seo关键字优化教程
  • 开一家网络公司做网站前景如何seo外贸推广