CC++实现DNA碱基序列的随机基因突变
一、遗传学相关知识
DNA是所有细胞生物的遗传物质,DNA分子是脱氧核糖核苷酸的多聚体,脱氧核糖核苷酸由碱基、脱氧核糖和磷酸连接起来构成。核糖和磷酸都是相同的,碱基有四种类型:A(腺嘌呤)、G(鸟嘌呤)、C(胞嘧啶)、T(胸腺嘧啶)。从而二级结构脱氧核糖核苷酸也有四种类型。脱氧核糖核苷酸组成了三级结构脱氧核糖核苷酸链,脱氧核糖核苷酸链经过交叉、盘旋形成了DNA分子。
DNA序列的遗传过程中会发生基因突变,基因突变表现为碱基序列发生变化。碱基序列会偶然发生三种类型的突变:替换、增添和缺失。发生突变的位置是随机的,各个位置发生突变的类型是随机的,并且突变后的新碱基也是随机产生的。
二、程序目的及要求
需要一个能够快速实现给定碱基序列随机基因突变的程序,包括三种突变类型:替换、增添和缺失。对于每一个突变点位,只考虑单个基因的突变和单次突变。我们给出需要突变的DNA碱基序列和突变点的数量,每次突变的点位是随机的,每个点位突变的类型也是随机的。程序的流程图如下:
![](/assets/blank.gif)
三、程序具体实现
1.输入
需要用户输入一段碱基序列和突变点的数量(应小于序列的长度),输入界面如图:
![](/assets/blank.gif)
2.随机突变
(1)随机突变点位的产生
首先,根据碱基序列(长度为m)和突变点的数量n,其中n<m,用随机数函数生成n个用于确定突变点位的随机数(
,
)和n个用于确定每个突变点位突变类型的随机数
(
)。
(2)突变过程
通过链表,从左到右遍历整个碱基序列,根据产生的随机突变点位和每个点位的突变类型进入相应的突变程序板块。大致流程图如下:
![](/assets/blank.gif)
替换:将该点位的碱基随机改变为与其不同的碱基
增添:在该点位之后随机添加一个任一类型的碱基
缺失:将该点位的碱基删除
(3)过程记录
运用链表,记录每一突变点位的突变类型,并做统计。
3.输出
输出每一突变点位及其突变类型、新的碱基序列和统计得到的各突变类型的总数。输出界面如图:
![](/assets/blank.gif)
四、源代码
#define _CRT_SECURE_NO_WARNINGS#include <iostream>
#include <fstream>
using namespace std;
#include <vector>
#include <stdlib.h>
#include <time.h>
#include <string>int Exchange_count = 0;
int Delete_count = 0;
int Add_count = 0;
int len = 0;void change(vector<char>& ba,int position,int k)//Random base replacement function
{int kind = 0, na = 0, j = 0;char ch;srand(time(0));int nk[2];for (j = 0; j < 2; j++)nk[j] = rand() % 4;switch (k) {case 0://substitution{kind = nk[0];switch (kind) {case 0:ch = 'A';case 1:ch = 'T';case 2:ch = 'G';case 3:ch = 'C';}ba[position] = ch;Exchange_count++;break;}case 1://deletion{ba.erase(ba.begin() + position);Delete_count++; break;}case 2://addition{kind = nk[1];switch (kind) {case 0:ch = 'A';case 1:ch = 'T';case 2:ch = 'G';case 3:ch = 'C';ba.insert(ba.begin() + position, ch); }Add_count++;break;}}
}int main()
{vector<char> base;string str;FILE* pf;int num, amount, rans[256], k[256], i = 0;srand(time(0));cout << "Please input the original base sequence:" << endl;cin >> str;cout << "Please input the amount of mutain point:" << endl;cin >> num;const char* str2 = str.c_str();amount = strlen(str2);ofstream outfile("base.txt", ios::app);outfile << "\n"; outfile << num; outfile << "/"; outfile << amount;outfile << "\n"; outfile << str;for (i = 0; i < num; i++)rans[i] = rand() % amount;//Generate random numbers of points of mutationfor (i = 0; i < num; i++)k[i] = rand() % 3;//Generate random numbers of types of mutationprintf("The place and type of every mutation's point:\n");for (i = 0; i < num; i++){switch (k[i]){case 0:printf("%d-REP ", rans[i]); break;case 1:printf("%d-DEL ", rans[i]); break;case 2:printf("%d-ADD ", rans[i]); break;}} printf("\nThe new base sequence:\n");for (int i = 0; i <= str.length(); i++){base.push_back(str[i]);//Create linked list}len = base.size();for (int i = 0; i < num; i++)//Random replacement of generated pointschange(base,rans[i],k[i]);for (vector<char>::iterator it = base.begin(); it != base.end(); it++)cout << *it;cout << endl;cout << "Replace_count:" << Exchange_count << endl;cout << "Delete_count:" << Delete_count << endl;cout << "Add_count:" << Add_count << endl;string str3(base.data(), base.size());outfile << "\n";outfile << str3;outfile.close();return 0;
}
五、程序总结
程序用C和C++实现一段给定碱基序列随机基因突变过程,模拟了生物学中简单基因突变的过程。本程序可以方便一些遗传学研究领域中数据预处理使用,比如计算编辑距离、基因测序等方面。这体现了计算机学科与其他学科的交叉与融合。
CC++实现DNA碱基序列的随机基因突变相关推荐
- 基因突变不是随机的?!Nature最新论文挑战进化论
博雯 丰色 发自 凹非寺 量子位 | 公众号 QbitAI 基因突变,不是随机的? 这与当前教材里的结论,截然相反. 还记得中学生物课本里一众白眼果蝇.白毛小牛.或者长颈鹿.短颈鹿吗? 在这些例子中, ...
- 基于影像基因的肺结节分割、肺癌分类分期、CT影像预测基因突变 --董云云 论文阅读
一.背景.问题引入 肺癌是世界范围内发病率和死亡率最高的恶性肿瘤之一.根据世界卫生组织的调查结果显示,世界范围内每年因患肺癌死亡的病例数不低于 160 万 .早期肺癌的诊断较为困难,约 75%的患者在 ...
- 遗传和基因突变对神经网络训练的好处
遗传告诉我们数据和数据之间是要有关系的,且每个数据的大部分特征相似, 就和你长得一定相似你爸爸 而不是我们所随机的数据, 重要结论数据是要特征数据 基因突变,可以制造特征数据,来是模型更加快速的完成, ...
- Nature:将基因测序带到前所未有的精度,人类首次具有在任何组织中研究基因突变的能力
撰文 | 王聪 编辑 | nagashi 排版 | 水成文 我们人体内的组织由分裂细胞和非分裂细胞组成.干细胞在我们的一生中都会不停自我更新,并负责提供非分裂细胞以保持正常身体运转.我们体内的绝大多数 ...
- 谷歌跨界医学新动作:基因突变定位模型又更!新!了!
Root 编译自 Google Research Blog 量子位 出品 | 公众号 QbitAI 去年12月,谷歌大脑发布了快速找出基因突变位点的深度学习模型DeepVariant,用图像识别的思路 ...
- 【评测】iPS细胞株-Alzheimer‘s disease (AD),LDLR和APOE4基因突变
iPS细胞系,尤其是患有某种遗传性疾病患者的细胞来源的iPS细胞系,是疾病研究.药物筛选的有力工具.我们为研究者提供其他实验室制备的iPS细胞系,加速你的研究. iPS细胞株名称 捐献者性别 捐献者年 ...
- 最新研究:宇航员血液样本中个个都带基因突变
点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送 詹士 发自 凹非寺 量子位 | 公众号 QbitAI 都知道上太空遇到的辐射,肯定对人体 ...
- 两篇Nature最新研究成果:令细胞衰老的基因突变作用机制的新理论
来源:生物通 研究人员发现,基因突变在人的一生中是缓慢积累的,从而导致70岁后血液形成发生巨大变化,这为衰老提供了一种新的理论. 一项新的研究揭示了贯穿一生.在血液干细胞中缓慢积累的基因变化可能是导致 ...
- 《基因突变和基因重组》在线教学案例
<基因突变和基因重组>在线教学案例 石家庄市第四十九中学 赵志国 一.教材内容分析 <基因突变和基因重组>是必修二第五章第一节的内容.这节课的内容时主要是通过常态下的教学教材, ...
最新文章
- WSAAsyncSelect模型
- orcle 删除表报正在使用_oracle 删除表空间错误 提示:ora-02429:无法删除用于强制唯一/...
- 每天一道LeetCode-----有效回文串
- sql server 2008安装_性能不够?基于时序数据库的Zabbix 5.2安装指南
- es6 async函数实例:按顺序完成异步操作
- 帮你找到了几份非公开的大数据报告,错过再无,手慢的人抓紧
- linux中shell数组的使用和建立
- 说说封杀BT的几个理由
- 《Head First设计模式》 读书笔记05 工厂模式(二)
- chinapub读书会第10期:机器学习与人工智能 6月25日相约阿里云+优客工场
- YUV RGB 常见视频格式解析
- c++中struct构造函数
- 链表Linked List
- 开篇鸿蒙谁为情种,曹雪芹 红楼梦引子 开辟鸿蒙,谁为情种?都只为风月情浓。 这句话什么意思 只要这句话的解释...
- YYC采集工具python语言精简方便实用的视频采集工具
- SQL中实用的小技巧
- 顽石互动创始人吴刚:走高品质的发展道路
- 逻辑卷管理LVM(logical volume manager)
- 使用window的SMB协议实现局域网文件传输——java版
- 做出刷屏文字的6大哲学