字符串的非精确匹配

2.3用Shell通配符匹配字符串 问题 ​ 你想使用Unix Shell中常用的通配符(比如*.py,Date[0-9]*.csv等)去匹配文本支付串 解决方案 ​ fnamtch模块提供了两个模块函数–fnamtch()和fnmatchcase(),可以用来实现这样的匹配。 from fnmatch import fnmatch,fnmatchcase print(fnmatch('foo.txt','*.txt')) # ->True print(fnmatch('foo.txt','?oo.txt'))# ->T 阅读详情

字符串的非精确匹配问题(inexact matching),也就是字符串的对齐问题(string alignment)。对于字符串的exact matching问题,KMP、Suffix Tree等方法是利器,但是对于inexact matching,这些方法就有些吃力了,虽然也能使用Suffix Tree解决一些错配问题或通配符问题,但是使用范围很有限。对于inexact matching,一般使用动态规划( Dynamic Programming )处理。DP是老朋友了,时隔6年,好久不见。这里使用的DP比较简单,转移方程容易理解,毕竟是简单的线性DP。

编辑距离(Edit distance)

这道题很经典啊,当初刷这道题时真的没想到今天会从生信的角度来重温,切身体会见证了算法的实用性。

转移方程: D(i, j) = min[D(i - 1, j) + 1, D(i, j - 1) + 1, D(i -i, j-i) + t(i, j)].

初始条件:D(i, 0) = i ,D(0, j) = j.  

注:当Si(i) !=S2(j)时,t(i, j)=1;  当S1(i) = S2(j)时,t(i, j)=0. 


带权重的编辑距离(Weighted edit distance)

匹配是需要代价或奖励的。所谓权重,有两种类型,第一种是基于基本操作的权重,第二种是基于代价表格的权重。

基于基本操作的权重。对于insertion或deletion给定代价d、对于substitution(replacement)给定代价r,对于match给定奖励e,在此基础上计算编辑距离。

转移方程:D(i, j) = min[D(i, j - 1) + d, D(i - 1, j) + d, D(i - 1, j - 1) + t(i, j)]. 

初始条件:D(i, 0) = i x d ,D(0, j) = j x d. 

基于代价表格的权重。将insertion或deletion看成分别向两个字符串增加空格space(或破折号dash),将两个字符串出现过的所有字符和space(或破折号dash)组成新的集合,对于该集合中的任意两个字符,给出匹配代价s(x,y),得到代价表格s。令V(i,j)表示两个前缀S1[1...i]和S2[1...j]的最优匹配代价。(常常将错配代价记为负值,匹配奖励记为正值,那么此处的匹配代价说成匹配值比较好,并且需要使这个匹配值最大化)

转移方程:V(i, j) = max[ V(i -1,j-1)+ s(S1(i), S2(j)), V(i - 1, j) + s(S1(i), - ), V(i, j-1)+s( _ , S2(j) ) ].

初始条件:

   


局部匹配(Local alignment)

局部匹配可能是更为常见的问题,比如蛋白质具有特定的功能片段(举例:motif ),有的蛋白质在种间具有进化保守片段,等等问题实际上可以转化为局部匹配的问题。

先看一个定义:局部后缀匹配(Local suffix alignment)。寻找前缀S1[1...i]的后缀a 和前缀S2[1...j]的后缀b,使得匹配值V(a,b)最大化,并记录这个最大化的值为v(i, j)。可以证明,最佳局部匹配的匹配值 vmax = max[v(i, j) : i <= n, j <= m]. 

转移方程:v(i, j) = max[0, v(i - 1, j - 1) + s(S1(i), S2(j)), v(i -1,j) + s(S1(i),-), v(i, j - 1) + s(-, S2(j)) ].

初始条件:v(i, 0) = 0, v(0, j) = 0.


间隔问题(Gaps)

Gaps也是十分常见的问题,因为在生物序列匹配时,我们可能更关心匹配过程出现了多少个间隔,而不那么关心每个间隔里有多少空格。若出现一个Gap需要代价Wg,出现一个空格需要代价Ws,则出现一个连续m个空格形成的Gap需要代价Wg+m×Ws。利用Gaps模型,我们可以通过调整Wg和Ws的值,来实现不同的匹配效果:当增大Wg时,匹配结果更倾向于Gaps更少、片段更集中; 当增大Ws时,匹配结果更倾向于Gaps更多、片段更零散。

Gaps的权重有四种类型:常数型(constant)、仿射型(affine)、凸面型(convex)、任意型(arbitrary)。

