如何系统地确定函数的big-O?
How to determine big-O for a function systematically?
他们这样做有条不紊吗?就像给我这个功能一样:
public static int f2(int[] arr, int lo, int hi)
{
// N = initial value of (hi-lo+1) of 1st activation of f2
if(lo == hi)
return lo;
if(arr[hi] >= arr[lo])
return f2(arr, lo+1, hi);
return f2(arr, lo, hi-1);
}
我看过的许多资源并没有逐步告诉您如何获得您从未见过的函数的符号。有没有办法非直观地做到这一点?如果是这样,就大 O 而言,我将如何获得最坏情况 运行 时间?谢谢
它是 O(n),其中 n
是 hi - lo + 1
,并且在每次递归中,lo
和 hi
之间的差距减少 1。
我怀疑不可能一般地解决这个问题,因为最坏的情况与尝试解决 Halting problem.
他们这样做有条不紊吗?就像给我这个功能一样:
public static int f2(int[] arr, int lo, int hi)
{
// N = initial value of (hi-lo+1) of 1st activation of f2
if(lo == hi)
return lo;
if(arr[hi] >= arr[lo])
return f2(arr, lo+1, hi);
return f2(arr, lo, hi-1);
}
我看过的许多资源并没有逐步告诉您如何获得您从未见过的函数的符号。有没有办法非直观地做到这一点?如果是这样,就大 O 而言,我将如何获得最坏情况 运行 时间?谢谢
它是 O(n),其中 n
是 hi - lo + 1
,并且在每次递归中,lo
和 hi
之间的差距减少 1。
我怀疑不可能一般地解决这个问题,因为最坏的情况与尝试解决 Halting problem.