目標:文字列と2つの長さへのポインタを受け取り、入力のサイズに依存する追加のメモリを使用せずに、長さで表される内側の文字列を交換する関数。たとえば、文字列「abcdef123」と長さが6,3の場合、結果は「123abcdef」になります。
考えられる再帰的な実装(私のもの)の1つは次のとおりです。
void invertStrings(char* str, int len1, int len2){
if(len1==0 || len2==0)
return;
if(len1>len2){
for(int i=0;i<len2;++i)
swapChars(str, len1+i, len1-len2+i);
invertStrings(str,len1-len2,len2);
}
else{
for(int i=0;i<len1;++i)
swapChars(str, len1+i, i);
invertStrings(str+len1,len1,len2-len1);
}
}
時間計算量はO(len1 + len2)か、O(max {len1、len2})のようなものだと思います。
質問:時間計算量とは何ですか?それをどのように証明できますか?ありがとう。