求两个DNA的距离-最短编辑距离变形

最短编辑距离变形----DNA对比问题 最近做了做蓝桥杯软件大赛的题目,做到了一道需要用动态规划解决的问题。网上搜了一下,发现可参考的资源非常少。可能大牛们都没怎么听说过软件大赛吧,那就让我这棵弱菜写篇博客,介绍一下自己的思路吧! 更改说明: 写完博客后,总感觉可能我的方法有点问题,所以又在网上找了别人的代码生成了几组数据,发现果然有出入,于是又从新审了一下 题,发现自己把题意理解错了。 请看题目第三个条件3.重码,也就是说如果要 阅读详情

题意如下:

脱氧核糖核酸即常说的DNA,是一类带有遗传信息的生物大分子。它由4种主要的脱氧核苷酸(dAMP、dGMP、dCMT和dTMP)通过磷酸二酯键连接而成。这4种核苷酸可以分别记为:A、G、C、T。


DNA携带的遗传信息可以用形如:AGGTCGACTCCA.... 的串来表示。DNA在转录复制的过程中可能会发生随机的偏差,这才最终造就了生物的多样性。

为了简化问题,我们假设,DNA在复制的时候可能出现的偏差是(理论上,对每个碱基被复制时,都可能出现偏差):

1. 漏掉某个脱氧核苷酸。例如把 AGGT 复制成为:AGT

2. 错码,例如把 AGGT 复制成了:AGCT

3. 重码,例如把 AGGT 复制成了:AAGGT

如果某DNA串a,最少要经过 n 次出错,才能变为DNA串b,则称这两个DNA串的距离为 n。

例如:AGGTCATATTCC 与 CGGTCATATTC 的距离为 2

你的任务是:编写程序,找到两个DNA串的距离。

【输入、输出格式要求】

用户先输入整数n(n<100),表示接下来有2n行数据。

接下来输入的2n行每2行表示一组要比对的DNA。(每行数据长度<10000)

程序则输出n行,表示这n组DNA的距离。

例如:用户输入: 3

AGCTAAGGCCTT 

AGCTAAGGCCT 

AGCTAAGGCCTT 

AGGCTAAGGCCTT 

AGCTAAGGCCTT 

AGCTTAAGGCTT

则程序应输出: 1 1 2

分析:(个人理解,因为找不到标准答案,所以非常希望有人指出本人的错误所在)

这道题是蓝桥杯决赛的题目,难度适中,就是题意有些歧义,因为歧义造成现在网上很多版本的答案,基本全篇一律,该算法的类似版本在《编程之美》中也出现过,求的是字符串的相似度,但是仔细阅读题意,会发现这个和一般的最短编辑距离的题目有点不一样,主要体现在该题目中对重码的定义,很多网上的答案不能得到让人满意的结果主要就是没有考虑这里的重码意思所在。

举个例子:

一般的最短编辑距离可以从这里去了解:http://www.cnblogs.com/grenet/archive/2010/06/01/1748448.html

一般的最短编辑距离也是三种修改方式:

替换、删除、插入

这里的替换和删除对应该题的:错码、漏码

要非常注意这里的插入不是直接对应该题的重码,重码是一种受限制的插入,举个列子,如根据插入概念,则

GGT和AGGT的编辑距离就是1,即在GGT前面添加A,但是回到这道题,可是不允许这样做的,GGT是源串,AGGT是目标串,GGT前面不应该直接产生一个A,因为从题意中可以看出,要添加字符,只能通过复制,所以他是一种受限制的插入,即:

GGT变成AGGT的过程是:

第一个字符发生一次错码(GGT->AGT),第二个字符发生一次重码(AGT->AGGT),即编辑距离应该是2

再举些容易被忽视的例子:

ACA-->CC 编辑距离为2(一次漏码,一次错码)

CC--->ACA 编辑距离为3(先发生一次错码CC-->AC,再发生一次重码:AC-->ACC,再发生一次错码:ACC-->ACA)

