DNA序列分析
来源:互联网 发布:mac字体安装后找不到 编辑:程序博客网 时间:2024/05/12 05:55
刚刚参加了2013东北地区数学建模,完成了B题,第一次真正意义上接触到了大数据处理的工作,时间与空间的相互转化关系真的只有通过实践才能切身体会到,此言得之。现在记录代码如下:
#define _CRT_SECURE_NO_WARNINGS#include <Windows.h>#include <iostream>#include <stdio.h>#include <stdlib.h>#include <malloc.h>#include <math.h>#include <vector>#include <cstdlib>#include <time.h>#define MAX 4#define SIZE 1000#define MAXNODENUM 1000000//***************************////结构体定义//***************************//typedef struct Result{ int Position; struct Result *nextone;}List_t;typedef struct TrieNode { List_t *head; int isStr; struct TrieNode *next[MAX];}Trie;Trie* getNewNode() { Trie *Block = (Trie*)malloc(sizeof(Trie) ); Block->head = NULL; return Block ;}//***************************////建立四字字典树//***************************//void insert(Trie *root, const char *s, int cishu,int xuhao){ if (root == NULL || *s == '\0') return; int i; Trie *p = root; while (*s != '\0') { if (p->next[*s - 'A'] == NULL) { Trie *temp = getNewNode(); for (i = 0; i<MAX; i++) { temp->next[i] = NULL; } temp->isStr = false; p->next[*s - 'A'] = temp; p = p->next[*s - 'A']; } else { p = p->next[*s - 'A']; } s++; } Insert_List(&(p->head), cishu,xuhao);}//***************************////建立终端链表//***************************//void Insert_List(List_t* *head, int num,int xuhao){ List_t *p = *head; List_t *node = (List_t *)malloc(sizeof(List_t)); node->Position = num; node->nextone = *head; *head = node;}//***************************////显示结果//***************************//void Show_List(List_t *head){ List_t *p; p = head; int weizhi,order; while (p) { weizhi=p->Position; order=ceil(weizhi/100); weizhi=weizhi-order*100; printf("[%d]",order); printf("%d ",weizhi); p = p->nextone; }}//***************************////查询相关字符串//***************************//void search(Trie *root, const char *s){ char panduan; Trie *p = root; while (p != NULL&&*s != '\0') { p = p->next[*s - 'A']; s++; } Show_List(p->head);}//***************************////主函数//***************************//int main(){ FILE *fp; char filename[100]; char str[1000]; char buf[1000]; char panduan; double BuildStart,BuildFinish; //索引建立开始时间与结束时间 double SearchStart,SearchFinish; //查询建立开始时间与结束时间 int i = 0; int j = 0; int k = 0; long long int v = 0;int point=0; char buffer[SIZE]; char search1[100]; int order = 0; fp=fopen("chuli.txt", "rt"); //文件指针指向数据文件 if(fp==NULL) { printf("cannot open file\n"); return 0; } printf("Input the k\n"); scanf("%d", &k); printf("Input the search string\n"); scanf("%s", search1); for(i=0;i<k;i++) //将输入的字符串进行映射处理 { panduan=search1[i]; switch (panduan-'A') //将A、C、G、T映射成A、B、C、D { case 0: search1[i]=search1[j]; break; case 0x2: search1[i]='B'; break; case 0x6: search1[i]='C'; break; case 0x13: search1[i]='D'; break; default : break; } } Trie *root1 = getNewNode(); for (i = 0; i<MAX; i++) { root1->next[i] = NULL; } BuildStart=(double)clock(); //获取索引建立开始时间 for (v = 0;v < 1000000;v++) //建立四字字典树 { fgets(str,1000,fp); sscanf(str,"%s",str); j = 0; while (str[j] != '\0') { for (i = 0; i < k; i++) { buffer[i] = str[i + j]; } buffer[k] = '\0'; j++; point++; insert(root1, buffer,point,v+1); } point+k; } BuildFinish=(double)clock(); //获取索引建立结束时间 SearchStart=(double)clock(); //获取查询开始时间 search(root1, search1); //查询字符串 SearchFinish=(double)clock(); //获取查询结束时间 fclose(fp); printf("buildtime:%f\t",(BuildFinish-BuildStart)/1000); //打印索引建立时间 printf("searchtime:%f",(SearchFinish-SearchStart)/1000); //打印查询时间 return 0;}
0 0
- DNA序列分析
- DNA序列
- DNA序列
- DNA序列
- DNA序列
- DNA序列
- DNA序列
- DNA序列
- *DNA序列
- DNA序列
- DNA序列
- DNA序列
- Sequencher_v4.1.4 DNA 序列分析的工业标准软件
- Sequencher_v4.1.4 DNA 序列分析的工业标准软件
- DNA序列(DNA Consensus String)
- DNA序列剖面
- 预定义DNA序列
- 1390 DNA序列
- Activity的生命周期
- centos7 搭建ftp服务器
- 第七题
- github常见操作和常见错误!
- GCD的四种队列,两种函数和六种组合
- DNA序列分析
- C# CLR的执行模型
- Effective STL 条款2
- Qt 输入提示
- 第二题
- 第三题
- cordova 使用
- GCD刷新UI
- 第六题