C++ では、ネストされた for ループを使用して、同じ名前を持つオブジェクトのペアを一致させています。プログラムの実行には長い時間がかかると予想していましたが (数千の文字列を比較すると)、プログラムが進行するにつれて、プログラムの実行速度が遅くなります。最初の 20% の文字列を数分で比較しますが、約 30% に達すると、1 つの文字列を他の文字列と照合するのに約 60 秒かかります。
フィールド「feas」、「eff」、「numIdeas」の適切な値を含む「新しいデータ」と、一致する「新しい」パートナーと共通の「データ」フィールドを共有する古いデータがあります。新しいデータと古いデータは同じ順序ではなく、現在の順序に意味があるため、並べ替えることができません。最善の方法は、それを「力ずく」で通すことだと思いました。私が言ったように、それらは特定の順序ではないので、ループ反復の極端な減速は私を混乱させました. 私が知る限り、速度は一定に保たれるべきです。
for(int i=0; i< newDO.getNumItems(); i++)
{
Item newItem = newDO.getItem(i);
for(int k=0; k < oldDO.getNumItems(); k++)
{
Item oldItem = oldDO.getItem(k);
if(oldItem.getType()==1)
{
bool same = testStrings(oldItem.getData(), newItem.getData());
if(same)
{
oldItem.setFeas(newItem.getFeas());
oldItem.setEff(newItem.getEff());
oldItem.setNumIdeas(newItem.getNumIdeas());
break;
}
}
}
}
testStrings
私はこの関数を書きませんでしたが、実際の問題は見られませんでした。この関数は、文字列 (約 5 ~ 20 文字) を取得し、スペースと「(」を取り除きます。
(私が理解しているように、私の前の人は、それらを解析している関数が一部のデータから '(' を適切に削除していないことに気付く前に、何千ものファイルをインポートしていました。文字列は等しかった)。
bool testStrings(string s1, string s2)
{
string s1def ="";
for(int i=0; i<s1.length(); i++)
{
if(s1[i]!=' ' || s1[i]!=')'){s1def+=s1[i];}
}
string s2def = "";
for(int i=0; i<s2.length(); i++)
{
if(s2[i]!=' ' || s2[i]!=')'){s2def+=s2[i];}
}
if(s1def == s2def){return true;}
else{return false;}
}
どんな洞察も本当に役に立ちます。
ありがとう。