B-->BDD 编辑距离为4(先发生两次重码,再发生两次错码)

B-->BBD编辑距离为3(先发生两次重码,再发生一次错码)


只要注意到重码这个问题,其他的只要理解了LD算法,对其进行一个修改即可:

java代码如下:(哪里有疑问的请留言)

import java.util.Scanner;

public class js_09 {
	private static char[] A;//源串
	private static char[] B;//目的串
	private static int[][] tmp;//辅助数组
	public static void main(String[] args) {
		Scanner scanner=new Scanner(System.in);
		String aStr=scanner.nextLine();
		String bStr=scanner.nextLine();
		A=aStr.toCharArray();
		B=bStr.toCharArray();
		tmp=new int[A.length+1][B.length+1];
		for(int i=0;i<=A.length;i++){
			for(int j=0;j<=B.length;j++){
				tmp[i][j]=-1;
			}
		}
		//tmp[i][j]表示A[0...i]和B[0...j]的编辑距离
		System.out.println(process(0,0));
	}
	
	public static int process(int i,int j){
		if(j==B.length){//目标串匹配结束
			return A.length-i;//再发生A.length-i次漏码即可变成目标串
		}
		if(i==A.length){//源串匹配结束
			return getNumber(j);//源串再发生getNumber(j)次变化即可变成目标串
		}
		if(tmp[i][j]!=-1){//如果已经计算过,直接取值
			return tmp[i][j];
		}
		//如果相等
		if(A[i]==B[j]){
			if(tmp[i+1][j+1]==-1){
				tmp[i+1][j+1]=process(i+1,j+1);
			}
			return tmp[i+1][j+1];
		}else{
			//process(i+1,j)->漏码
			//process(i, j+1)->重码
			//process(i+1,j+1)->错码
			if(tmp[i+1][j]==-1){
				tmp[i+1][j]=process(i+1,j);
			}
			if(tmp[i+1][j+1]==-1){
				tmp[i+1][j+1]=process(i+1,j+1);
			}
			//会发生重码的条件
			if(j!=0&&B[j]==B[j-1]){//判断是否可能是重码导致的情况,可能是重码

				if(tmp[i][j+1]==-1){//重码
					tmp[i][j+1]=process(i,j+1);
				}
				//1表示发生一次编辑(三种情况中的一种)
				tmp[i][j]=getMinNumber(tmp[i+1][j], tmp[i][j+1], tmp[i+1][j+1])+1;
				return tmp[i][j];
			}else{//不会有重码
				int a=tmp[i+1][j];
				int b=tmp[i+1][j+1];
				tmp[i][j]=(a>b?b:a)+1;
				return tmp[i][j];
			}
		}	
	}
	/**
	 * 当源串匹配到最后一个字符时,目标串剩下的字符为:为从j开始到目标串结束
	 * 因为源串已经匹配结束,所以算空串变成目标串剩下的字符串的最少编辑值
	 * 如AB->ABCD,当源串匹配完B之后,目标串剩下CD,那么此时返回的值为:4
	 * 如B->BBD,返回值为3
	 * @param j
	 * @return
	 */
	public static int getNumber(int j){
		if(j==B.length)return 0;
		char c=A[A.length-1];
		int len=B.length;
		int lastLen=len-j;
		int num=0;
		for(;j<len;j++){
			if(c==B[j])num++;
		}
		return num+(lastLen-num)*2;
	}
	
	public static int getMinNumber(int a,int b,int c){
		a=a>b?b:a;
		return a>c?c:a;
	}
}
输入:

GGT
AGGY

输出:

3

