开始学习算法。我理解如何从像T(n) = Tf(n) + g(n)
这样的“常规重现”中找到the-notation。但我迷失了这个recurrence: problem 1-2e:
T(n)= T(√n)+Θ(lg lg n)
如何选择找到theta的方法?什么,呃,这种复发是什么?我只是不太明白符号 - 里面的复发事物。
答案 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完全相同。所以:
这意味着:
这个大的总结通知整个lnln(n)
总和可以转换为:
我们唯一的问题是在n
和k
之间找到一些联系,这可以很容易地从最新的T(...)
术语中获得。
为此,我们必须为最新的术语找到合理的约束条件。这可以通过尝试几个整数来完成,例如0, 1, 2
。使用2
,您有:
将k替换为我们之前的等式,您将看到最大的术语是:
P.S。您可以看到类似重现的解决方案here