Time complexity 以下程序的时间复杂度

Time complexity 以下程序的时间复杂度,time-complexity,big-o,complexity-theory,recurrence,Time Complexity,Big O,Complexity Theory,Recurrence,在上面的程序中,我被要求找出程序A需要O(1)时间和程序B需要O(1/n)时间的时间复杂度 我形成了递归关系T(n)=T(n-1)+O(1/n) 求解它,我得到了T(n)=O(logn),因为如果我们用反代换法求解它,我们将得到调和级数,并且计算调和级数之和的时间复杂度为O(lgn)。但答案是O(n)。我不知道他们是怎么得到这个答案的。在解释中,他们在递推关系中增加了一个常数乘以n。我不明白为什么我们要加上常数乘以n。请帮助我理解这一点。这很可能是作者/考官为了让你明白而设置的一个技巧性问题。您

在上面的程序中,我被要求找出程序A需要O(1)时间和程序B需要O(1/n)时间的时间复杂度

我形成了递归关系T(n)=T(n-1)+O(1/n)


求解它,我得到了T(n)=O(logn),因为如果我们用反代换法求解它,我们将得到调和级数,并且计算调和级数之和的时间复杂度为O(lgn)。但答案是O(n)。我不知道他们是怎么得到这个答案的。在解释中,他们在递推关系中增加了一个常数乘以n。我不明白为什么我们要加上常数乘以n。请帮助我理解这一点。

这很可能是作者/考官为了让你明白而设置的一个技巧性问题。您必须注意到,每次调用
what
(将参数推送到堆栈等)所涉及的
O(1)
操作掩盖了
B
O(1/n)
复杂性,至少从渐近角度讲是如此。所以实际的时间复杂度是
T(n)=T(n-1)+O(1)
,这给出了正确的答案。

Ohh,我现在知道了。我没想到。谢谢我想知道O(1/n)算法是否真的存在。我的意思是,这个程序应该至少需要恒定的时间O(1),对吧,它怎么能比这少呢?它们只是一个理论结构;在现实中,总会有一些O(1)操作会使1/n部分黯然失色。
algorithm what (n)      
begin 
    if n = 1 then call A 
    else 
        begin
            what (n-1);
            call B(n)
        end
end.