MuleSoft+LangChain企业级AI编排实战:让大模型走进真实业务流水线 AI编排(AI Orchestration)是将大语言模型深度嵌入企业现有IT系统的关键技术路径,其核心在于解决模型与业务流程、数据源、权限体系及合规要求的工程化集成问题。它并非单纯调用LLM API,而是通过API网关治理、异构数据汇聚、语义对齐、链式推理与事务保障等机制,实现AI能力在CRM、ERP、数据库等生产环境中的稳定交付。MuleSoft提供企业级连接、安全与事务底座,LangChain承担Prompt工程、检索增强与结构化生成等AI脑力任务,二者协同构建可审计、可回滚、可降级的混合架构。本文聚 阅读详情

相关推荐

伪距单点定位算法原理以及利用最小二乘法计算实例

即该公式:建立下列代价函数满足最佳估值的条件为:即:可解得未知参数 X 的最佳估值由于每个可见卫星观测量的精度可能不一样,这时,需要对不同观测量赋予一个权重系数,称为加权。

qq_43381998的博客 1万+

DNA比对

题目描述 题目来源:2012蓝桥杯国赛 脱氧核糖核酸即常说的 DNA,是一类带有遗传信息的生物大分子。它由 4 种主要的脱氧核苷酸( dAMP、dGMP、dCMT 和 dTMP )通过磷酸二酯键连接而成。这 4 种核苷酸可以分别记为:A、G、C、T。 DNA 携带的遗传信息可以用形如:AGGTCGACTCCA······ 的串来表示。DNA 在转录复制的过程中可能会发生随机的偏差,这才最终造就了生物的多样性。 为了简化问题,我们假设,DNA 在复制的时候可能出现的偏差是(理论上,对每个碱基被复制时,

weixin_51032998的博客 1024

雷光联动自动化标校方法

动态标校需要利用动目标,在雷达和光电同时看到目标时记录光电的方位、俯仰,以及利用雷达给的目标信息计算的方位俯仰,手动记录两者的数值,多方位,多距离段记录,费时费力,且人工记录数据不全,计算容易出差错,耗费成本和精力太大。目标相距设备的水平距离 = acos(cos(设备纬度弧度值) * cos(目标纬度弧度值) * cos(设备经度弧度值 – 目标经度弧度值) + sin(设备纬度弧度值) * sin(目标纬度弧度值)) * 6378137;本发明涉及光电技术领域,安防领域,尤其涉及雷达光电动态标校等。

u013358093的博客 1579

蓝桥历年试题 DNA对比

【编程题】(满分27分) 脱氧核糖核酸即常说的DNA,是一类带有遗传信息的生物大分子。它由4种主要的脱氧核苷酸(dAMP、dGMP、dCMT和dTMP)通过磷酸二酯键连接而成。这4种核苷酸可以分别记为:A、G、C、T。 DNA携带的遗传信息可以用形如:AGGTCGACTCCA.... 的串来表示。DNA在转录复制的过程中可能会发生随机的偏差,这才最终造就了生物的多样性。 为了简化问题,我们假...

weixin_30951389的博客 300

Qwen-Image LoRA训练实战:从数据准备到异常修复的全流程解析

本文详细解析了Qwen-Image LoRA训练的全流程,从数据准备到参数优化再到异常修复。通过实战案例展示了如何利用LoRA技术微调Qwen-Image模型,提升中文场景下的图像生成质量,特别针对手脚生成异常等问题提供了有效解决方案。文章还分享了中文提示词优化技巧和高级训练方法,帮助开发者高效训练出高质量的LoRA模型。

lemon的博客 966

朱长江《偏微分方程简明教程》答案第一章部分

偏微分方程简明教程第一章习题1.1 第一章 习题1.1 1、指出下列方程的阶,并判断它是线性的还是非线性的。如果是线性的,说明它还是其次的: (1)ut−(uxx+uyy)+1=0;(2)ut−uxx+xu=0;(3)ut−uxxt+uux=0;(4)ux2+uuy=0;(5)utt−uxx+t2+x2=0;(6)ux+eyuy=0;(7)ut+uxxxx+1+u=0;(8)ux(1+ux2)−12+uy(1+uy2)−12=0;(9)∂4u∂x4+2∂4u∂x2∂y2+∂4u∂y4=0;(10)∂3u∂x

ymengm的博客 6760

第三届蓝桥杯决赛C语言组解析

一、【结果填空】 (满分5分)     1949年的国庆节(10月1日)是星期六。     今年(2012)的国庆节是星期一。     那么,从建国到现在,有几次国庆节正好是星期日呢?     只要答案,不限手段!     可以用windows日历,windows计算器,Excel公式,。。。。。     当然,也可以编程!     不要求写出具体是哪些年,只要一个数目!

YCH1035235541的专栏 1788

【FPGA教程案例96】控制案例1——基于FPGA的自适应PID控制器verilog实现

首先,我们复习下课程传统的PID控制器,往往存在调整速度较慢,超调过大等缺点。为了解决这个问题,在实际的PID应用中,需要实时的调整PID的控制参数,以达到加快PID控制速度,降低超调等目标。目前,自适应PID控制器,一般有误差反馈调整,模糊控制器调整,神经网络调整。其中模糊控制器调整,神经网络调整较为复杂,在入门案例中不做介绍,在本课程中,我们将实现相对略微简单点的基于误差反馈调整的自适应PID控制器。

FPGA/MATLAB学习教程/源码/项目合作开发 6201

2012年第三届蓝桥杯C/C++程序设计本科B组决赛 DNA比对(编程大题)

DNA比对 脱氧核糖核酸即常说的DNA,是一类带有遗传信息的生物大分子。它由4种主要的脱氧核苷酸(dAMP、dGMP、dCMT和dTMP)通过磷酸二酯键连接而成。这4种核苷酸可以分别记为:A、G、C、T。 DNA携带的遗传信息可以用形如:AGGTCGACTCCA.... 的串来表示。DNA在转录复制的过程中可能会发生随机的偏差,这才最终造就了生物的多样性。 为了简化问题,我们假设,DNA在复

A place to record sth. 1549

AI处理器组合

编号0-3的处理器处于同一个链路中,编号4-7的处理器处于另外一个链路中,不通链路中的处理器不能通信,如下图所示。- 如果申请处理器个数为1,则选择同一链路,剩余可用的处理器数量为1个的最佳,其次是剩余3个的为次佳,然后是剩余2个,最后是剩余4个。输出为组合列表,当array=[0, 1, 4, 5, 6, 7] ,num=1时,输出为[[0], [1]]- 如果申请处理器个数为2,则选择同一链路剩余可用的处理器数量2个的为最佳,其次是剩余4个,最后是剩余3个。任务申请1个处理器。

面试高手的博客 1万+

【YOLOv11工业级实战】15. YOLOv11海洋监测实战:珊瑚礁健康评估(水下图像增强|机器人搭载)

摘要:本文针对珊瑚礁健康评估的海洋监测需求,基于YOLOv11提出解决方案,聚焦水下色偏、悬浮物干扰、珊瑚形态复杂三大难题。引用全球珊瑚礁监测网络(GCRMN)标准,采用CoralNet数据集,通过Jaffe-McGlamery物理模型引导增强与悬浮物去除算法,在浑浊水域(能见度<5m)实现87.3%的健康珊瑚识别率,藻类误判率低至7.2%。介绍了以BlueROV2水下机器人和Jetson AGX Orin为核心的部署方案,结合水下SLAM定位技术,实现珊瑚健康的实时评估与三维覆盖率计算。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 1644

遗传算法求解旅行商问题(含python源代码)

本文介绍了一种基于遗传算法的旅行商问题(TSP)求解方法。该方法采用实数编码表示城市路径,通过初始化种群、计算适应度、选择、交叉和变异等步骤进行迭代优化。关键点包括:1) 使用部分匹配交叉保证路径合法性;2) 提供互换、逆转和插入三种变异操作;3) 适应度函数取路径距离的倒数;4) 采用轮盘赌选择策略。实验结果表明,该方法能有效求解TSP问题,但作者对适应度评估指标(最优/最差/平均适应度)的概念仍存疑问。文中还讨论了参数设置对算法性能的影响,并提供了完整的Python实现代码和可视化功能。

