基于优化递归算法的分子量分解问题

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于优化递归算法的分子量分解问题

摘要:

本文讨论的问题是:在实验室拥有或不拥有计算机的情况下,如何将已知分子量x 的蛋白质分解成18种已知分子量的氨基酸的问题,并满足蛋白质含氮量在15%—17%的物理性质。

在实验室有计算机的情况下,本文首先考虑了穷举算法,该问题就等效为十八元一次方程求整数解的问题,表示为

∑==18

1

)](*)([i x i root i a

每种氨基酸构成蛋白质数量root(i)的上限为])

([

i a x

+1,取x 最大为1000时,有1610*8154.2种,运算量过大难以实现。

我们又考虑了递归算法,即从分子量最大的第18种氨基酸开始考虑,第18种氨基酸分子构成蛋白质的个数]])

18([

,0[)18(a x

root ∈,对root 进行分类取值,在取值已知的情况下再考虑第17种氨基酸,此时分子量减去第18种氨基酸总分子质量,得到新的分子量,将大大减少计算量。抽象归纳为)(i root 的取值围如下:

)17,...,2,1]()

())

(*)(([

)(018

1

=-

≤≤∑+=i i a k root k a x i root i k

该算法同样满足含氮量的约束条件。我们借助C 语言编写程序并对程序进行优化,大大加快了运行速度。

在实验室无计算机的情况下,由氨基酸的结构通式得出,每个氨基酸都存在结构

----CO CH NH ,分子量为56。本文将18种氨基酸的分子量都减去56,得到18

种氨基酸R 基的分子量。先将任一分子量除以56取整,得到构成该蛋白质的氨基酸数目的围(即]56

[

1x

b ≤≤),再根据b 的取值进行分类讨论从而选择R 基,后根据蛋白质含氮量对结果进行验证,在人工的情况下,此方法相对于递归法大减少了计算量。

关键词:分子量分解问题 递归优化法 含氮量 C 语言 结构通式

1、问题重述

生命蛋白质是由若干种氨基酸经不同的方式组合而成。在实验中,为了分析某个生命蛋白质的分子组成,通常用质谱实验测定其分子量x (正整数),然后将分子量x 分解为n 个已知分子量a[i](i=1,.......,n)氨基酸的和的形式。某实验室所研究的问题中:n=18, x ≤1000,a[i](i=1,.......,18)分别为57, 71, 87, 97, 99, 101, 103, 113, 114, 115, 128, 129, 131, 137, 147, 156, 163, 186。要求针对该实验室拥有或不拥有计算机的情况,对如何分解分子量x 作出解答,即针对任意一个分子量x 具体给出由哪些a[i](i=1,.......,n)氨基酸组成。

2、问题分析

题目中给出18种氨基酸分子量,要求解出已知分子量的蛋白质由哪几种氨基酸组成。初步分析,这是十八元一次方程求整数解的问题,方程形式为

∑==18

1

)](*)([i x i b i a

其中x 为已知量,)18,...,

2,1)((=i i a 为18种氨基酸分子量,未知数)18,...,2,1)((=i i b 为组成蛋白质的每种氨基酸的个数。

3、模型假设

(1)假设氨基酸组合形成蛋白质时不脱水。

(2)假设蛋白质中肽键不存在多键或成环情况,两个氨基酸之间只形成一条肽键。 (3)假设每种氨基酸出现的概率都相同。

4、符号设定

)(i a — 第i 种氨基酸的分子量; )(i root — 第i 种氨基酸的数量;

)(_i number N — 第i 种氨基酸分子中氮原子的个数; x — 蛋白质分子量;

)(i r — 第i 种氨基酸R 基的分子量; b — 蛋白质中所含氨基酸的总数;

5、模型建立与求解

5.1实验室有计算机时的模型建立

5.1.1穷举法模型

我们首先考虑用穷举算法求解方程,根据上文符号设定,该方程可以表示为

∑==18

1

)](*)([i x i root i a

其中]])

([

,0[)(i a x

i root ∈且)(i root 为整数。利用穷举法,对每个)(i root 分别取0,1,…,

])

([

i a x

,找出符合上述方程的每个)(i root 的取值,所得的每组解的集合即为最终解。穷举算法利用MATLAB 实现,程序代码见附录一。

用上述算法,我们发现,如果x 的取值太大,MATLAB 警告“busy ”,程序无法运行。假如1000=x ,求出每一个)(i root 的最大值,如表一所示:

表一 )(i root 最大值

运算次数为1610*8154.2次,MATLAB 无法进行如此大数量级的运算,导致可求解的x 具有很大的局限性。所以我们建立下文中的新模型,从而减少运算次数,提高运算速度,增强运算可行性。

5.1.2递归法模型

为减少冗余次数,我们设计思路如下:从分子量最大的氨基酸开始考虑,初步确定第18种氨基酸分子个数后,对剩下17种氨基酸的确定,则不需要再用x 作为衡量标准,而可以将蛋白质中所含第18种氨基酸总分子质量减掉后,得到新的分子量,则剩下的17种氨基酸可以用新的分子量来确定。按照此思路分析,)(i root 的新取值围如下:

)17,...,2,1]()

())

(*)(([

)(018

1

=-

≤≤∑+=i i a k root k a x i root i k

利用这种模型,可以有效减少运算次数,使程序可以顺利运行。

相关文档
最新文档