计算任何方法的运行时复杂度的最佳方法是什么?对于非递归方法很容易做到这一点,比如冒泡排序
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 个整数的数组应该准确返回 200 的 big-o。柜台会去哪里?如果我把它放在 sort(..) 的顶部,我得到的平均数是 250、280、300,这应该是错误的。这个柜台的最佳位置是什么?
参考资料:http ://en.wikipedia.org/wiki/Mergesort
谢谢。