以下の関数の時間の複雑さを分析しようとしています。この関数は、文字列が他の文字列で構成されているかどうかを確認するために使用されます。
set<string> s; // s has been initialized and stores all the strings
bool fun(string word) {
int len = word.size();
// something else that can also return true or false with O(1) complexity
for (int i=1; i<=len; ++i) {
string prefix = word.substr(0,i);
string suffix = word.substr(i);
if (prefix in s && fun(suffix))
return true;
else
return false;
}
}
O(n)
時間の複雑さは、nが単語の長さであると思います(そうですか?)。しかし、再帰はループ内にあるため、それを証明する方法がわかりません。
編集:
このコードは正しいコードではありませんC++
(例: prefix in s
)。この関数のアイデアを示すだけで、その時間計算量を分析する方法を知りたい