5

The book I am following explains the solution as,

As we can see,the size of sub problems at the first level of recursion is $n$.So, let us guess that $T(n)=O(n\log n)$ and try to prove that our guess is correct.

Doubt- Does initial problem size(i.e n) give a hint to reach $O(n\log n)$ ? How it does?

furthermore ,the book says

Let's start by trying to prove an upper bound $T(n)\le c\cdot n\log n$

\begin{align*} T(n)=\sqrt{n} \cdot T(\sqrt{n}) + n \tag{1} \\ \le \sqrt{n}\cdot c\sqrt{n}\log(\sqrt{n}) + n \tag{2} \\ =n\cdot c\log (\sqrt{n})+ n \tag{3} \\ =n\cdot c\cdot\frac{1}{2}\log n+ n \tag{4} \\ \le c\cdot n\log n \tag{5} \end{align*} Last inequality assumes only that $$1\le c\cdot\frac{1}{2}\cdot \log n$$ This is correct if n is sufficiently large and for any constant c,no matter how small.So we are correct for upper bound.

I am not getting what's happening from $(1)$ to $(2)$ and that from $(4)$ to $(5)$. Also What does the last line prove ?

Raphael
  • 73,212
  • 30
  • 182
  • 400

3 Answers3

5

The book answer skips over some things. Here's a more detailed explanation.

You want to show $T(n)=O(n\log n)$, in other words there exists a $c>0$ such that $T(n)\le c\cdot n\log n$. [Actually, you need also to show that this inequality holds for all $n$ greater than some constant $N$, but we'll put this off temporarily.]

We'll use strong induction here; our induction hypothesis is that

$T(k)\le c\cdot k\log k$, for all $k<n$.

Now we'll expand the book's answer. $$\begin{align} T(n) &= \sqrt{n}\;T(\sqrt{n}) + n &\text{by definition} \\ &\le\sqrt{n}\;[c\cdot\sqrt{n}\log{\sqrt{n}}]+n &\text{by induction hypothesis, since $\sqrt{n}<n$}\\ &= cn(\log\sqrt{n})+n \end{align}$$ which answers your question about the step from $(1)\rightarrow(2)$. To get $(4) \rightarrow(5)$ the text wants to end up with $T(n)\le c\cdot n\log n$, so to conclude this they need $$ n\cdot c\cdot\frac{1}{2}\log n+n\le c\cdot n\log n $$ Dividing both sides of the desired equality by $n$ yields the needed condition: $$ \frac{c}{2}\log n+1\le c\log n $$ and this will be true when $1\le \frac{c}{2}\log n$. [The book actually doesn't need an unspecified $c$: in fact, $c=2$ will work perfectly here, since as long as $n\ge 2$ we'll have $1\le\log n$, satisfying our needed condition.]

In sum, we've shown by induction that the recurrence $T(n)= \sqrt{n}\log\sqrt{n}+n$ is satisfied by any function $T(n)=c\cdot n\log n$, as long as we pick a suitable $c$, which is exactly what was required.


It's worth pointing out that $O(n\log n)$ is an upper bound, but it's not the tightest upper bound possible. As gnasher729 pointed out, a better bound is $O(n\log\log n)$. It's a good exercise to do the same argument (with $c=1$) to show that $T(n)=n\log\log n$ is a solution to $T(n)=\sqrt{n}\;T(\sqrt{n})+n$.

Rick Decker
  • 15,016
  • 5
  • 43
  • 54
3

No. The problem size is defined to be $n$; that doesn't tell us anything about the solution to the recurrence.

See https://cs.stackexchange.com/a/2799/755 for details on how to use guess-and-check. How do you find a guess? Try a bunch of possibilities. Or, have an inspired guess. Or, graph the recurrence for $n=1$ to $n=100$ and use curve-fitting.

D.W.
  • 167,959
  • 22
  • 232
  • 500
3

The recursion formula obviously doesn't work for n = 1, since in that case it says that T (1) = 1 * T (1) + 1. So let's guess that T (2) = c, where c is unknown.

T (4) = 2 T (2) + 4 = 2c + 4.

T (16) = 4 T (4) + 16 = 8c + 32.

T (256) = 16 * T (16) + 256 = 128c + 16 * 32 + 256 = 128c + 16*16*3.

T (65536) = 256 T (16) + 65536 = 32768c + 256*256*3 + 256*256 = 32768c + 256*256*4.

It's time to guess that $T (2^k) = 2^{k-1}c + 2^k * log_2 (k)$.

Or $T (n) = cn/2 + n * log_2 (log_2 (n))$

Does this solve the recurrence relation? Assume that n is the square of an integer ≥ 2. Then according to the recurrence relation and the guess,

$T(n)= \sqrt{n}(c\sqrt{n}/2 + \sqrt{n} * log_2 (log_2 (\sqrt{n})))+n$

$T(n) = cn/2 + n * log_2 (log_2 (\sqrt{n}))+n$

$T(n) = cn/2 + n * log_2 (log_2 (n)/2)+n$

$T(n) = cn/2 + n * (log_2 (log_2 (n))-1)+n$

$T(n) = cn/2 + n * log_2 (log_2 (n)) - n + n = cn/2 + n * log_2 (log_2 (n))$

which is exactly what was proposed.

gnasher729
  • 32,238
  • 36
  • 56