充满焦虑的大学生 3020

基于imx6ull平台opencv的图像采集、ffmpeg推流和Windows端拉流(多线程)

本文档是针对imx6ull平台`opencv`的图像采集、ffmpeg推流和Windows端拉流。首先创建一个线程`opencv`通过摄像头采集视频图像,接着再创建两个线程,其中一个线程获取采集的视频图像送给ffmpeg服务,另一个线程用于获取采集的视频图像并处理,处理完并在显示屏上显示,详细的流程请参看如下。

程小二的博客 1607

动态规划-最短编辑距离变形----DNA对比问题

问题描述: 脱氧核糖核酸即常说的DNA,是一类带有遗传信息的生物大分子。它由4种主要的脱氧核苷酸(dAMP、dGMP、dCMT和dTMP)通过磷酸二酯键连接而成。这4种核苷酸可以分别记为:A、G、C、T。 DNA携带的遗传信息可以用形如:AGGTCGACTCCA…. 的串来表示。DNA在转录复制的过程中可能会发生随机的偏差,这才最终造就了生物的多样性。 为了简化问题,我们假设,

知行合一,止于至善 2543

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

《DNA比对》蓝桥杯复赛试题

题目描述 脱氧核糖核酸即常说的DNA,是一类带有遗传信息的生物大分子。它由4种主要的脱氧核苷酸(dAMP、dGMP、dCMT和dTMP)通过磷酸二酯键连接而成。这4种核苷酸可以分别记为:A、G、C、T。     DNA携带的遗传信息可以用形如:AGGTCGACTCCA.... 的串来表示。DNA在转录复制的过程中可能会发生随机的偏差,这才最终造就了生物的多样性。     为了简化