常数型:maximize [Wm(# matches) - Wms(# mismatches) -Wg (# gaps)]. 

仿射型:maximize [Wm(# matches) - Wms(# mismatches) - Wg(# gaps) - Ws(# spaces)]. (仿射即:y=a+bx)

凸面型:在同一个Gap中,后面增加的space所需的代价比前面的space的代价小。如:Wg+log q(q表示Gap长度)。

任意型:根据Gap的长度不同,Gap总代价值w(q)为任意值(q表示Gap长度),即w(q+1)-w(q)不一定是常数。放射型是任意型的特例。


任意型

首先将匹配情况分为以下三种:


第一种情况,S1[i]与S2[k]对齐(其中k<j),也就是说,此时在S1的第i个位置后增加 (j-k)个空格实现对齐,记这种情况的最优匹配值为E(i ,j)。

第二种情况,S1[k]与S2[j]对齐(其中k<i),也就是说,此时在S2的第j个位置后增加 (i-k)个空格实现对齐,记这种情况的最优匹配值为F(i ,j)。

第三种情况,S1[i]与S2[j]对齐,记这种情况的最优匹配值为G(i ,j)。

记V(i ,j) 为 E(i ,j)、F(i ,j)、G(i ,j)的最大值。

转移方程:


注意:w(q+1)-w(q)不一定是常数。

初始条件:



仿射型

转移条件:


理解:若E(i ,j)由E(i ,j-1)转移而来,则无需新建Gap,也就不需要花费代价Wg。F(i ,j)的理解同理。

初始条件:



凸面型

请参考Algorithms on Strings, Trees and Sequences一书的12.6章节,方法也是基于动态规划。


EtherCAT-7 从站代码移植-SPI STM32F103 + AX58100,从站代码移植。 阅读详情

相关推荐

谐振电路原理与应用场景全解析

本文全面解析了谐振电路的原理、类型及其核心应用。详细阐述了串联谐振与并联谐振的工作特性,并重点介绍了其在无线通信调谐、音频处理分频以及电力系统滤波与无功补偿等关键场景中的实际作用。通过公式推导与实例分析,帮助读者深入理解LC谐振的选频与能量交换机制。

t1u2v的博客 836

nginx 配置规则

#nginx 配置规则 参考 ##location uri匹配规则 语法规则: location [=||*|^~] /uri/ {… } 首先匹配 =,其次匹配^~,其次是按文件中顺序的正则匹配,最后是交给 /通用匹配。 当有匹配成功时候,停止匹配,按当前匹配规则处理请求。 = 开头表示精确匹配 ^~ 非正则匹配 ~ 正则匹配,区分大小写。 ~* 正则匹配,不区分大小写。 !~ 正则不匹配,区分大小写 !~* 正则不匹配,不区分大小写 精准匹配(=) # 精确匹配,必须是127.0.0.

a4208xiaojin的博客 930

DFT实战:如何用Synopsys工具搞定多时钟域Scan Chain设计(附避坑指南)

本文详细解析了使用Synopsys DFT Compiler工具链实现多时钟域Scan Chain设计的全流程,包括时钟混合策略、跨时钟域平衡技巧和实战脚本剖析。通过量产验证的工程实践方案,帮助DFT工程师有效解决复杂SoC设计中的Scan Chain挑战,提升测试效率和质量。

mm9012的博客 1031

因果推断综述及基础方法介绍(一)

点击下面卡片,关注我呀,每天给你送来AI技术干货!来自 | 知乎作者 |陈歪歪地址 |https://zhuanlan.zhihu.com/p/258562953编辑 |机器学习算法...

zenRRan的博客 3510

脑机接口(BCI)从原理到开发实战 10|脑控外设:用脑电波控制机械臂/游戏

摘要: 脑机接口(BCI)的“最后一公里”是将分类结果转化为实际动作的关键环节。本文介绍如何通过指令映射、硬件通信和执行反馈实现脑控外设,包括离散/连续控制策略、防抖处理及串口/蓝牙通信方法。通过两个实战案例(运动想象控制机械臂抓取、P300/SSVEP控制游戏)和完整项目(OpenBCI控制小车),演示了从分类标签到设备动作的完整流程,重点涵盖指令生成算法(多数投票)、Python与Arduino的串口通信集成,为BCI系统落地提供实用解决方案。(149字)

小明的博客 763

modbus-esp8266库深度解析:工业级Modbus协议栈实现

Modbus是一种广泛应用于工业自动化领域的通用串行通信协议,其核心在于标准化的功能码、寄存器模型与帧结构设计。基于RTU、ASCII和TCP三种传输变体,Modbus协议通过主从架构实现设备间可靠数据交互,具备低开销、高兼容性与强实时性等技术价值。在边缘计算与工业物联网场景中,它被广泛用于PLC通信、传感器数据采集、HMI集成及远程固件升级(FOTA)等关键任务。针对ESP8266/ESP32等Wi-Fi微控制器平台,modbus-esp8266库提供了完整协议栈支持,涵盖多实例并发、回调驱动架构、零拷贝

weixin_42315569的博客 349

精确匹配(Exact Matching)

精确匹配是因果推断与观测数据均衡化中最直观、最严格的匹配方法,核心目标是通过严格的变量对齐,消除可观测混杂因素对处理效应估计的干扰,让处理组与对照组在关键特征上完全同质,从而逼近随机对照试验的对比条件。

weixin_43156294的博客 1534

MDM主数据清洗和编码集成说明

绝大多数的企业业务系统是伴随业务发展而建设的,但随着业务发展单一系统难以支撑企业业务闭环。MDM主数据管理平台可以满足企业数据治理的需求,本文针对主数据清洗和编码集成进行梳理。...

数通畅联 3318

前端学习————事件处理

文章目录一 处理事件1.1 v-on监听事件1.2 事件处理方法1.3 内联处理器中的方法1.4 事件修饰符1.5 按键修饰符1.6 系统修饰符1.6.1 非精准匹配1.6.2 精准匹配1.6.3 鼠标按钮事件 一 处理事件 1.1 v-on监听事件 可以用 v-on 指令监听 DOM 事件,并在触发时运行一些 JavaScript 代码。 <div id="example-1"> ...

Wby_Nju的博客 596

鸿蒙【ArkTS】使用TS装饰器封装网络请求HTTP

在HarmonyOS应用开发中,通过HTTP访问网络,可以使用官方提供的@ohos.net.http模块。但是官方提供的直接使用不太好使用,需要封装下才好。这里采用TS的装饰器实现AOP效果 完成前后端接口风格的统一

weixin_60376559的博客 5608

微信小程序 “net::ERR_CONNECTION_REFUSED” 报错大揭秘与破解之道

在微信小程序开发与运行过程中,“net::ERR_CONNECTION_REFUSED” 报错是开发者常遇难题。该错误意味着小程序与服务器连接建立失败,会导致功能无法使用、数据加载异常等问题,严重影响用户体验和业务运转。本文系统剖析此错误,从网络环境不佳、服务器异常、小程序配置有误等常见触发场景入手,提供网络、服务器、配置、代码等多维度排查步骤,给出针对性解决策略,如修复网络、处理服务器故障、修正配置与代码错误,还提出开发与运维阶段的预防措施,助力开发者高效解决该报错问题。

邓邓子的博客 6131

Excel中vlookup模糊查找的妙用(模糊匹配)

vlookup精确查找 vlookup模糊查找(非精确查找) 总结 1. vlookup精确查找 VLOOKUP(lookup_value,table_array,col_index_num,range_lookup) 参数 简单说明 输入数据类型 lookup_value 要查找的值 数值、引用或文本字符串 table_array 要查找的区域 数据表区域(左上角到右下角...

KUIflying的博客 16万+

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

fuzzyjoin:革命性R语言工具,轻松实现非精确匹配表连接

在数据分析中,我们经常需要将不同来源的表格进行连接,但现实世界的数据往往不完美——名称拼写错误、格式不一致、数值近似但不精确等问题层出不穷。传统的精确匹配连接(如`merge`或`dplyr::inner_join`)在面对这些情况时常常束手无策。而**fuzzyjoin**作为一款专为R语言设计的非精确匹配表连接工具,正是解决这类问题的终极方案!它让你能够基于相似度、距离或自定义规则轻松连接表格

gitblog_01177的博客 358

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Mysql中查询条件中数字和字符串匹配

Mysql中查询条件数字和字符串比较

luzhi1314的博客 3244

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

pa使用Example快速实现动态查询

限制 属性不支持嵌套或者分组约束,比如这样的查询 firstname = ?0 or (firstname = ?1 and lastname = ?2) 灵活匹配只支持字符串类型,其他类型只支持精确匹配 总结 通过在使用springdata jpa时可以通过Example来快速的实现动态查询,同时配合Pageable可以实现快速的分页查询功能。 对于非字符串属性的只能精确匹配,比如想查询在某个时...

fall_hat的博客 731

javaScript startWith() endWith()

http://xuxl.iteye.com/blog/883649   精确匹配,区分大小写: String.prototype.endWith=function(str){ if(str==null||str==""||this.length==0||str.length>this.length) return false; if(this.substring(thi

leocat2011的专栏 1886

输入单个空格字符_字符串的比较及清理垃圾字符

在日常的数据输入或操作时,表面上看起来完全相同的字符,却经常查询不到相匹配的结果,这往往是由于目标字符串与关键字不符导致的一、字符串的比较如下图:C2单元格 =A1=B1 返回TRUEC3单元格 =EXACT(A1,B1)返回FALSE,是因为EXACT区分大小写而I LOVE YOU和I LOVE YOU表面上看都一样,为什么都返回FALSE呢?是因为B5单元格中的每个单词之间有两个空格,而A5...

weixin_39874795的博客 195

位置匹配

1、单词边界 the cat scattered his food all over the room 正则表达式 cat 匹配结果 cat cat 用\b 指定单词边界,\b用来匹配一个单词的开始或结尾 the cat scattered his food all over the room 正则表达式 \bcat\b 匹配结果 c...

weixin_30892889的博客 131

使用excel公式vlookup提取多个表中的数据

=VLOOKUP($A$8,INDIRECT("'"&B1&"'!$A$2:$d$70"),4,0) 【含义】: 1)A8中是要搜索的id, 2)B1(C1、D1等)中是其他表名称, 采用 INDIRECT 函数,用字符串拼接把动态生成的表名称包含起来,可以从多个表中提取数据 3)A2到D70是在目标表中的搜索范围, 4) 4是取匹配数据行的第4个数据。 5)0是精确匹配 【提出...

