automaton

[翻译]正则引擎的几种分类

眉间皱痕 提交于 2021-01-17 14:50:36
原文链接 http://www.softec.lu/site/RegularExpressions/RegularExpressionEngines 正则表达式引擎是正则表达式匹配算法的基础。其有多种不同的实现,但大多数都是基于Henry Spencer的NFA引擎。 正则引擎有两个大分类,DFA和NFA,像Perl、Java、.Net、 PHP 、Python、Ruby……等大多是工具都是用了NFA引擎。少数广泛被使用的工具如 mawk 使用了POSIX NFA引擎(NFA的一种变种)。以高效著称的工具采用了更为高效的DFA引擎。诸如GNU awk,GNU egrep和Tcl之类的一些工具结合了NFA / DFA两种引擎,将两者的优点结合在一起。 基于不同类型引擎的实现的正则表达式,主要有以下几点差异。 语法 匹配内容 零宽断言(环视) 功能 捕获功能 性能 所有的引擎都会对文本做从左向右的最长匹配,但具体细节取决于使用了何种引擎。 传统的NFA引擎 NFA引擎中使用的非确定有限状态机(Nondeterministic finite automation)是一种由要匹配的表达式驱动的算法。这使得正则表达式像一个小的编程语言一样,可控制引擎在匹配失败时候的行为。 正则引擎从正则表达式其实位置开始,尝试正则表达式与文本的开头进行匹配,如果匹配成功,都前进一个配置

你是一个成熟的手机了,应该学会自己“跑”去充电了

若如初见. 提交于 2020-10-15 02:28:03
      大数据文摘出品    来源:IEEE    编译:Hippo   结束了一天的工作,回家瘫倒想玩玩手机,发现 手机没!电!了!   偏偏沙发的诱惑又太过强大,甚至不想起身给手机充电。    “要是我的手机能自己跑去充电就好了!”   文摘菌要给你带来一个好消息:这个愿望已经被满足了!   近日,韩国机器人专家开发出了一种 带有小机械腿的手机壳 (CaseCrawler),可以让你的手机自动地四处蹦跶,自己“跑”去充电也完全没问题。      这个手机壳 比一般的手机壳要大得多 ,但和那些笨重的电池外壳相比,还是要友好得多。   根据介绍,CaseCrawler只有 24毫米 厚(不包含电机外壳),总重量不到 82克 。要知道,这可是一个完整的机器人,同时也是一个很完美的手机壳,不难想象,如果没有外置电池而是直接从手机获取电源,它将会是多么“苗条”。   别看这个手机壳小,但其内在的技术非常惊人。   CaseCrawler机械腿的工作原理与人腿类似,都有着一个只能向一个方向弯曲的膝关节,在它的腿在收平时,就 能支撑住相当大的重量 ,比如一个手机。   要让CaseCrawler向前行进的时候,联动装置(通过变速箱连结到电机)会在膝关节保持腿部直立的同时将腿推离地面,并在产生反作用力的时候,弯曲膝关节,保证腿不会再给地面施加力,通过这种反作用力让机器人前进。     

日本街头惊现18米巨型高达!全身24处可动,东京大学参与研发

