新化 网站开发比较有特色的网站

news/2025/10/1 10:51:56/文章来源:
新化 网站开发,比较有特色的网站,做网站一定要注册公司吗,推广收款码平台有哪些多模字符串匹配算法在这里指的是在一个字符串中寻找多个模式字符字串的问题。一般来说#xff0c;给出一个长字符串和很多短模式字符串#xff0c;如何最快最省的求出哪些模式字符串出现在长字符串中是我们所要思考的。该算法广泛应用于关键字过滤、入侵检测、病毒检测、分词…多模字符串匹配算法在这里指的是在一个字符串中寻找多个模式字符字串的问题。一般来说给出一个长字符串和很多短模式字符串如何最快最省的求出哪些模式字符串出现在长字符串中是我们所要思考的。该算法广泛应用于关键字过滤、入侵检测、病毒检测、分词等等问题中。多模问题一般有Trie树AC算法WM算法等等。背景在做实际工作中最简单也最常用的一种自然语言处理方法就是关键词匹配例如我们要对n条文本进行过滤那本身是一个过滤词表的通常进行过滤的代码如下for (String document : documents) {for (String filterWord : filterWords) {if (document.contains(filterWord)) {//process ...}}}如果文本的数量是n过滤词的数量是k那么复杂度为O(nk)如果关键词的数量较多那么支行效率是非常低的。计算机科学中Aho–Corasick算法是由AlfredV.Aho和MargaretJ.Corasick发明的字符串搜索算法用于在输入的一串字符串中匹配有限组“字典”中的子串。它与普通字符串匹配的不同点在于同时与所有字典串进行匹配。算法均摊情况下具有近似于线性的时间复杂度约为字符串的长度加所有匹配的数量。然而由于需要找到所有匹配数如果每个子串互相匹配(如字典为aaaaaaaaaa输入的字符串为aaaa)算法的时间复杂度会近似于匹配的二次函数。原理在一般的情况下针对一个文本进行关键词匹配在匹配的过程中要与每个关键词一一进行计算。也就是说每与一个关键词进行匹配都要重新从文档的开始到结束进行扫描。AC自动机的思想是在开始时先通过词表对以下三种情况进行缓存按照字符转移成功进行跳转(success表)按照字符转移失败进行跳转(fail表)匹配成功输出表(output表)因此在匹配的过程中无需从新从文档的开始进行匹配而是通过缓存直接进行跳转从而实现近似于线性的时间复杂度。构建构建的过程分三个步骤分别对success表fail表output表进行构建。其中output表在构建sucess和fail表进行都进行了补充。fail表是一对一的output表是一对多的。按照字符转移成功进行跳转(success表)sucess表实际就是一棵trie树构建的方式和trie树是一样的这里就不赘述。按照字符转移失败进行跳转(fail表)设这个节点上的字母为C沿着他父亲的失败指针走直到走到一个节点他的儿子中也有字母为C的节点。然后把当前节点的失败指针指向那个字母也为C的儿子。如果一直走到了root都没找到那就把失败指针指向root。使用广度优先搜索BFS层次遍历节点来处理每一个节点的失败路径。匹配成功输出表(output表)匹配举例说明按顺序先后添加关键词heshe,hishers。在匹配ushers过程中。先构建三个表如下图实线是sucess表虚线是fail表结点后的单词是ourput表。代码import java.util.*;/***/public class ACTrie {private Boolean failureStatesConstructed false;//是否建立了failure表private Node root;//根结点public ACTrie() {this.root new Node(true);}/*** 添加一个模式串* param keyword*/public void addKeyword(String keyword) {if (keyword null || keyword.length() 0) {return;}Node currentState this.root;for (Character character : keyword.toCharArray()) {currentState currentState.insert(character);}currentState.addEmit(keyword);}/*** 模式匹配** param text 待匹配的文本* return 匹配到的模式串*/public Collection parseText(String text) {checkForConstructedFailureStates();Node currentState this.root;List collectedEmits new ArrayList();for (int position 0; position text.length(); position) {Character character text.charAt(position);currentState currentState.nextState(character);Collection emits currentState.emit();if (emits null || emits.isEmpty()) {continue;}for (String emit : emits) {collectedEmits.add(new Emit(position - emit.length() 1, position, emit));}}return collectedEmits;}/*** 检查是否建立了failure表*/private void checkForConstructedFailureStates() {if (!this.failureStatesConstructed) {constructFailureStates();}}/*** 建立failure表*/private void constructFailureStates() {Queue queue new LinkedList();// 第一步将深度为1的节点的failure设为根节点//特殊处理第二层要特殊处理将这层中的节点的失败路径直接指向父节点(也就是根节点)。for (Node depthOneState : this.root.children()) {depthOneState.setFailure(this.root);queue.add(depthOneState);}this.failureStatesConstructed true;// 第二步为深度 1 的节点建立failure表这是一个bfs 广度优先遍历/*** 构造失败指针的过程概括起来就一句话设这个节点上的字母为C沿着他父亲的失败指针走直到走到一个节点他的儿子中也有字母为C的节点。* 然后把当前节点的失败指针指向那个字母也为C的儿子。如果一直走到了root都没找到那就把失败指针指向root。* 使用广度优先搜索BFS层次遍历节点来处理每一个节点的失败路径。*/while (!queue.isEmpty()) {Node parentNode queue.poll();for (Character transition : parentNode.getTransitions()) {Node childNode parentNode.find(transition);queue.add(childNode);Node failNode parentNode.getFailure().nextState(transition);childNode.setFailure(failNode);childNode.addEmit(failNode.emit());}}}private static class Node{private Map map;private List emits;//输出private Node failure;//失败中转private Boolean isRoot false;//是否为根结点public Node(){map new HashMap();emits new ArrayList();}public Node(Boolean isRoot) {this();this.isRoot isRoot;}public Node insert(Character character) {Node node this.map.get(character);if (node null) {node new Node();map.put(character, node);}return node;}public void addEmit(String keyword) {emits.add(keyword);}public void addEmit(Collection keywords) {emits.addAll(keywords);}/*** success跳转* param character* return*/public Node find(Character character) {return map.get(character);}/*** 跳转到下一个状态* param transition 接受字符* return 跳转结果*/private Node nextState(Character transition) {Node state this.find(transition);// 先按success跳转if (state ! null) {return state;}//如果跳转到根结点还是失败则返回根结点if (this.isRoot) {return this;}// 跳转失败的话按failure跳转return this.failure.nextState(transition);}public Collection children() {return this.map.values();}public void setFailure(Node node) {failure node;}public Node getFailure() {return failure;}public Set getTransitions() {return map.keySet();}public Collection emit() {return this.emits null ? Collections.emptyList() : this.emits;}}private static class Emit{private final String keyword;//匹配到的模式串private final int start;private final int end;/*** 构造一个模式串匹配结果* param start 起点* param end 重点* param keyword 模式串*/public Emit(final int start, final int end, final String keyword) {this.start start;this.end end;this.keyword keyword;}/*** 获取对应的模式串* return 模式串*/public String getKeyword() {return this.keyword;}Overridepublic String toString() {return super.toString() this.keyword;}}public static void main(String[] args) {ACTrie trie new ACTrie();trie.addKeyword(hers);trie.addKeyword(his);trie.addKeyword(she);trie.addKeyword(he);Collection emits trie.parseText(ushers);for (Emit emit : emits) {System.out.println(emit.start emit.end \t emit.getKeyword());}}}总结以上就是本文关于多模字符串匹配算法原理及Java实现代码的全部内容希望对大家有所帮助。感兴趣的朋友可以继续参阅本站如有不足之处欢迎留言指出。感谢朋友们对本站的支持。

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

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

