Recursion 递推关系T(n)=T(3/4*n)和#x2B;O(1)

Recursion 递推关系T(n)=T(3/4*n)和#x2B;O(1),recursion,complexity-theory,recurrence,Recursion,Complexity Theory,Recurrence,我正在计算递归关系 T(n)=T(3/4*n)+O(1) 结果是O(log(n)),但我事先被告知解决方案是O(n)。我找不到哪里出错了-这看起来就像二进制搜索的递归关系。有什么建议吗?尝试将T(n)=c*n或T(n)=c*logn代入方程并求解。这两个方程中有一个是可解的 您还可以通过计算函数的不同值n来检查答案 -- Define T in your preferred language t n | n <= 1 = 1 | otherwise = t (3/4 * n) + 1 -

我正在计算递归关系

T(n)=T(3/4*n)+O(1)

结果是
O(log(n))
,但我事先被告知解决方案是
O(n)
。我找不到哪里出错了-这看起来就像二进制搜索的递归关系。有什么建议吗?

尝试将
T(n)=c*n
T(n)=c*logn
代入方程并求解。这两个方程中有一个是可解的

您还可以通过计算函数的不同值n来检查答案

-- Define T in your preferred language
t n | n <= 1 = 1 | otherwise = t (3/4 * n) + 1

-- If it's O(log n), then T(n)/log(n) should be asymptotically constant
-- If it's O(n), then T(n)/n should be asymptotically constant
check1 n = t n / log n
check2 n = t n / n

print [check1 1e10, check1 1e11, check1 1e12, check1 1e13]
print [check2 1e10, check2 1e11, check2 1e12, check2 1e13]
--用您喜欢的语言定义T
t nt(n)=t(3/4*n)+O(1)
在上面的等式中,T(3/4*n)是未知项,如果你问这个循环的解,那么我想说,我们可以用替换法来解这个等式。
在这里,我们必须从主等式中找出T(3n/4)的值,并在等式中递归替换。因为这种递归依赖于递归。
n=3n/4
T(3n/4)=T((3/4)^2*n)+c………..(2)符号O替换为常数c。
现在将T(3n/4)替换为(1)
T(n)=T((3/4)^2*n)+2c
现在将n=((3/4)^2*n)放入(1)
T((3/4)^2*n)=T((3/4)^3*n)+c
代替
T(n)=T((3/4)^3*n)+3c………(4)

第k步后,等式将为 T(n)=T((3/4)^k*n)+kc………..(5)在此步骤中,n将为2或1(输入大小) (3/4)^k*n=1 n=(4/3)^k,从两侧取对数。 对数(n)=k*log(4/3) k=对数(n)。。。。。。。。。。。。。。 将值放入式(5)中 T(n)=T(1)+对数(n)*c………..(6)
T(n)=O(logn)

给出的答案没有显示解决此类复发的正确方法。您的案例很容易用a解决,在您的案例中
a=1
b=4/3
。这意味着
c=logb(a)=0

因为你的
f(n)
是一个常数,所以你落在第二种情况下,其中
k=0
。因此,解决方案是,其中
c=0
k=0
。这意味着:



O(log(n))
是一个正确的答案

或者,我预先给出的答案可能是错误的,只是想找出是哪一个。