淺唱寂寞╮ 提交于 2020-10-08 08:21:00
      大数据文摘出品    作者:刘俊寰   在吗?看看高达?   什么?被洪水冲走了??   那你可得要好好反思一下自己,对高达的爱到底是不是真的!   看看别人家的妻子, 在洪水中都要“破窗入室”,抢救丈夫的高达 ,这也让不少网友直呼,简直是“年度感动新闻”。      不过,先看看他们的高达,再看看下面这个。      在 高18米,重25吨 的巨型高达机器人面前,手上的高达模型是不是瞬间就不香了?      别急,这个巨型机器人不是拿来售卖的,再说也买不起啊(重点错)。   这个巨型高达机器人其实是在日本横滨倾心打造的 高达工厂 的一个绝对亮点,据日本知名模型制造商万代介绍方面,这部元祖高达将 拥有“有史以来最强的可动性” ,全身 可动关节多达24个 ,使用 电动机和液压机 的组合进行驱动。   是的,你没看错,这个庞然大物还能动!是不是已经热血喷张了?   根据这个项目最新披露的进度,巨型高达机器人 已于8月初建设完成 。   本来,高达工厂在10月份就可以正式营业了,但受到新冠疫情的影响, 开园时间再次往后推迟 ,但是不要紧,只要能够亲眼看到三次元高达行走在11区的大地上,我愿意等!      据了解,届时该展览场馆除了举行高达机器人外,还将包括展览中心、机器人实验室、会议设施、商店和提供 “高达餐单” 的咖啡馆等。   这其实不是第一个等身高达模型了,在

背着相机的甲虫登上Science子刊,它拍下了昆虫界第一部Vlog

三世轮回 提交于 2020-08-17 02:37:30
  机器之心报道    编辑:蛋酱、小舟    你知道昆虫的视界是什么样的吗?      如果昆虫也成为了一名 Vlogger,作品会是什么样的?   近日,一项在甲虫背部安装相机的研究登上《Science Robotics》,为我们揭晓了这一谜题。通过了解自然界中昆虫的视觉系统并做出取舍,研究者以平衡能量、计算量和质量的方式,为昆虫规模的机器人设计出更好的视觉系统。   让身长不足三厘米的甲虫背上相机,这件事并不简单。在人类看来最微小的摄像机,也足以压垮昆虫。因而,研究者首先思考的问题是:如何打造出一款适用于昆虫搭载的可操纵摄像机?   在该研究中,研究者设计出一种完全无线、动力自动化、机械可操纵的视觉系统。该系统用足够小的形状因子模仿昆虫的头部运动,可以安装在活的甲虫或类似大小的陆地机器人背部。   对于昆虫大小的机器人来说,无线视觉提供了丰富的环境形状和纹理信息。这在大型机器人中很常见,但在资源有限的小型平台上却是一个挑战。      安装在甲虫或类似大小的机器人背上的相机基本构造。   电子设备的执行器重 248 毫克,并且可以根据智能手机的命令将相机转向 60 度。制作好的相机约为硬币大小,以每秒 1 到 5 帧(fps)将 “第一人称主视角” 以 160*120 像素的单色视频传到距离 120 米远的蓝牙无线电中。     

让机器人给自己“刮胡子”?这个美国小伙亲自做了回小白鼠

醉酒当歌 提交于 2020-08-14 17:34:24
大数据文摘出品 作者:刘俊寰、朱科锦 好不容易解禁后的你,现在敢去理发店吗? 长发已经及腰?胡子长度已经可以堪比太乙真人了? 如何 在保持安全的社交距离的前提下,如何优雅地修理你的小胡子 ,就成了当务之急。 这不,国外研究人员就开发了这么一个能够远程剪胡子的机器人,虽然听上去有点不怎么安全呢?(狗头) 而且,为了证明这个机器人的可操作性,现在在东北大学工作的的机器人专家John Peter Whitney决定亲自上阵,充当第一个“小白鼠”,我们先来看看效果如何: 完整视频戳下方: 是的,你没有看错,在这个过程中,Whitney 真!的!很!紧!张! 在体验了一把机器人刮胡子之后,Whitney也长舒了一口气,成功“活下来”后,Whitney表示,这其实也是他第一次被其他“人”用直剃刀(straight razor)剃胡子。 关于这个机器人的更多详细信息,发表在ArXiv上披露了更多,欢迎来戳: https:// arxiv.org/abs/2004.0126 9 一个合格的机器人就应该学会刮胡子 大家都知道,这些机器人专家对这些“歪门邪道”最有兴趣了。 比如“DRC”和“SubT”这类挑战已经帮助专家们大大推动了相关技术,但是在生活中,很多具体的问题对于机器人来说还是很难实现的,比如接住球、将钉子插入孔中,或使用剃刀剃刮某人的脸而无需理发师给他们涂胶等。 John Peter