相关文章

一般做网站宽度是多少深圳的设计网站

LLM-based KG KnowLM OpenSPGKG-based RAG 基本原理 从query出发的语义解析 pre-LLM方法 思想:直接将问题解析为对应的逻辑表达式,然后到知识图谱中查询。 方法:通常包含逻辑表达式、语义解析算法、语义解析模型训练三部分。一般步骤是将问句…

做汽车配件招聘网站徐州 网站建设

提示:Grounding DINO、TAG2TEXT、RAM、RAM论文解读 文章目录 前言一、Grounding DINO: Marrying DINO with Grounded Pre-Training for Open-Set Object Detection1、摘要2、背景3、部分文献翻译4、贡献5、模型结构解读a.模型整体结构b.特征增强结构c.解码结构 6、实…

wordpress 博客网站是免费的么wordpress首页文件夹

面向对象编程思想 1、什么是面向过程 传统的面向过程的编程思想总结起来就八个字——自顶向下,逐步细化! → 将要实现的功能描述为一个从开始到结束按部就班的连续的“步骤” → 依次逐步完成这些步骤,如果某一个步骤的难度较大&#xff…

网站开发岗位实际情况做ae动图的网站

一.IOU 1.GIOU解决没有交集的框,IOU为0,其损失函数导数为0,无法优化的问题。 图1 GIOU,IOU,l2范数差异 a)可看出 l2值一样,IOU值是不一样的,说明L1,L2这些Loss用于回归任务时,不能等价于最后用于评测检测的IoU. b)可看出当框有包含关系,GIOU就退化为IOU 其是找…

