Solving the recurrence T(n) = 2T(sqrt(n))

22,498

Solution 1

One idea would be to simplify the recurrence by introducing a new variable k such that 2k = n. Then, the recurrence relation works out to

T(2k) = 2T(2k/2)

If you then let S(k) = T(2k), you get the recurrence

S(k) = 2S(k / 2)

Note that this is equivalent to

S(k) = 2S(k / 2) + O(1)

Since 0 = O(1). Therefore, by the Master Theorem, we get that S(k) = Θ(k), since we have that a = 2, b = 2, and d = 0 and logb a > d.

Since S(k) = Θ(k) and S(k) = T(2k) = T(n), we get that T(n) = Θ(k). Since we picked 2k = n, this means that k = log n, so T(n) = Θ(log n). This means that your initial guess of O(log log n) is incorrect and that the runtime is only logarithmic, not doubly-logarithmic. If there was only one recursive call being made, though, you would be right that the runtime would be O(log log n).

Hope this helps!

Solution 2

You can solve this easily by unrolling the recursion:

enter image description here

Now the recurrence will finish when T(1) = a and you can find the appropriate a. When a = 0 or 1 it does not make sense but when a=2 you will get:

enter image description here

Substituting the k into latest part of the first equation you will get the complexity of O(log(n)).

Check other similar recursions here:

Share:
22,498
Tasneem Fathima
Author by

Tasneem Fathima

Updated on July 09, 2022

Comments

  • Tasneem Fathima
    Tasneem Fathima almost 2 years

    I would like to solve the following recurrence relation:

    T(n) = 2T(√n);

    I'm guessing that T(n) = O(log log n), but I'm not sure how to prove this. How would I show that this recurrence solves to O(log log n)?

  • Ritwik
    Ritwik almost 8 years
    how come S(k) = T(2^k)? domain is not coinciding, shouldn't it be S(k') = T(2^k)?
  • templatetypedef
    templatetypedef almost 8 years
    Can you elaborate about what you mean about the domains not counciding? I don't get what you're asking.
  • Ritwik
    Ritwik almost 8 years
    I meant how can you substitute S(k) for T(2^k)? If we consider them as functions of k and 2^k, domain of T is 1,2,4,8,... And S is 1,2,3,4,...
  • templatetypedef
    templatetypedef almost 8 years
    @Ritwik You're absolutely right that, in general, you can't make substitutions like these. Most recurrences you encounter have the nice property that they're monotonically increasing. If the recurrence is monotone increasing and you can provide a bound on its value at various nice points (powers of two, powers of three, etc.), then you can asymptotically bound the entire recurrence. That's what we're doing here. It's such a common trick to do this that you typically don't actually see anyone ever write out "it's monotone" as a justification, but it's worth seeing why that's true here.
  • dev
    dev over 7 years
    When you substitute S(k) for T(2^k), why is it 2S(k / 2) and not 2S(√k)?
  • templatetypedef
    templatetypedef over 7 years
    @dev We want to choose an x such that S(x) = T(2^(k/2)). Since S(x) = T(2^x), that means we want to choose S(k / 2) = T(2^(k/2)). If we pick S(sqrt k), we'd get T(2^(sqrt k)), which doesn't match what we need.
  • dev
    dev over 7 years
    It would really help if you could kindly expand the answer elaborating on comment on Jul 14 about how substituting S(k)=T(2^k) is guaranteed to maintain the bounds of the original recurrence.
  • Avv
    Avv over 2 years
    Thank you for this clarity of answer.