メソッドの実行時の複雑さを計算する最良の方法は何ですか? これは、バブルソートのような非再帰的な方法で簡単に実行できます
outer-for loop
{
inner-for loop
{
compare and exchange
}
}
確認するには、最も内側のループにカウンターを配置するのが最善の方法です。しかし、メソッドが再帰的である場合、カウンターをどこに置くべきか、たとえばマージソート、
sort(int[] array){
left = first-half
right = second-half
sort(left);
sort(right);
ret merge(left, right);
}
merge(int[] left, right)
{
count = length(left + right);
int[] result;
loop-count-times
{
compare and put in result;
}
return result;
}
これはマージソートであるため、big(o) は o(n log n) であるため、100 int の配列は正確に 200 の big-o を返す必要があります。カウンターはどこに行くの?sort(..) の一番上に置くと、平均は 250、280、300 になりますが、これは間違っているはずです。このカウンターの最適な場所はどこですか?
参照: http://en.wikipedia.org/wiki/Mergesort
ありがとう。