具有大序列的程序错误(C)

时间:2016-01-25 00:44:28

标签: c algorithm

我正在尝试用C编写Waterman算法。 现在,当序列的长度超过35时,程序就会滞后。 我不知道从哪里开始寻找,尝试但没有解决任何问题。

以下是代码:

{{1}}

1 个答案:

答案 0 :(得分:1)

由于null使用gen_random终止s[len] = 0;中的序列,因此应为每个序列分配1个字节:

X = malloc(sizeof(*X) * (length1 + 1));
Y = malloc(sizeof(*Y) * (length2 + 1));

但是,既然您为其他变量定义了可变长度数组,那么您也可以将它们定义为:

char X[length1 + 1], Y[length2 + 1];

然而另一件事导致我的笔记本电脑崩溃:您的嵌套循环从i = 0迭代到i <= mj = 0j <= n。这一步太多了,你将界限超出L

以下是更正后的版本:

for (i = 0; i < m; i++) {
    for (j = 0; j < n; j++) {

生成的代码执行速度非常快,其复杂度在时间和空间上均为O(m*n),但mn35处相当小。它运行时间不到50毫秒,1000 x 1000。

是否正确实施Smith-Waterman算法是另一个问题。