AC自动机-2(AhoCorasickDoubleArrayTrie)

news2024/11/26 13:21:58

        Aho-Corasick Double Array Trie (AC DAT) 是一种结合了Aho-Corasick算法和Double Array Trie的数据结构,DAT保证了较高的存储效率,AC保证了多模式字符串匹配效率。

        一个经典的实现是hanlp的Java实现:AhoCorasickDoubleArrayTrie。

        主要构造过程如下:

        public void build(Map<String, V> map)
        {
            // 把值保存下来
            v = (V[]) map.values().toArray();
            l = new int[v.length];
            Set<String> keySet = map.keySet();
            // 构建二分trie树
            addAllKeyword(keySet);
            // 在二分trie树的基础上构建双数组trie树
            buildDoubleArrayTrie(keySet.size());
            used = null;
            // 构建failure表并且合并output表
            constructFailureStates();
            rootState = null;
            loseWeight();
        }

可以看到,其构建过程首先构造了一个普通的Trie树,然后基于这个普通Trie树构建了DAT,在构建DAT的过程中,也给先前构建好的普通Trie树添加了DAT的索引 

sibling.getValue().setIndex(begin + sibling.getKey());

构造完DAT之后,又基于普通Trie树构造fail表(普通Trie树中上一步构建DAT时添加了DAT索引),构造完成后,将所有辅助数据结构删除,包括普通Trie树,例如上述代码中的 \text{used = null;} 和 \text{rootState = null;} , 最后又压缩了DAT了,loseWeight();,实际是一个为尾压缩的方法。

AhoCorasickDoubleArrayTrie的构建可能会消耗大量内存,在实际使用中,可以先在一个大内存的机器上构建好AC DAT,序列化成文件,然后在使用的节点上直接反序列进行使用,正如 hanlp实现中的save和load方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2062927.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2024精选:四款超实用免费视频剪辑软件推荐!

每一位内容创作者都离不开一款好用的视频剪辑软件。今天小编推荐几款实用的视频剪辑免费软件&#xff0c;帮助大家轻松制作出高质量的视频作品&#xff01; 福昕视频剪辑 链接&#xff1a;www.pdf365.cn/foxit-clip/ 福昕视频剪辑的多轨道编辑功能让我在视频制作过程中感到非…

Solidworks 创建工程图纸,工程图纸不显示解决

当完成三维零件&#xff0c;制作工程图纸时&#xff0c;发现右侧“工程图图纸”不显示了&#xff0c;不能像以前那样方便的拖拽了。如下图&#xff1a; 解决办法&#xff1a; 步骤1:点击这 ...&#xff0c;打开需要的三维图文件&#xff0c;如“公头主体” 步骤2&#xff1a;…

选择合适的待办事项软件:用户体验报告

国内外主流的10款好用的待办事项软件对比&#xff1a;1.PingCode&#xff1b;2Worktile&#xff1b;3.微软To Do&#xff1b;4.MeisterTask&#xff1b;5.Airtable&#xff1b;6.Wrike&#xff1b;7.Basecamp&#xff1b;8.ProofHub&#xff1b;&#xff1b;9.嘀嗒清单&#xf…

Jmeter版本下载国内外镜像源

官网最新版本 https://archive.apache.org/dist/jmeter/binaries/历史版本 https://archive.apache.org/dist/jmeter/binaries/ 国内镜像源1.阿里云 https://mirrors.aliyun.com/apache/jmeter/binaries/2.腾讯云 https://mirrors.cloud.tencent.com/apache/jmeter/

汇凯贵金属:金子在家怎么清洗才干净

黄金首饰戴久了&#xff0c;难免会沾染灰尘、油污&#xff0c;失去光泽&#xff0c;影响美观。其实&#xff0c;在家就能轻松清洗黄金&#xff0c;让你的金饰重现光彩! 一、 万能清洁组合 材料&#xff1a; 热开水、牙膏、白醋、食盐、小苏打。 步骤&#xff1a; 将以上材料…

Hive SQL语言

目录 Hive SQL之数据库与建库 create database :创建数据库 use database :选择特定的数据库 drop database :删除数据库 Hive SQL之表与建表 create table : 创建表 分隔符指定语法 Hive SQL-DML-Load加载数据 Load语法功能 语法规则之filepath 语法规则之LOCAL …

【日记】好想换电脑(634 字)

正文 最近连着发了好多高温橙色预警&#xff0c;就算坐在行内都能感觉到明显的闷热。 每次写日记想一想今天都做了些什么&#xff0c;总是觉得什么也没做。上班之后感觉生活十分枯燥。明明学生时代有那么多的事情可以写。 昨天涩得太晚了&#xff0c;2 点钟才睡。今天有些睡眠不…

9年多来 LVFS为Linux系统提供了超过1.1亿个固件文件

本周是红帽公司的理查德-休斯&#xff08;Richard Hughes&#xff09;启动 Linux 厂商固件服务&#xff08;LVFS&#xff09;九年的日子&#xff0c;该服务旨在通过开源的 Fwupd 固件更新工具简化固件更新/分发流程。 在纪念 LVFS 九岁生日之际&#xff0c;Richard Hughes 与大…

快速了解软件测试——测试用例的方法

测试用例的编写方法有八种&#xff0c;其中等价类、边界值、判定表、场景法、流程图重要且使用得多 ●等价类●边界值●判定表●因果图[了解]●正交法[了解]●场景法●流程图●错误推测法[了解] 1、等价类 为什么要用等价类划分法? ●从大量数据中划分范围(等价类),然后从每…

DVWA靶场通关(CSRF)

CSRF 是跨站请求伪造&#xff0c;是指利用受害者尚未失效的身份认证信息&#xff08;cookie、会话等&#xff09;&#xff0c;诱骗其点击恶意链接或者访问包含攻击代码的页面&#xff0c;在受害人不知情的情况下以受害者的身份向&#xff08;身份认证信息所对应的&#xff09;服…

【npm】npm 代理问题

使用electron 打包失败&#xff0c;报如下错误&#xff1a; proxyconnect tcp: dial tcp :0: connectex: The requested address is not valid in its context.解决办法 npm config delete proxy npm config delete https-proxy如果设置了代理&#xff0c;使用以下命令设置 …

手撕⼆叉树——堆

1. 树 1.1 树的概念与结构 树是⼀种⾮线性的数据结构&#xff0c;它是由 n &#xff08; n>0 &#xff09; 个有限结点组成⼀个具有层次关系的集合。把它 叫做 树是因为它看起来像⼀棵倒挂的树&#xff0c;也就是说它是根朝上&#xff0c;⽽叶朝下的。 • 有⼀个特殊的…

AntSK:在无网络环境中构建你的本地AI知识库的终极指南

亲爱的读者朋友们&#xff0c;我是许泽宇&#xff0c;今天我将深入探讨一个引人注目的开源工具——AntSK。这个工具让您在没有互联网连接的情况下&#xff0c;仍然能够进行人工智能知识库的对话和查询。想象一下&#xff0c;即使身处无网络环境中&#xff0c;您也可以轻松与AI进…

class 1: vue初识

目录 特点Vue.js 2和Vue.js 3优缺点对比Vue.js 2缺点Vue.js 3优点 架构createApp的对象参数template属性data属性methods属性 vue是由Evan You开源的轻量级前端框架&#xff0c;诞生于2014年&#xff0c;Vue.js 3采用MVVM架构&#xff0c;支持声明式编程、组件化开发、前端路由…

【IEEE独立出版】第三届人工智能、物联网和云计算技术国际会议(AIoTC 2024,9月13-15)

第三届人工智能、物联网与云计算技术国际会议(AIoTC 2024)将于2024年9月13日-15日在中国武汉举行。 本次会议由华中师范大学伍伦贡联合研究院与南京大学联合主办、江苏省大数据区块链与智能信息专委会承办、江苏省概率统计学会、江苏省应用统计学会、Sir Forum、南京理工大学、…

防火墙iptalbes和firewalld

一、IPtables介绍 Iptables是unix/linux自带的一款开源的基于包过滤(对OSI模型的四层或者是四层以下进行过滤)的防火墙工具&#xff0c;它的功能十分强大&#xff0c;可以对流入和流出服务器的数据包进行很精细的控制。 iptables其实并不是真正的防火墙&#xff0c;我们可以把…

软信天成:国内企业需要什么样的国产主数据管理平台?(三)

在前两期的内容里&#xff0c;我们探讨了当前国内企业使用国产主数据管理平台的紧迫需求&#xff0c;概述了软信自主研发的智能主数据管理平台如何通过“数据建模”、“个性化配置”、“PIM管理”以及“权限管理”四大功能推动企业高效运作。 本期&#xff0c;我们将为您介绍平…

瑞吉外卖--登录退出功能的实现

登录功能 需求分析 1. Controller 定义&#xff1a;Controller是MVC&#xff08;Model-View-Controller&#xff09;设计模式中的一部分&#xff0c;负责处理HTTP请求并返回HTTP响应。在Spring MVC中&#xff0c;Controller通常是一个处理特定HTTP请求的类。作用&#xff1a; …

可调电阻是否有正负极?

可调电阻没有固定的正负极&#xff0c;但是有一根箭头表示旋转的方向。 可调电阻在形状上类似于一个圆柱形或方形的小盒子&#xff0c;通常带有三个引脚或更多&#xff0c;其中一个是中心引脚&#xff0c;其余的是两个端部引脚。不像电解电容或二极管那样有固定的正负极&#…

PHP轻创推客集淘客地推任务平台于一体的综合营销平台系统源码

&#x1f680;轻创推客&#xff0c;营销新纪元 —— 集淘客与地推任务于一体的全能平台&#x1f310; &#x1f308;【开篇&#xff1a;营销新潮流&#xff0c;轻创推客引领未来】 在瞬息万变的营销世界里&#xff0c;你还在为寻找高效、全面的营销渠道而烦恼吗&#xff1f;&…