以下程序的时间复杂度

时间:2018-09-24 09:59:57

标签: time-complexity big-o complexity-theory recurrence

algorithm what (n)      
begin 
    if n = 1 then call A 
    else 
        begin
            what (n-1);
            call B(n)
        end
end.

在上面的程序中,我被要求找出时间复杂度,其中过程A花费O(1)时间,过程B花费O(1 / n)。

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

求解它,我得到T(n)= O(log n),因为如果使用反向替换方法求解它,并且得到时间复杂度来计算谐波序列之和为O(lgn),我们将得到谐波序列。但是答案是O(n)。我无法弄清楚他们是如何得到答案的。在解释中,他们为递归关系增加了一个常数n。我不明白为什么我们应该将常数乘以n。请帮助我理解这一点。

1 个答案:

答案 0 :(得分:1)

这可能是作者/审查员提出的一个技巧问题,目的是吸引您。您必须注意,每次对O(1)的调用中所涉及的what操作(将参数推入堆栈等)使O(1/n)的{​​{1}}复杂性变得黯淡无光–至少渐近地发言。因此,实际时间复杂度为B,它给出了正确的答案。