| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3620 人关注过本帖
标题:[字符串匹配问题]【基于DNA的索引】一个用C语言解决生物信息学问题的例子, ...
只看楼主 加入收藏
赵裕
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2015-4-1
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:6 
[字符串匹配问题]【基于DNA的索引】一个用C语言解决生物信息学问题的例子,求指导
1我都目的是在一个基因序列中进行模式串匹配,找到所有能匹配的模式串,并输出其位置
举个例子:给定一个DNA序列,这个系列只含有4个字母ATCG,如 S =“CTGTACTGTAT”。给定一个整数值k,从S的第一个位置开始,取一连续k个字母的短串,称之为k-mer(如k= 5,则此短串为CTGTA), 然后从S的第二个位置, 取另一k-mer(如k= 5,则此短串为TGTAC),这样直至S的末端,就得一个集合,包含全部k-mer 。 如对序列S来说,所有5-mer为
{CTGTA,TGTAC,GTACT,TACTG,ACTGT,TGTAT}
通常这些k-mer需一种数据索引方法,可被后面的操作快速访问。例如,对5-mer来说,当查询CTGTA,通过这种数据索引方法,可返回其在DNA序列S中的位置为{1,6}
2现在问题的规模很大,我截取了前几百个数据放在附件中了,我现在能做的就是把这些信息分成两类:表示生物物种信息的行和表示碱基序列的行,因为我觉得分开后查找应该更方便;
3可是接下来如何用C语言建立一个索引并使用索引进行查找我就犯难了,就算是用最土的暴力匹配我也不知如何嵌入,
希望编程能力强的大神指点指点,使建立使用索引的时间复杂度和空间复杂度尽量小,用时尽量少,所占用的内存尽量少;
我觉得自己的问题主要是不懂数据结构,可能要用到链表什么的,如果大神看过纳瓦罗的《柔性字符串匹配》又懂数据结构,这个问题一定不再话下吧!!!

附件.rar (10.12 KB)
程序代码:
# include "stdio.h"
# include "stdlib.h"//stdlib 头文件即standard library标准库头文件。stdlib.h里面定义了五种类型、一些宏和通用工具函数。
# include "time.h"

# define N 5;

void PreIndex();//建立索引文本,目录文本
void CatalogArray();//将目录文本存入目录
void IndexArray();//将索引文本存入目录
void Search();//进行查找
int main()
{
    //PreIndex();

    for (i=0; i<10000;i++)
    {
        CatalogArray();
        IndexArray();
        Search();
    }
    printf("结束");
    return 0;
}


void PreIndex()
{
    FILE * fpIndex, * fpCatalog, * fpsource1, * fpsource2;
    fpCatalog = fopen("I:\\Catalog.txt","w");
    fpIndex = fopen("I:\\Index.txt","w");
    if ((fpsource1=fopen("I:\\c实验\\solexa_100_170_1.fa","r")) == NULL)
    {
        printf("Can't open the solexa_100_170_1.fa!\n");
        getchar();
        exit(-1);
    }
    if ((fpsource2=fopen("I:\\c实验\\solexa_100_170_2.fa","r")) == NULL)
    {
        printf("Can't open the solexa_100_170_2.fa!\n");
        getchar();
        exit(-1);
    }
    int i;
    char ch;
    char str[101];
    
    for (i=0; i<500000; i++)
    {
        while ((ch=fgetc(fpsource1)) && (ch<'A' || ch>'T'))
            putc(ch,fpCatalog);
        fputc(ch,fpIndex);
        fgets(str,101,fpsource1);
        fputs(str,fpIndex);
    }
    for (i=0; i<500000; i++)
    {
        while ((ch=fgetc(fpsource2)) && (ch<'A' || ch>'T'))
            putc(ch,fpCatalog);
        
        fputc(ch,fpIndex);
        fgets(str,101,fpsource2);
        fputs(str,fpIndex);
    }
    fclose(fpIndex);
    fclose(fpsource1);
    fclose(fpsource2);

}
void CatalogArray()
{
    FILE * fpIndex = fopen("I:\\c实验\\最后攻坚\\Index.txt","r");
    FILE * fpCatalog = fopen("I:\c实验\最后攻坚\\Catalog.txt","r");
    int i;
    char s[101],p[N];
    for(i=0; i<1000000; i++)
    {
        fgets(s,101,fpCatalog);
        
        
    }
}
搜索更多相关主题的帖子: 信息学 字符串 C语言 字母 
2015-05-01 02:14
pycansi
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:5
帖 子:418
专家分:1060
注 册:2012-7-26
收藏
得分:10 
用 Python 简单实现了下,在 C 中主要是要实现一个 hash 表

程序代码:
source_actg = 'CTGTACTGTAT'
result_hash = {}

def main (k):
    s=0
    e=k
    for i in range (len(source_actg)-(k-1)):
        clip = source_actg[s:e]
        s+=1
        e+=1
        if 'no' == result_hash.get (clip, 'no'):
            result_hash[clip] = [s]
        else:
            result_hash[clip] += [s]


结果
>>> main (5)
>>> result_hash
{'ACTGT': [5], 'CTGTA': [1, 6], 'TACTG': [4], 'GTACT': [3], 'TGTAC': [2], 'TGTAT': [7]}


莫问前尘有愧,但求今生无悔
2015-05-01 12:07
pycansi
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:5
帖 子:418
专家分:1060
注 册:2012-7-26
收藏
得分:0 
字符串匹配的话有不少算法
可以参考:http://dsqiu.


莫问前尘有愧,但求今生无悔
2015-05-01 12:21
erty1001
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:4
帖 子:331
专家分:1433
注 册:2014-8-31
收藏
得分:10 
这种情况直接读KMP算法 相信对你有用
2015-05-01 12:37
赵裕
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2015-4-1
收藏
得分:0 
回复 4楼 erty1001
KMP算法实际速度很低,实现成本却很大
2015-05-02 18:08
赵裕
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2015-4-1
收藏
得分:0 
回复 3楼 pycansi
谢谢你给的链接,很有用
2015-05-02 18:09
赵裕
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2015-4-1
收藏
得分:0 
回复 2楼 pycansi
你这是Python吧,我现在只会C,所以实现也只能用C
2015-05-02 18:11
快速回复:[字符串匹配问题]【基于DNA的索引】一个用C语言解决生物信息学问题的例 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.031562 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved