Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Time complexity 易分辨递推方程_Time Complexity_Recurrence - Fatal编程技术网

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)。