暑期学习之植入(l,d)模体发现PMSP性能优化(五)

4 篇文章 0 订阅
2 篇文章 1 订阅

上周比着论文里的PMSP算法,自己用c++实现了(9,2)模体的代码,一开始还挺高兴,跑20秒,但是老师说只需要0.5秒,打击还是挺大的,周一周二自己改了改,改到1.7秒,把改的过程贴一下吧。

PMSP 0.0

(9,2):20s

PMSP 1.0

改进方式:在大C里循环查找模体时,一旦某一行不存在与初始模体小于d的子串,则退出该模体的循环,直接跳到下一模体的循环

 

效果:

(9,2):4s

(11,3):77s

PMSP 2.0

改进方式:在计算海明距离的时候,给他一个限定值,一旦超出此值,break掉。

 

效果:

(9,2):2.96s

(11,3):55s

 

 

PMSP 3.0

改进方式:观察到结果有重复,于是打算在循环记录第一行的时候,记录下已经循环的第一行的子串,如果第一行再循环后面出现与之海明距离小于d的子串,直接跳过。

 

效果:

好像是改进方式不太对,少计算了一些模体,不能这样做.....3.0改进以失败告终,但是思路好像有点道理,再仔细琢磨一下。

 

 

PMSP 4.0

改进方式:把3.0的改进方式放到每一个判断之前,应该才是正确的。

 

效果:

再每个模体循环之前加判断,时间变得更慢了.....此法行不通...

 

PMSP 5.0

改进方式:在执行海明距离的判断的时候两个小于或者等于d统一成 小于d+1

 

效果:

(9,2):1.8s

(11,3):29s

PS:没想到这么一个小小的改进竟然会快这么多

 

 

PMSP 6.0

改进方式:在形成大C的时候,如果大C的某一行是空值,则退出次次循环直接进入下一次循环。

效果:

(9,2):1.7s

(11,3):29s

基本上没怎么加快速度,因为好像基本上大C的每一行都不是空值。

 

基本上,改到这,算是到头了。再怎么优化都不会进步太多。

于是...在导师的帮助下,把整个算法的构成打乱,用二进制给ACGT重新编码,进行新的算法的开始,总体框架还是不变的,但是处理的过程全部为数字。

效果很明显,(9,2)模体只需要0.45秒,(11,3)也就5秒,整个过程下来,对我的冲击力还是挺大的,第一次感觉算法不只是改改循环结构改改if判断,还有在字符串的结构上直接改变,受益匪浅。代码就不贴了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值