MaxAndRuby的博客 1万+

python cookbook 2.3 用shell通配符匹配字符串

#fnmatch模块提供了两个函数--fnmatch()和fnmatchcase() ,可以用来实现通配符(*.py,Dat[0-9]*.csv等) from fnmatch import fnmatch,fnmatchcase print(fnmatch('foo.txt','*.txt')) print(fnmatch('Dat45.csv','Dat[0-9]*')) names = [...

别说话写代码的博客 269

正则表达式之匹配字符串双引号

字符串中可以出现转义的双引号,那么一般的正则表达式就不行了,譬如 "[^\"]*" 无法正确匹配 word1 “word2/"word3 /"” 其结果是 "word2/" 这里我用非获取匹配 "(?!/").*" 则结果是 " word2/"word3 /" " .* 表示贪婪策略 .*?非...

weixin_42186805的博客 1万+

php模糊匹配实现网站搜索,php如何实现模糊且精确的查找

数据类似下面这样:复制代码 代码示例:id | cid--------------------------------1| ,4,5,7,--------------------------------3| ,4,5,8,--------------------------------4| ,5,4,--------------------------------6| ,5,4,7,8,-----...

weixin_32129187的博客 857

正则表达式匹配中括号内的内容

几经研究, 终于实现了。 time[2020-06-04 11:43:36] (?<=\[)(.*)(?=]) (pattern) 匹配 pattern 并获取这一匹配。所获取的匹配可以从产生的 Matches 集合得到,在VBScript 中使用 SubMatches 集合,在JScript 中则使用 $0…$9 属性。要匹配圆括号字符,请使用 '\(' 或 '\)'。 (?:pattern) 匹配 pattern 但不获取匹配结...

