C++ STL 文字列の部分文字列を検索するための find メソッドが、文字列を単純にO(n)
渡すよりも高速である理由に少しショックを受けました。ここに 2 つの異なる関数があります: で見つかった 2 番目の関数が最初の関数 (十分に最適化されている) よりも速いのはなぜstr1
ですかstr2
? 最初の関数がわずかに異なるタスクを実行することはわかっていますが、それでも と を渡すだけでstr1
ありstr2
(O(n))
、2 番目の関数はO(n^2)
で検索str1
する必要がある場合がありますstr2
。ほんとに?なんで?皆さん、何か考えはありますか?前もって感謝します。
PS関数はより大きなプロジェクトの一部です。私のコードでは、2 つの文字列を比較するために何度も呼び出されます。2 番目の関数を使用すると、コード全体の実行時間はほぼ半分 (135 秒 VS 235 秒) になります。
bool Is_Included1(string str1, string str2)
{
size_t i,s;
s=str1.size();
if (s<=str2.size())
{
for (i=0;i<s;i++)
if (str1[i]!=str2[i])
return false;
return true;
}
return false;
}
bool Is_Included2(string str1, string str2)
{
size_t i;
if (str1.size()<=str2.size())
{
i=str2.find(str1);
if (i==0)
return true;
else
return false;
}
return false;
}