私は最近、DNA 鎖の 2 つのシーケンス (長くなる可能性があります) 間の類似性 (変更された編集距離) を計算する動的プログラムを作成しました。
私のコードは次のようなものです(割り当てであるため、実際のコードではありません):
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 でコンパイルしました。
上記のコードが非常に遅いのはなぜですか?