学如逆水行舟,不进则退 3184

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

DNA 比对

题目描述脱氧核糖核酸即常说的DNA,是一类带有遗传信息的生物大分子。它由4种主要的脱氧核苷酸(dAMP、dGMP、dCMT和dTMP)通过磷酸二酯键连接而成。这4种核苷酸可以分别记为:A、G、C、T。     DNA携带的遗传信息可以用形如:AGGTCGACTCCA.... 的串来表示。DNA在转录复制的过程中可能会发生随机的偏差,这才最终造就了生物的多样性。    为了简化问题,我们假设,DNA...

qq_39370495的博客 3829

2013年蓝桥杯决赛试题

DNA配匹 题目描述         脱氧核糖核酸即常说的DNA,是一类带有遗传信息的生物大分子。它由4种主要的脱氧核苷酸(dAMP、dGMP、dCMT和dTMP)通过磷酸二酯键连接而成。这4种核苷酸可以分别记为:A、G、C、T。          DNA携带的遗传信息可以用形如:AGGTCGACTCCA.... 的串来表示。DNA在转录复制的过程中可能会发生随机的偏差,

午夜阳光 755

常用算法代码模板与题单 | E - 动态规划(更新于2026.10.7)

这篇文档其实是我自己学习路上的一份“复习笔记”。之前看了不少教程,零零散散记了一堆代码片段和小技巧,时间久了就容易忘,翻起来也麻烦。所以干脆花时间整理了一下,把常用的模板、容易踩的坑、还有一些个人觉得挺实用的小技巧都归到了一起。 如果你也在学类似的东西,或许能帮你省下一些翻找的时间;如果有哪里写得不清楚或不对,也欢迎随时指正交流。 希望这份整理也能对你有一点点帮助~ ✨

团爸讲算法 298

基因序列算法:编辑距离( Levenshtein 距离)和LD算法

