# Time complexity for logarithmic algorithm

I am trying to find complexity for following algorithm. It is from "The Algorithm Design Manual" book.

for k = 1 to n:
x = k
while (x < n):
print ’*’
x = 2x


I simulated algorithm for some values. Each time inner loop operates on n-k value.

k=1
x=1
x=2
x=4
x=8
...
k=2
x=2
x=4
x=8
x=16
k=3
x=3
x=6
x=12


And I do think that it has complexity of

$$\sum\limits_{k=1}^{n}k*\lg(n-k)$$

What do you think?

Edit 1

After some time, I think it should be $$\sum\limits_{k=1}^{n}\lg(n-k)$$

$$\sum\limits_{k=1}^{n}\log \frac{n}{k} = \sum\limits_{k=1}^{n}\log n-\sum\limits_{k=1}^{n}\log k = \log n^n - \log n! = n \log n - (n \log n - n + O(\log n)) = n - O(\log n) = O(n)$$

• $\log n! \neq n \log n - n$ Jan 24 at 10:30
• @Steven it is asymptotically equal en.m.wikipedia.org/wiki/Stirling%27s_approximation Jan 24 at 10:39
• @Keneth sure it is. But 1) you wrote equal, and 2) it is not legal to subtract asymptotically equal functions. Otherwise your could write: $n - (n - \log n) = n - (n - \log \log n) = \log \log n$ since $n - \log n$ and $n - \log \log n$ are asymptotically equal. Jan 24 at 11:22
• @Steven is it legal now? i edited it exactly how wikipedia wrote it. being asymptotically equal may not be enough, but they differ only by the ignorable $O(\log n)$. Jan 24 at 11:48
• It works now.$\phantom{}$ Jan 24 at 12:23

You need to add log (n / k), not log (n - k).

To examine this closer: For values n/2 <= k <= n you have only one iteration of the inner loop. For values n/4 <= k < n/2 you have two iterations. For values n/8 <= k < n/4 you have three iterations of the inner loop.

So the total number of iterations of the inner loop is 1 * n/2 + 2 * n/4 + 3 * n/8 + 4 * n/16 ... which is n + n/2 + n/4 + n/8 ... which is 2n. So you have about 2n iterations in total of the inner loop, and the total time is O(n).