解决复发:T(n)= T(n ^(1/2))+Θ(lg lg n)

时间:2012-06-22 01:34:25

标签: algorithm math recurrence big-theta

开始学习算法。我理解如何从像T(n) = Tf(n) + g(n)这样的“常规重现”中找到the-notation。但我迷失了这个recurrence: problem 1-2e

  

T(n)= T(√n)+Θ(lg lg n)

如何选择找到theta的方法?什么,呃,这种复发是什么?我只是不太明白符号 - 里面的复发事物。

2 个答案:

答案 0 :(得分:6)

可能有用的一个技巧是将n转换为其他东西,例如2 k 。如果我们这样做,你可以重写上面的

  

T(2 k )= T(2 k / 2 )+Θ(log log 2 k

     

= T(2 k )= T(2 k / 2 )+Θ(log k)

现在这看起来像我们实际上可以解决的重复,因为我们可以将其扩展为

  

T(2 k )= T(2 k / 2 )+ log k = T(2 k / 4 )+ log (k / 2)+ log k

如果我们将其扩展一次,我们会得到

  

T(2 i )= T(2 k / 2 i )+ log k + log(k / 2)+ log (k / 4)+ ... + log(k / 2 i

当2 k / 2 i ≤2时(例如,在这种情况下我们达到基本情况),这种情况会在

时发生
  

2 k / 2 i = 2

     

k / 2 i = 1

     

k = 2 i

     

i = lg k

换句话说,如果我们可以写n = 2 k ,那么净结果将是

  

T(n)= lg k + lg(k / 2)+ log(k / 4)+ log(k / 8)+ ... 1

     

lg k +(lg k) - 1 +(lg k) - 2 +(lg k) - 3 + ... +(lg k) - lg k

     

=Θ((lg k) 2

因为我们知道n = 2 k ,这意味着k =Θ(log n),所以用它代替我们得到T(n)=Θ((log log n) 2 )。

这里的关键技巧是将n重写为2 k 。其余的是标准技术。

这有意义吗?好吧,如果你考虑一下,log log n除了其他外,还是写出log n所需的位数。在每次迭代中,您将获取数字的平方根,这会使其表示中的位数减半。这减少了将in中的位数写出一个所需的位数。因此,第一次迭代将写出log log n位,第二次(log log n) - 1,第三次(log log n) - 2等。总的来说,这个求和是Θ((log log n) 2 ),与直觉相符。

希望这有帮助!

答案 1 :(得分:2)

以下是如何使用数学解决它。我将使用lnln(n)代替O(lnln(n))。这主要是为了减少公式的长度,你可以用big-O完全相同。所以:

enter image description here

这意味着:

enter image description here

现在转换enter image description here

这个大的总结通知

整个lnln(n)总和可以转换为:

enter image description here

我们唯一的问题是在nk之间找到一些联系,这可以很容易地从最新的T(...)术语中获得。

为此,我们必须为最新的术语找到合理的约束条件。这可以通过尝试几个整数来完成,例如0, 1, 2。使用2,您有:enter image description here

将k替换为我们之前的等式,您将看到最大的术语是:

enter image description here

因此复杂性为:enter image description here

P.S。您可以看到类似重现的解决方案here