#include <stdio.h> #include <stdlib.h> #include <string.h> #include <malloc.h> #include <windows.h> #include <time.h> #define MAX 101; int kmp( char *A ,char *a) { /*函数功能:用kmp算法进行搜索*/ int next[MAX] = {0} ; int n,m; int lA = 0,la = 0 ; int x = 1,y = 0 ; int i,j,k ; next[1] = 0 ; i = 1 ; j = 1 ; lA = strlen(A); la = strlen(a); for(m=la-1; m>= 0 ;m --) a[m+1] = a[m] ; for(m=lA-1; m>= 0 ;m --) A[m+1] = A[m] ; while ( x <= la) /*核心部分*/ { if( a[x] == a[y] || y == 0 ) { x ++ ; y ++ ; if( a[x] == a[y]) next[x] = next[y]; else next[x] = y ; } else y = next[y] ; } while ( i<=lA && j <= la ) { if(A[i] == a[j] || j == 0 ) { i ++ ; j ++ ; } else j = next[j] ; } if ( j> la) return i-j+1 ; else return -1 ; } int main(void) { char *DNA; char ln[200]; char st[200]; char temp[101]; FILE *f; clock_t start, finish; /*需要时间计算(可删除)*/ int i,j,n; double needtime; start = clock(); DNA = (char *)calloc(1000000*200,1); f = fopen("solexa_100_170_1.txt","r"); i = 0; while (1) { if (NULL==fgets(ln,200,f)) break; if (1==sscanf(ln,"%199[ACGT]",st)) { strcpy(DNA+i*200,st); i++; if (i>=1000000) break; } } scanf("%s",temp); for(i=0;i<1000000;++i) { j = kmp(DNA+200*i,temp); /*调用Kmp函数*/ if ( -1 == j) printf("Not Soulation!!! "); else printf("(%d,%d)\n",i,j); } fclose(f); n = i; for (i = 0;i<n;i++) { } free(DNA); finish = clock(); needtime = (double)(finish - start); printf("%f ms\n", needtime ); system("pause"); return 0; } 主函数里调用txt文档 |
|
在线着急等!
|
|
100分 |
你要说明你的算法出了什么问题, 或者报了什么错才行, 其他人才好帮助你.
1. 调试看文件读取完成后, 文件内容是否都读取到. |
测试驱动
|
|
什么问题?
|