当前位置:首页 » 操作系统 » ac匹配算法

ac匹配算法

发布时间: 2024-05-23 13:46:38

1. 什么是AC啊求大神帮助

您的问题比较含糊!!这里基本上涵盖所有有关AC的设计面!!您自己撷取吧!! 着名推理小说作家 阿加莎·克里斯蒂 ( Agatha Christie 1890~1976 ),英国着名女侦探小说家、剧作家。 阿加莎·克里斯蒂 [编辑本段]面试一对多的面试(评价中心),AssessmentCenter是世界500强公司在员工提升过程中,为了确保选择人 选的适当性,利用评价中心测定候选人的能力的一种有效的方法,并且可以测知员工培训需求的重点。 [编辑本段]学术 AC,是academic的缩写,中文翻译为“学术” [编辑本段]地理 AC,是Ascension岛(阿松森岛)的简称,位于大西洋南部,靠近非洲,是英国的殖民地 AC,是南极圈(Antarctica Circle)的简称 [编辑本段]电信AC是Authenticator Center的缩写,意为:鉴权中心。为与交流电区分,也简写为AUC Authenticator Center. 电工学 AC指交流电 [编辑本段]自动控制AC是automation control的缩写,意思是自动控制,是一个学科方向,又称为自动化。机器或装置在无人干预的情况下按规定的程序或指令自动进行操作或控制的过程,其目标是“稳,准,快”。自动化技术广泛用于工业、农业、军事、科学研究、交通运输、商业、医疗、服务和家庭等方面。采用自动化技术不仅可以把人从繁重的体力劳动、部分脑力劳动以及恶劣、危险的工作环境中解放出来,而且能扩展人的器官功能,极大地提高劳动生产率,增强人类认识世界和改造世界的能力。因此,自动化是工业、农业、国防和科学技术现代化的重要条件和显着标志。 自动化是一门涉及学科较多、应用广泛的综合性科学技术。作为一个系统工程,它由5个单元组成:①程序单元。决定做什么和如何做。②作用单元。施加能量和定位。③传感单元。检测过程的性能和状态。④制定单元。对传感单元送来的信息进行比较,制定和发出指令信号。⑤控制单元。进行制定并调节作用单元的机构。自动化的研究内容主要有自动控制和信息处理两个方面,包括理论、方法、硬件和软件等,从应 用观点来看,研究内容有过程自动化、机械制造自动化、管理自动化、实验室自动化和家庭自动化等。 [编辑本段]域名 ac为英国海外领地阿森松岛国家及地区顶级域(ccTLD)的域名。 [编辑本段]游戏1.AC,是英文all combo 的缩写。一般用在音乐游戏中,表示全连. 2.Assassin's Creed 刺客信条 3.在QQ音速中,所做的每一个动作都有一个判定。判定是根据游戏屏幕中间的节奏点/条来说的,做动作在左右两节奏点/条刚刚接触的那一霎那是最佳时期,此时判断为99%(没有100%)。若游戏中每一个动作判定都大于50%,直到游戏结束。 4.魔兽争霸游戏中,暗夜精灵族的弓箭手英文名称为Archer,简称AC。 5.在CS。穿越火线等FPS游戏中,AC指Armor Class(防御等级)的简称, 6,在突袭OL中地图:第三补及仓库的A地点侧门简称AC 7,Asheron's Call(亚瑟王的召唤),简称为AC 8,在DND中,防御所用的是AC这个概念,是Armor Class(防御等级)的简称。 在这里要注意的是AC和一般非DND游戏中的“防御”是有所区别的,在那些游戏中防御通常采用“伤害吸收”,如果本来要造成100点伤害的,也许因为穿着重甲,实际上只受到50点伤害,其余的50点被装甲“吸收”了。但是在DND的规则中则不一样,AC并不能让你被对手击中的时候少受伤害,而是让你“更加难以被对手命中”。不过宏观来说效果是一样的,受到100次伤害其中50次被躲过去,与100次伤害每次只受一半伤的总效果是一样的,计算起来则简便得多。 AC是一个综合的概念,包括盔甲、敏捷、体型和专长等等。只要攻击结果低于AC就是没有命中,你可以理解为被盔甲挡住了、身手敏捷躲过去了、身材娇小不易打中或者是专门学习过如何躲闪都可以。普通人AC的基本值为10,并且不随等级提高而改变,这实际上可以看作是投D20取10,因此也有变体规则在每次攻防对抗时不取固定数值,而是投D20防御再加上各种调整值,但这会让投骰次数增加一倍,虽然能让游戏的变数更多一些,却很少有DM肯采用。 计算AC的标准公式:AC=10+盔甲加值+盾牌加值+敏捷调整值+体型调整值。实际在应用中还有些其他的调整值,比如说很多怪物都皮糙肉厚,具有天生防御加值;魔法和特殊物品可以提供偏斜加值;种族或者专长所带来的闪避加值;某些技能也可以代替AC值,例如骑术检定可以代替坐骑的AC;很多法术效果(例如隐身术)会为AC带来不同种类的加值;甚至趴倒在地上也会带来AC的调整。 此外每个人物在不同的状态下总共有3个不同的AC,分别是正常情况、措手不及和接触。措手不及指的是人物未能及时反应过来,因此扣掉AC的敏捷加值(如果为正数),祈祷盔甲能够抵挡住对方的攻击;而受到对方接触攻击时只需要“碰到”就行,此时AC的盔甲、盾牌和天生加值无效,只能靠敏捷躲闪。例如某个人物敏捷为15,身穿革甲,那么敏捷加值为+2,盔甲加值为+3,正常情况下AC是10+2+3=15,措手不及就是10+3=13,接触就是10+2=12。 关于AC的各种加值,分别说一下需要注意的地方: 盔甲加值:实际上我们常用的盔甲加值的概念,有时候也包括了盔甲加值和盾牌加值,因为这两项数值可以叠加。需要注意的是大多数同种类的加值不能叠加,而是取较高的。在魔法物品中,防护戒指提供的是偏斜加值,天生防御护符提供的是天生防御加值,这些都可以和盔甲加值相叠加,但防御护腕所提供的是盔甲加值,不能和盔甲加值相叠加。 敏捷加值:这里要注意的是盔甲的“最高敏捷加值”。穿着盔甲以后总是会对行动有所限制,不像光着身子那么灵活。不同的盔甲的敏捷加值上限也不同。当敏捷加值超过盔甲上限时,并不是说敏捷受到限制,只是有一部分敏捷属性无法应用到防御上。假如某个人物具有15点敏捷,那么敏捷加值为+2,身着革甲(敏捷上限为+4)时可以把所有敏捷加值都应用到防御上,AC=10+敏捷2+革甲3=15;如果身穿全身甲(敏捷上限为+1),敏捷依然是15,但是应用到AC上的加值只有+1,AC=10+敏捷1+全身甲8=19。 体型加值:这个是相对体型加值,也就是说两个对手间体型差异导致的加值。如果两个对手体型相同,那么不论是超巨型还是超微型,都会互相抵消。 闪避加值:包括防御式攻击、全防御和矮人对巨人的种族加值等,都属于闪避加值。闪避加值最大的特点是可以叠加,这和其他加值不同。而且与敏捷无关,穿着盔甲照样能够闪避。但是如果失去AC的敏捷加值,也将同时失去闪避加值,因为这时候你动都不能动,还怎么闪避? 特别注意:很多情况下我们会失去AC的敏捷加值,例如没有及时发现敌人而处于措手不及的状态、遭到隐性的敌人攻击,或者被法术效果定身等等。这是我们要极力避免的状态,因为通常处于这种状态下,紧接着就要吃一记游荡者的“偷袭”!高级(LV5或以上)野蛮人与游荡者对抗时极其强大,就是因为不吃游荡者这一套。 其他影响AC的因素: 魔法增强:通过魔法增强的盔甲、盾牌或武器(见下文)可以提供额外的AC增强加值。 武器:具有护身特性的武器可以将武器的增强加值部分或全部(因为魔法武器的最高增强加值为+5,因此最高+5)转换为AC的特殊加值,并且能和任何其他加值叠加。 全防御:在一轮中只进行防御和移动,不攻击也不做其他动作。如果这样做,则在一轮内AC获得+4的闪避加值。 防御式攻击:在进行全力攻击动作时,可以选择防御式攻击。如果这样做,则在一轮内所有攻击都受-4减值,而AC获得+2闪避加值。 专长(闪避):先决条件,敏捷达到13。在做任何动作时,可以指定一名对手,该对手对你攻击时,你的AC有+1闪避加值。可以在做其他动作时改换新的目标。 专长(灵活移动):先决条件,敏捷达到13,闪避。当你进入或离开敌人的威胁区域时,若是引发对手的借机攻击,则你的AC可以获得+4的闪避加值。 专长(寓守于攻):先决条件,智力达到13。在近战中进行攻击或整轮攻击时,可以选择让攻击检定减少(最多-5,而且不能超过基本攻击加值),再将等量的数值(也就是最多达到+5)加到AC的闪避加值上。 技能(滚翻):当滚翻的技能级数(注意不是技能检定加值,因此人物至少要达到LV2,而且滚翻作为本职技能,如果作为跨职技能的话,则人物至少要达到LV7)达到5,则进行防御式战斗时AC的闪避加值为+3而非+2,进行全防御时AC的闪避加值也提升为+6而非+4。 冲刺:当进行冲刺攻击的时候,一轮之内AC受到-2减值。 狂暴:当发动狂暴的时候,狂暴期间AC受到-2减值。因为野蛮人通常不穿重甲,反而经常狂暴了冲锋,狂暴的时候还不能用寓守于攻等能力,所以AC通常很惨,只能靠修习闪避、灵活移动之类的专长稍稍弥补一下,野蛮人的敏捷也比战士更重要。 遮蔽:当防御者处于被遮蔽状态时,根据遮蔽的程度不同分别获得不同的遮蔽加值。最常见的就是塔盾造成的遮蔽,还有闪现、隐形等效果导致失手几率。 [编辑本段]信息AC是最早的一种多模式匹配的线性算法。该算法应用有限自动机巧妙地将字符比较转化为了状态转移,使得时间复杂度在O(n),并且与具体模式的长度和模式集的大小无关。 (算法简介: http://hi..com/lightxianjian/blog/item/d0f0b8de8041125095ee3710.html ) AC在信息学竞赛及其训练中是Accept的缩写,表示你提交的程序完全符合题目要求并通过了所有数据。 在OIer的心目中,做OJ时,最爽的时候就是AC(取accepted,下同)的时候,因此,这个词成为了许多OIer心目中最神圣的词,代表着幸运(又称RP, RenPin, 人品)。 [编辑本段]生活AC:air conditioning 空调、空气调节(装置) 如汽车操作台上指空调 [编辑本段]物理 原子化焓:kJ /mol @25℃ 301 热容:J /(mol· K) 27.2 导热系数:W/(m·K) alternating current 中译为交流电 AC:如果是AC220V,则代表是交流电压220V。 [编辑本段]化学 电子亲合和能: 0 KJ·mol-1 第一电离能: 0 KJ·mol-1 第二电离能: 0 KJ·mol-1 第三电离能: 0 KJ·mol-1 单质密度: 10.07 g/cm3 单质熔点: 1050.0 ℃ 单质沸点: 3200.0 ℃ 原子半径: 0 埃 离子半径: 埃 共价半径: 0 埃 发现人: 德比尔纳 时间: 1899 地点: 法国 元素描述: 沉重的银白色金属,具有强放射性。 元素来源: 见于所有的铀矿中,极为稀少。通常在反应器中用中子处理镭获得。 元素用途: 没有什么实际用途。 元素符号: Ac 英文名: Actinium 中文名: 锕 相对原子质量: 0 常见化合价: 电负性: 0 外围电子排布: 6d1 7s2 核外电子排布: 2,8,18,32,18,9,2 同位素及放射线: Ac-225[10d] Ac-226[1.2d] Ac-227(放βα[21.8y]) Ac-228[6.16h] 另外,Ac还是醋酸根(CH3COO-)的简写,如NaAc为醋酸钠(CH3COONa),HAc为醋酸(CH3COOH),注意简写时Ac要放到后面, 以便与金属锕区别。 AC 是anal chem的简称全称:Analytical Chemistry 化学类重要杂志期刊之一 生物 腺苷酸环化酶(adenylate cyclase, AC) 腺苷酸环化酶是膜整合蛋白,它的氨基端和羧基端都朝向细胞质。AC在膜的细胞质面有两个催化结构域,还有两个膜整合区,每个膜整合区分别有6个跨膜的α螺旋。哺乳动物中已发现6个腺苷酸环化酶异构体。由于AC能够将ATP转变成cAMP,引起细胞的信号应答,故此,AC是G蛋白偶联系统中的效应物。 [编辑本段]歌星 少年歌星aaron charles carter 名字的缩写 13岁的亚伦卡特是英国音乐史上拥有连续五首十大金曲的最年轻的歌手,他是“新好男孩”演唱会的特别嘉宾,第一张专辑也在全球各国的十大排行榜上同时也在全球12个国家得到金唱片销售,第二张专辑更是写下多项白金唱片的销售纪录。 亚伦卡特在2岁的时候就开始学习唱歌及跳舞,7岁的时候就开始组成第一个属于他自己的乐团。亚伦卡特回忆说:“我在能说话的时候就学会如何唱歌了,我会一面唱歌一面绕着屋子跳着舞。”亚伦卡特很幸运的有一位大哥哥做一个好典范,那就是当今最红的男孩团体“后街男孩”的成员尼克,尼克的成功无疑的替亚伦卡特开辟了一条康庄大道,从尼克身上他学习了如何在五光十色的娱乐事业中找到一条生存之道。今年13岁的他褪去以往小男孩青涩的感觉,愈发俊秀的脸庞加上充满活力的演出,成了青少年的新偶像! 亚伦卡特推出最新专辑《0H!AARON》(《天之骄子》),一推出就登上美国告示牌排行榜的TOP7,而这张专辑除了延续亚伦卡特一贯的HIH0P、RAP、雷鬼音乐风格,更祭出了胞兄———后街男孩成员中的尼克,特别跨刀与亚伦合唱了首支单曲“NOTT00YOUNG,NOTT000LD”以及标题曲“0H!AARON”。专辑中还收录有“I’MALLABOUTYOU”亚伦卡特首度深情献唱的抒情曲,及亚伦卡特的小王子白皮书“THEKIDINYOU”,他借着这首歌向全世界宣告:“永远会以音乐唤醒所有聆听者心中沉睡的青春活力!” 8.是Associazione Calcio Milan s.p.a [编辑本段]球队 意大利语AC(Associazione Calcio) 是足球俱乐部的简称,就像英语中的FC一样,并无特指某具体球队,AC Milan、AC Siena、AC Chievo Verona均属此意 [编辑本段]魔兽世界中定义 AC - Armor Class,盔甲级别或防御。 魔兽争霸中及其战报中表精灵族弓箭手(Archer) [编辑本段]中国国际航空公司AC= Air China 中国国际航空公司 但是 中国国际航空公司的航班号开头字母是CA 一般不会反过来表示 网站 AC =Anti-cnn的简称. 动漫 阿斯兰Athrun卡嘉莉Cagalli 高达SEED&高达seed destiny中的男女主角之一 相当坎坷曲折的一对 不过还是会支持他们,希望他们能幸福> <

2. AC是什么意思啊

1、AC(交流电)一般指交流电

交流电是指电流方向随时间作周期性变化的电流,在一个周期内的平均电流为零。不同于直流电,它的方向是会随着时间发生改变的,而直流电没有周期性变化。

2、Accepted

Accepted,简称AC,意味着通过了测试样例(答案正确),通常在信息学竞赛在线评测系统(Online Judge)显示,是信息学竞赛常用的术语之一。

AC(交流电)发展历史

当发现了电磁感应后,产生交流电流的方法就被知晓。早期的发电机由英国人麦可·法拉第(Michael Faraday)与法国人波利特·皮克西(Hippolyte Pixii)等人发明出来。

1882年,英国电工詹姆斯·戈登建造了大型双相交流发电机。开尔文勋爵与塞巴斯蒂安·费兰蒂(Sebastian Ziani de Ferranti)开发早期交流发电机,频率介于100赫兹至300赫兹之间。

1891年,尼古拉·特斯拉取得了高频交流发电机(15000Hz)的专利。

1891年后,多相交流发电机被用来供应电流,此后的交流发电机的交流电流频率通常设计在16赫兹至100赫兹间,搭配弧光灯、白炽灯或电动机使用。

根据电磁感应定律,当导体周围的磁场发生变化,感应电流在导体中产生。通常情况下,旋转磁体称为转子,导体绕在铁芯上的线圈内的固定组,称为定子,当其跨越磁场时,便产生电流。产生交流电的基本机械称为交流发电机。

以上内容参考:网络-AC;网络-AC

3. 什么是AC

学术
AC,是academic的缩写,中文翻译为“学术”

地理
AC,是Ascension岛(阿松森岛)的简称,位于大西洋南部,靠近非洲,是英国的殖民地

游戏
1.AC,是英文all combo 的缩写。一般用在音乐游戏中,表示全连.

2.在QQ音速中,所做的每一个动作都有一个判定。判定是根据游戏屏幕中间的节奏点/条来说的,做动作在左右两节奏点/条刚刚接触的那一霎那是最佳时期,此时判断为99%(没有100%)。若游戏中每一个动作判定都大于50%,直到游戏结束。

信息
AC是最早的一种多模式匹配的线性算法。该算法应用有限自动机巧妙地将字符比较转化为了状态转移,使得时间复杂度在O(n),并且与具体模式的长度和模式集的大小无关。

AC在信息学竞赛及其训练中是Accept的缩写,表示你提交的程序完全符合题目要求并通过了所有数据。

在OIer的心目中,做OJ时,最爽的时候就是AC(取accepted,下同)的时候,因此,这个词成为了许多OIer心目中最神圣的词,代表着幸运(又称RP, RenPin, 人品)。

物理

原子化焓:kJ /mol @25℃

301

热容:J /(mol· K)

27.2

导热系数:W/(m·K)

alternating current 中译为交流电

14.AC:如果是AC220V,则代表是交流电压220V。

化学

电子亲合和能: 0 KJ·mol-1
第一电离能: 0 KJ·mol-1 第二电离能: 0 KJ·mol-1 第三电离能: 0 KJ·mol-1
单质密度: 10.07 g/cm3 单质熔点: 1050.0 ℃ 单质沸点: 3200.0 ℃
原子半径: 0 埃 离子半径: 埃 共价半径: 0 埃
发现人: 德比尔纳 时间: 1899 地点: 法国
元素描述:
沉重的银白色金属,具有强放射性。
元素来源:
见于所有的铀矿中,极为稀少。通常在反应器中用中子处理镭获得。
元素用途:
没有什么实际用途。

元素符号: Ac 英文名: Actinium 中文名: 锕

相对原子质量: 0 常见化合价: 电负性: 0
外围电子排布: 6d1 7s2 核外电子排布: 2,8,18,32,18,9,2
同位素及放射线: Ac-225[10d] Ac-226[1.2d] Ac-227(放 βα[21.8y]) Ac-228[6.16h]

另外,Ac还是醋酸根(CH3COO-)的简写,如NaAc为醋酸钠(CH3COONa),HAc为醋酸(CH3COOH),注意简写时Ac要放到后面,
以便与金属锕区别。

歌星

少年歌星aaron charles carter 名字的缩写

13岁的亚伦卡特是英国音乐史上拥有连续五首十大金曲的最年轻的歌手,他是“新好男孩”演唱会的特别嘉宾,第一张专辑也在全球各国的十大排行榜上同时也在全球12个国家得到金唱片销售,第二张专辑更是写下多项白金唱片的销售纪录。

亚伦卡特在2岁的时候就开始学习唱歌及跳舞,7岁的时候就开始组成第一个属于他自己的乐团。亚伦卡特回忆说:“我在能说话的时候就学会如何唱歌了,我会一面唱歌一面绕着屋子跳着舞。”亚伦卡特很幸运的有一位大哥哥做一个好典范,那就是当今最红的男孩团体“后街男孩”的成员尼克,尼克的成功无疑的替亚伦卡特开辟了一条康庄大道,从尼克身上他学习了如何在五光十色的娱乐事业中找到一条生存之道。今年13岁的他褪去以往小男孩青涩的感觉,愈发俊秀的脸庞加上充满活力的演出,成了青少年的新偶像!

亚伦卡特推出最新专辑《0H!AARON》(《天之骄子》),一推出就登上美国告示牌排行榜的TOP7,而这张专辑除了延续亚伦卡特一贯的HIH0P、RAP、雷鬼音乐风格,更祭出了胞兄———后街男孩成员中的尼克,特别跨刀与亚伦合唱了首支单曲“NOTT00YOUNG,NOTT000LD”以及标题曲“0H!AARON”。专辑中还收录有“I’MALLABOUTYOU”亚伦卡特首度深情献唱的抒情曲,及亚伦卡特的小王子白皮书“THEKIDINYOU”,他借着这首歌向全世界宣告:“永远会以音乐唤醒所有聆听者心中沉睡的青春活力!”

8.是Associazione Calcio Milan s.p.a

球队

意大利语AC是足球俱乐部的简称,就像英语中的FC一样
所以AC Milan实际上应翻译成米兰足球俱乐部,简称米兰队.AC Milan是最先翻译进来的,也就一直保留了下来

魔兽世界中定义

AC - Armor Class,盔甲级别或防御。

魔兽争霸中及其战报中表精灵族弓箭手(Archer)

中国国际航空公司
AC= Air China 中国国际航空公司

AC”在英汉词典中的解释(来源:网络词典):

AC
abbr.
1. =alternating current
2. =air-conditioning 空气调节(装置)

Ac
abbr.
1. =[Bible] Acts

ac
abbr.
1. =air conditioning 空调
2. =average cost 平均支出
3. =alternating current 交流(电)
4. =automatic analog computer 自动模拟电脑

4. AC自动机的概述

应用
一个常见的例子就是给出n个单词,再给出一段包含m个字符的文章,让你找出有多少个单词在文章里出现过。
要搞懂AC自动机,先得有模式树(字典树)Trie和KMP模式匹配算法的基础知识。AC自动机算法分为3步:构造一棵Trie树,构造失败指针和模式匹配过程。
如果你对KMP算法了解的话,应该知道KMP算法中的next函数(shift函数或者fail函数)是干什么用的。KMP中我们用两个指针i和j分别表示,A[i-j+ 1..i]与B[1..j]完全相等。也就是说,i是不断增加的,随着i的增加j相应地变化,且j满足以A[i]结尾的长度为j的字符串正好匹配B串的前 j个字符,当A[i+1]≠B[j+1],KMP的策略是调整j的位置(减小j值)使得A[i-j+1..i]与B[1..j]保持匹配且新的B[j+1]恰好与A[i+1]匹配,而next函数恰恰记录了这个j应该调整到的位置。同样AC自动机的失败指针具有同样的功能,也就是说当我们的模式串在Trie上进行匹配时,如果与当前节点的关键字不能继续匹配,就应该去当前节点的失败指针所指向的节点继续进行匹配。

5. 字符串匹配算法的使用(未完待整理)

字符串的匹配在Java中都知道使用indexOf函数来实现,那么其匹配算法是怎么样的呢?

单模式和多模式的区别就是一次遍历主串能否将多个模式的字符串都查找出来。

英文全称为Brute Force,暴力匹配算法,匹配字符串的方法比较暴力,也比较简单易懂。其大概的思路就是:

我们可以看到,在极端情况下,在主串 aaaa...aab 中寻找模式串 aab ,那么总共需要寻找(n-m+1)次,且每次都需要比对m次,那么时间复杂度将是 (n-m+1)*m ,即 O(n*m) ;但实际上并不会这么低效,因为我们的使用场景中主串和模式串都不会太长,而且在每个子串和模式串进行比对时,只要中途有一个不匹配,那么当前比对就会提前结束,因此大部分情况下,时间复杂度都会比 O(n*m) 要好。

我们在BF算法的基础上引入哈希算法,我们不需要将每个子串与模式串逐个字符地进行比较,而是计算得出每个子串的hash值,然后和模式串的hash值进行比较,如果有相等的,那就说明有子串和模式串匹配上了。

虽然我们只需要比对模式串和子串的hash值就能得到匹配结果,次数为(n-m+1),但是对每个子串进行hash计算的时候,是要遍历每个字符的,因此次数也是m,那么总的时间复杂度还是 O(n*m) ,并没有明显地提升。

那么我们该如何想出一个办法,使得每个子串hash值的计算时间得到提升呢?这就是RK算法的精髓,假设子串包含的字符集中元素个数为k,那么就用k进制数来代表这个子串,然后hash的过程就是将这个k进制的数转换为十进制的数,这个十进制的数就是该子串的hash值。

相邻子串的hash值计算是有规律的,我们只需要遍历一次主串就能得到所有子串的hash值,算法复杂度为O(n),而不是像原先一样,每个子串都需要O(m)的时间复杂度。

然后将模式串的hash值和所有子串的hash值进行比较,每次比较的时间复杂度是 O(1) ,总共比较(n-m+1)次,所以RK算法的总的时间开销为 O(n)+O(1)*O(n-m+1) ,即为 O(n) ,时间复杂度比BF算法更加高效。

当然,有hash的地方就有可能会存在hash冲突,有可能子串和hash值和模式串的hash值是一样的,但内容就是不一样,此时怎么办呢?其实很简单,对于hash值一样的子串,我们增加双保险,再比较一下这m个字符是否都一样即可,总的时间开销为 O(n)+O(1)*O(n-m+1)+O(m) ,即为 O(n) 。

如果极端情况下出现了很多hash冲突呢?我们对于每个和模式串相同hash值的子串都需要逐一再进行比较,那么总的时间开销就会为 O(n)+O(1)*O(n-m+1)+O(m)*O(n-m+1) ,即为 O(n*m) ,不过这种概率太小了,大部分情况下都不会这样。

在真正的文本编辑器中查找和替换某个字符串时,使用的算法既不是上述的BF算法,也不是RK算法;BF算法只适合不是很长的主串,RK算法则要设计一个冲突概率很低的hash算法,这个比较困难,所以实际使用的是BM算法,它是工程中非常常用的一种字符串匹配算法,效率也是最高的。

算法的思想和过程有些复杂,待以后整理。

KMP算法在本质上是和BM算法一样的。算法的思想和过程有些复杂,待以后整理。

浏览器输入框中的智能输入匹配是怎么实现的,它是怎么做动态字符串匹配查找的呢?这就用到了Trie树。

又名字典树,是一种专门用来快速查找字符串前缀匹配结果的树形结构,其本质就是将所有字符串的重复的前缀合并在一起,构造一个多叉树。

其中,根节点不包含任何信息,每个节点表示一个字符,从根节点到红色节点的一条路径表示存储的一个字符串。当我们在如上Trie树中查找"he"时,发现"he"并非是一个字符串,而是"hello"和"her"的公共前缀,那么就会找到这两个字符串返回。

Trie树在内存中是如何存储的呢?因为每一个节点都可能是包含所有字符的,所以每一个节点都是一个数组(或者散列表),用来存储每个字符及其后缀节点的指针。

使用Trie树,最开始构建的时候,时间复杂度为 O(n) ,其中n为所有字符串长度之和,但是一旦构建完成,频繁地查询某个字符串是非常高效的,时间复杂度为 O(k) ,其中k为查找字符串的长度。

Trie树虽然查询效率很高,但是比较浪费内存,每一个节点都必须维护一个数组存放所有可能的字符数据及其指向下一个节点的指针,因此在所有字符串公共前缀并不多的时候,内存空间浪费地就更多了。这种问题其实也有对应的解决办法,我们可以不使用数组,而是使用有序数组、散列表、红黑树来存放,可以相应地降低性能来节省内存空间。

Trie树除了可以实现浏览器动态输入内容查找候选项的功能外,还可以实现多模式地敏感词匹配功能。假设我们需要对用户输入的内容进行敏感词检查,将所有的敏感内容用***代替,那么该如何实现呢?

首先我们可以维护一个敏感词字典,使用上述四种单模式匹配算法也可以实现,但是需要遍历N次用户输入的内容,其中N是所有敏感词的模式串,显得非常低效。但是我们如果将敏感词字典维护为一个Trie树,然后将用户输入的内容从位置0开始在Trie树中进行查询,如果匹配到红色节点,那么说明有敏感词;如果没有匹配到红色节点,就从用户输入内容的下一个位置开始继续在Trie树中查询,直至将用户输入内容遍历完,因此我们只是遍历了一遍主串。

然而更高效的多模式字符串匹配使用地更多的是如下的AC自动机。

如果把Trie树比作BF算法,KMP算法是BF算法的改进,那么AC自动机就是利用同样的思想改进了Trie树。

算法的思想和过程有些复杂,待以后整理。

热点内容
jquery代码加密 发布:2024-11-27 03:54:51 浏览:593
数字密码人格是什么原理 发布:2024-11-27 03:46:34 浏览:426
华为怎么看手机的配置 发布:2024-11-27 03:27:42 浏览:381
php函数作用域 发布:2024-11-27 03:26:11 浏览:176
pythonasteval 发布:2024-11-27 03:21:14 浏览:563
电脑服务器机什么意思 发布:2024-11-27 03:18:59 浏览:837
本地存储是否允许 发布:2024-11-27 03:08:02 浏览:411
adc的电脑密码是多少 发布:2024-11-27 03:01:54 浏览:965
会员管理系统php 发布:2024-11-27 02:15:41 浏览:235
企业php网站系统 发布:2024-11-27 02:14:14 浏览:254