Time complexity 易分辨递推方程
我必须找到下列函数的递推方程Time complexity 易分辨递推方程,time-complexity,recurrence,Time Complexity,Recurrence,我必须找到下列函数的递推方程 public static boolean f(int[] a) { return fr(a, 0); } private static boolean fr(int[] a, int i) { int n = a.length; if(i >= n-1) return true; else if(a[i] > a[i+1]) return false; else
public static boolean f(int[] a) {
return fr(a, 0);
}
private static boolean fr(int[] a, int i) {
int n = a.length;
if(i >= n-1)
return true;
else if(a[i] > a[i+1])
return false;
else
return fr(a, i+1);
}
我认为是:
T(1)=1
T(n)=T(n-1)
解析我得到结果T(n)=n。是吗?这个方程的分辨率似乎很奇怪。。
查看代码很容易看出复杂性是Θ(n)(贯穿整个数组)
这是一个愚蠢的问题,但却使我感到困惑。
谢谢所有想帮助我的人
T(1) = O(1)
T(n) = T(n-1) + O(1)
这确实是顺序搜索的特征,它具有O(n)时间复杂度。这是因为T(n)=T(n-1)
具有O(n)复杂性,并且O(1)项丢失
解决方案很简单:
假设我们知道T(n)=T(n-1)
,我们也知道T(1)=O(1)
。这意味着T(2)=O(1)
和T(3)=O(1)
等等。所以它只是等价于n*O(1)
,也就是O(n)
是什么让你认为T(n)=T(n-1)?你认为T(2)=T(1)=1吗?如果是这样,那么T(3)=T(2)=T(1)=1。。。T(n)=1?@Amit(n)=T(n-1),因为递归调用是在数组长度减1的情况下执行的……为什么要将aT(n-1)添加到O(1)?是返回语句吗?O(1)项来自实际大于比较的成本。您还可以在概念上将函数的其余语句(如if
和return
)合并在一起。只要它们是一次性语句,并且它们的复杂性与长度无关,它们的总和都将为O(1)。