bd_jc的博客 3920

python3正则表达式匹配但不包括最后一个字符_正则表达式:后面不要包含指定的字符串内容...

以前只会//.exec("\n"),匹配到,这种简单的固定写法,但实际使用次数几乎趋近于0。很多场景不能写死abc,顺理成章的就写成了//.exec("\n"),咦?咋把前面的匹配到了!从入门到放弃。昨天(2019-04-07)随手写了一下//.exec("\n"),原来是对.+(?!排除的字符串)这个结构能起到的作用理解错了,怪不得达不到预期,(.(?!排除的字符串))+才是正解。留下一个未解的...

weixin_39649611的博客 1408

python正则表达式匹配字符串中的电话号码_Python正则表达式匹配字符串中的数字...

这篇文章主要介绍了Python正则表达式匹配字符串中的数字,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下1.使用“\d+”匹配全数字代码:importrezen="Arizona479,501,870.Carlifornia209,213,650."m=re.findall("\d+",zen)print(m)结果:但是上述这种方式也...

weixin_32905035的博客 1541

fuzzyjoin vs 传统连接:为什么非精确匹配是数据处理的未来?

在数据处理的世界里,精确匹配曾是连接表格的黄金标准。但当面对拼写错误、格式差异或自然语言数据时,传统连接往往束手无策。**fuzzyjoin** 作为一款强大的 R 包,彻底改变了这一现状,它允许基于非精确匹配来连接表格,为数据整合带来前所未有的灵活性。本文将深入对比 fuzzyjoin 与传统连接的核心差异,揭示非精确匹配如何成为数据处理的未来趋势。 ## 传统连接的致命痛点:精确匹配的局限性

gitblog_00306的博客 418
上一篇: 后缀树系列三:后缀树的应用
下一篇: 生物信息学算法笔记
FarmerJohn
博客等级 码龄15年 1097粉丝 82原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FarmerJohn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值