このコードの実行時複雑度 T(n) が 2lgn+2 である理由を説明してください。私はそれがlgn + 2であるべきだと思った。
public static reduce(int n){
int result = 0;
while (n >1){
n = n/2;
result = result +1;
}
return result;
}
このコードの実行時複雑度 T(n) が 2lgn+2 である理由を説明してください。私はそれがlgn + 2であるべきだと思った。
public static reduce(int n){
int result = 0;
while (n >1){
n = n/2;
result = result +1;
}
return result;
}
おそらく、各行には1単位の時間がかかると想定されています(n > 1
チェックは含まれていません)。
したがってint result = 0;
、n = n/2;
、 、result = result +1;
およびreturn result;
それぞれは、1 単位の時間がかかるものとして分類されます。
2 から来てint result = 0;
、return result;
それぞれが 1 回実行されます。
2 log 2 n から来てn = n/2;
、result = result +1;
それぞれが log 2 n 回実行されます。
ノート:
n > 1
時間の単位として分類することもでき、結果として 3 log 2 n + 2 になります。
n = n/2;
そして、result = result +1;
それぞれ 2 単位の時間がかかると分類でき、(上記の場合) 5 log 2 n + 2 になります。
それはすべて非常に主観的です。
全体的な唯一の合意は、いくつかの c と d に対してclog 2 n + d です。