Wagner–Fischer algorithm Wagner-Fischer 算法基于以下观察计算编辑距离:如果我们保留一个矩阵来保存第一个字符串的所有前缀和第二个字符串的所有前缀之间的编辑距离,那么我们可以通过填充填充来计算矩阵中的值矩阵,从而找到两个完整字符串之间的距离作为计算的最后一个值。 一个简单的实现,作为函数 Distance 的伪代码,它接受两个字符串,长度为 m 的 s 和长度为 n 的 t,并返回它们之间的 Levenshtein 距离,如下所示。请注意,输入字符串是单索引的,而

gongdiwudu的专栏 1万+

DNA对比 蓝桥杯决赛题目

【编程题】(满分27分)     脱氧核糖核酸即常说的DNA,是一类带有遗传信息的生物大分子。它由4种主要的脱氧核苷酸(dAMP、dGMP、dCMT和dTMP)通过磷酸二酯键连接而成。这4种核苷酸可以分别记为:A、G、C、T。     DNA携带的遗传信息可以用形如:AGGTCGACTCCA.... 的串来表示。DNA在转录复制的过程中可能会发生随机的偏差,这才最终造就了生物的多样性。  

Zxdon的专栏 2080

2012蓝桥杯C组本科决赛答案

题目: 脱氧核糖核酸即常说的DNA,是一类带有遗传信息的生物大分子。它由4种主要的脱氧核苷酸(dAMP、dGMP、dCMT和dTMP)通过磷酸二酯键连接而成。这4种核苷酸可以分别记为:A、G、C、T。 DNA携带的遗传信息可以用形如:AGGTCGACTCCA.... 的串来表示。DNA在转录复制的过程中可能会发生随机的偏差,这才最终造就了生物的多样性。 为了简化问...

weixin_30755393的博客 237

基于Python实现的遗传算法求TSP问题

本文探讨了使用遗传算法求解旅行商问题(TSP)的方法。实验报告详细介绍了遗传算法的基本要素(参数编码、初始群体、适应度函数、遗传操作)和实现步骤(选择、交叉、变异)。程序采用Python实现,包含距离计算、适应度评估、赌轮盘选择、交叉变异等核心功能。通过测试不同参数组合(种群规模、交叉/变异概率)对算法性能的影响,发现适当调整参数可提升求解质量。实验还提出了两种改进策略:块逆转变异和锦标赛选择法,以增强算法性能。该研究为TSP问题提供了一种有效的优化求解方案,展现了遗传算法在组合优化问题中的应用潜力。

毕业作品网站 6280

历届试题_DNA比对

脱氧核糖核酸即常说的DNA,是一类带有遗传信息的生物大分子。它由4种主要的脱氧核苷酸(dAMP、dGMP、dCMT和dTMP)通过磷酸二酯键连接而成。这4种核苷酸可以分别记为:A、G、C、T。 DNA携带的遗传信息可以用形如:AGGTCGACTCCA.... 的串来表示。DNA在转录复制的过程中可能会发生随机的偏差,这才最终造就了生物的多样性。 为了简化问题,我们假设,DNA在复制...

weixin_30539835的博客 142

2012年第三届蓝桥杯C/C++程序设计本科B组决赛 DNA比对

DNA比对 脱氧核糖核酸即常说的DNA,是一类带有遗传信息的生物大分子。它由4种主要的脱氧核苷酸(dAMP、dGMP、dCMT和dTMP)通过磷酸二酯键连接而成。这4种核苷酸可以分别记为:A、G、C、T。 DNA携带的遗传信息可以用形如:AGGTCGACTCCA…. 的串来表示。DNA在转录复制的过程中可能会发生随机的偏差,这才最终造就了生物的多样性。 为了简化问题,我们假设,DNA在复制的

Boom_1的博客 667
上一篇: 如何提高学习效率
下一篇: 随笔:设计一个栈结构,使得取出栈中最大值时间复杂度为O(1)
KeepThinking_
博客等级 码龄15年 50粉丝 39原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值