我最近编写了一个动态程序来计算两条 DNA 链序列(可能很长)之间的相似度(修改后的编辑距离)。
我的代码就像(不是实际代码,因为它是一个分配):
while(!file.eof){
string line;
int sizeY, sizeX;
//get first strand
getline(db, line)
//second strand
getline(db, line)
double ** ary = new double[sizeY];
//loop to initialize array
for(i to sizeY)
{
for(i to sizex)
{
pair<string,string> p,d;
p.first = "A";
p.second = "T";
d.first = "G";
d.second = "C";
//do some comparisons
}
}
}
上面的代码在大约 2400 行的文件上完成大约需要 40 分钟。如果我将 p,d 和赋值对移到嵌套的 for 循环之外并运行完全相同的文件,它将在大约 1 分钟内完成。
我在其他线程中读到性能几乎相同。我还用-O2 编译了它。
为什么上面的代码这么慢?