让机器人给自己“刮胡子”?这个美国小伙亲自做了回小白鼠

情到浓时终转凉″ 提交于 2020-08-14 13:45:55
      大数据文摘出品    作者:刘俊寰、朱科锦   好不容易解禁后的你,现在敢去理发店吗?   长发已经及腰?胡子长度已经可以堪比太乙真人了?   如何 在保持安全的社交距离的前提下,如何优雅地修理你的小胡子 ,就成了当务之急。      这不,国外研究人员就开发了这么一个能够远程剪胡子的机器人,虽然听上去有点不怎么安全呢?(狗头)   而且,为了证明这个机器人的可操作性,现在在东北大学工作的的机器人专家John Peter Whitney决定亲自上阵,充当第一个“小白鼠”,我们先来看看效果如何:      完整视频戳下方:   https://youtu.be/nICnRJ7NqkE   是的,你没有看错,在这个过程中,Whitney 真!的!很!紧!张!   在体验了一把机器人刮胡子之后,Whitney也长舒了一口气,成功“活下来”后,Whitney表示,这其实也是他第一次被其他“人”用直剃刀(straight razor)剃胡子。   关于这个机器人的更多详细信息,发表在ArXiv上披露了更多,欢迎来戳:   https://arxiv.org/abs/2004.01269   一个合格的机器人就应该学会刮胡子   大家都知道,这些机器人专家对这些“歪门邪道”最有兴趣了。   比如“DRC”和“SubT”这类挑战已经帮助专家们大大推动了相关技术,但是在生活中

让机器人给自己“刮胡子”?这个美国小伙亲自做了回小白鼠

£可爱£侵袭症+ 提交于 2020-08-07 16:20:05
云栖号资讯:【 点击查看更多行业资讯 】 在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 编者按:本文来自微信公众号“大数据文摘”(ID:BigDataDigest),作者:刘俊寰、朱科锦,36氪经授权发布。 好不容易解禁后的你,现在敢去理发店吗? 长发已经及腰?胡子长度已经可以堪比太乙真人了? 如何在保持安全的社交距离的前提下,如何优雅地修理你的小胡子,就成了当务之急。 这不,国外研究人员就开发了这么一个能够远程剪胡子的机器人,虽然听上去有点不怎么安全呢?(狗头) 而且,为了证明这个机器人的可操作性,现在在东北大学工作的的机器人专家John Peter Whitney决定亲自上阵,充当第一个“小白鼠”,我们先来看看效果如何: 是的,你没有看错,在这个过程中,Whitney真!的!很!紧!张! 在体验了一把机器人刮胡子之后,Whitney也长舒了一口气,成功“活下来”后,Whitney表示,这其实也是他第一次被其他“人”用直剃刀(straight razor)剃胡子。 关于这个机器人的更多详细信息,发表在ArXiv上披露了更多,欢迎来戳: https://arxiv.org/abs/2004.01269 一个合格的机器人就应该学会刮胡子 大家都知道,这些机器人专家对这些“歪门邪道”最有兴趣了。 比如“DRC”和“SubT”这类挑战已经帮助专家们大大推动了相关技术

小猿日记

杀马特。学长 韩版系。学妹 提交于 2020-08-06 01:17:28
公众号 更多精彩内容、活动、程序猿的小故事,欢迎扫码关注公众号 概述 本篇介绍了正则表达式引擎 正则表达式的匹配模式 优化正则表达式的三种方式 口水记 在上篇中,提到了split方法,这个方法就用到了正则表达式,而正则表达式可能会引起回溯问题。 大量的回溯是会长时间占用CPU,从而带来非常大的系统性能开销。 正则表达式引擎 正则表达式引擎正则表达式是一个用正则符号写出的公式,程序对这个公式进行语法分析,建立一个语法分析树,再根据这个分析树结合正则表达式的引擎生成执行程序(这个执行程序我们把它称作状态机,也叫状态自动机),用于字符匹配。 而这里的正则表达式引擎就是一套核心算法,用于建立状态机。 目前实现正则表达式引擎的方式有两种:DFA 自动机(Deterministic Final Automaton 确定有限状态自动机)和 NFA 自动机(Non deterministic Finite Automaton 非确定有限状态自动机)。 对比来看,构造 DFA 自动机的代价远大于 NFA 自动机,但 DFA 自动机的执行效率高于 NFA 自动机。假设一个字符串的长度是 n,如果用 DFA 自动机作为正则表达式引擎,则匹配的时间复杂度为 O(n); 如果用 NFA 自动机作为正则表达式引擎,由于 NFA 自动机在匹配过程中存在大量的分支和回溯,假设 NFA 的状态数为 s

从0到1打造正则表达式执行引擎(二)

青春壹個敷衍的年華 提交于 2020-07-28 09:00:11
@[toc] 在上篇博客 从0到1打造正则表达式执行引擎(一) 中我们已经构建了一个可用的正则表达式引擎,相关源码见 https://github.com/xindoo/regex ,但上文中只是用到了NFA,NFA的引擎建图时间复杂度是O(n),但匹配一个长度为m的字符串时因为涉及到大量的递归和回溯,最坏时间复杂度是O(mn)。与之对比DFA引擎的建图时间复杂度O(n^2),但匹配时没有回溯,所以匹配复杂度只有O(m),性能差距还是挺大的。 DFA和NFA 我们已经多次提到了NFA和DFA,它俩究竟是啥?有啥区别? 首先,NFA和DFA都是有限状态机,都是有向图,用来描述状态和状态之间的关系。其中NFA全称是非确定性有限状态自动机(Nondeterministic finite automaton),DFA全称是确定性有限状态自动机(Deterministic finite automaton)。 二者的差异主要在于确定性和非确定性,何为确定性? 确定性是指面对同一输入,不会出现有多条可行的路径执行下一个节点。有点绕,看完图你就理解了。 图示分别是一个NFA和DFA,上图之所以是NFA是因为它有节点具备 不确定性 ,比如0节点,在输入"a"之后它分别可以到0 1 2 节点。还有,上图有$\epsilon$边,它可以在没有输入的情况下跳到下一个节点,这也带来了不确定性。相反

深入正则表达式(3):正则表达式工作引擎流程分析与原理释义

落爺英雄遲暮 提交于 2020-07-24 03:13:51
作为正则的使用者也一样,不懂正则引擎原理的情况下,同样可以写出满足需求的正则,但是不知道原理,却很难写出高效且没有隐患的正则。所以对于经常使用正则,或是有兴趣深入学习正则的人,还是有必要了解一下正则引擎的匹配原理的。 有兴趣可以回顾《深入正则表达式(0):正则表达式概述》 正则引擎类型 正则引擎主要可以分为两大类:一种是DFA(Deterministic Finite Automatons/确定性有限自动机—),一种是NFA(Nondeterministic Finite Automatons/非确定性有限自动机)。总的来说, DFA可以称为 文本主导 的正则引擎 NFA可以称为 表达式主导 的正则引擎 NFA与DFA工作的区别: 我们常常说用正则去匹配文本,这是NFA的思路, DFA本质上其实是用文本去匹配正则 。 'for tonight's'.match(/to(nite|knite|night)/); 如果是NFA引擎,表达式占主导地位。在 字符串先查找字符串中的t , 然后依次匹配 , 如果是o,则继续 (以此循环)。匹配到to后, 到n,就面临三种选择,每一种都去尝试匹配一下 (它也不嫌累),第一个分支也是依次匹配,到t这里停止(nite分到t这里直接被淘汰);同理,接着第二个分支在k这里也停止了;终于在第三个分支柳暗花明,找到了自己的归宿。 NFA