docker build 时报错 Error fail to solve

docker build 时报错 Error fail to solve,排查处理。问题:填写镜像源: 在Docke Desktop的设置中,选择Docker Engine, 填写: {"builder": {"gc": {"defaultKeepStorage": "20…

web图像触发防盗链,无法显示

web图像触发防盗链,背景却无非正常显示,但是音乐播放器和别的功能模块却可以正常访问网络加载的解决方法。问题 网页在Windows直接运行的时候一切正常,但是通过docker以后,浏览器通过localhost:12345访问时,背景却…

成都市网站建设费用及企业站长统计芭乐官方网站下载

第二章 SpringFramework 五、Spring AOP 面向切面编程 6. Spring AOP 基于 XML 方式实现(了解) 6.1 准备工作 加入依赖和基于注解的 AOP 时一样。准备代码把测试基于注解功能时的 Java 类复制到新 module 中,去除所有注解。 6.2 配置 Sp…

.NET操作Excel:单元格范围 (Range) 的精确定位与常用管理 (下)

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

TCP的学习 - 实践

TCP的学习 - 实践2025-10-01 10:32 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-fami…

24届(华为OD)Java面经 - 教程

24届(华为OD)Java面经 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco&quo…

dw内部网站链接怎么做网页设计与网站建设专业

本系列文章是学习深蓝学院-移动机器人运动规划课程第五章最优轨迹生成 过程中所记录的笔记,本系列文章共包含四篇文章,依次介绍了微分平坦特性、无约束BVP轨迹优化、无约束BIVP轨迹优、 带约束轨迹优化等内容 本系列文章链接如下: 最优轨迹生…

每天半小时,轻松学Docker第一篇:Debian 12 无痛安装与初体验 - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

南宁网站制作费用it项目外包网

哈夫曼编码的设计与应用 问题需求分析 用哈夫曼编码(Huffman Coding),又称霍夫曼编码,是一种编码方式,哈夫曼编码是可变字长编码(VLC)的一种。Huffman于1952年提出一种编码方法,该方法完全依据字符出现概率来构造异字头的平均长…

php网站访问很慢公司注册资金最低多少钱

Pass-14 (图片马,判断文件类型) 图片的格式在防护中通常是不会使用后缀进行判断的依据,文件头是文件开头的一段二进制码,不同类型的图片也就会有不同的二进制头。   JPEG (jpg),文件头:FF D…

2025上海骨灰盒哪里买优质厂家权威推荐榜:匠心工艺与品质服务之选

行业背景介绍 在殡葬文化中,骨灰盒承载着特殊的意义,它不仅是逝者最后的归宿,更是生者情感的寄托。随着社会的发展和人们观念的转变,对于骨灰盒的品质、工艺和文化内涵的要求也越来越高。上海作为国际化大都市,在…

实用指南:华为 HCIA-Datacom 备考:VRP 通用路由平台原理-实操

实用指南:华为 HCIA-Datacom 备考:VRP 通用路由平台原理-实操pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Co…

Voice Agent Camp 结营!完整项目名单公布丨超音速计划 2025

在过去的三个月里,17 个 Voice Agent 项目在超音速 Voice Agent Camp 里碰撞、打磨、成长。共同围绕「Voice First」理念,打造 AI 陪伴、个人助理、企业客服、AI 语音智能硬件等下一代产品。9 月 22 日,营员们带着阶…

详细介绍:SQL 执行异常排查 java.sql.SQLException:从 SQLException 说起

详细介绍:SQL 执行异常排查 java.sql.SQLException:从 SQLException 说起pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-famil…

做个外贸网站一般需要多少钱高校思政课网站建设

引言 在安卓开发中,视图绑定是一个关键的步骤,它允许开发者将布局文件中的视图组件与Activity或Fragment中的成员变量关联起来。这一机制不仅使得UI操作更加便捷,而且提高了开发效率。本文主要探讨了安卓开发中的一项重要技术——View Bindin…