Why does $\log(n!)$ and $\log(n^n)$ have the same big-O complexity?
In an example that I found, it is said that $\log(n!)$ has the same big-O complexity as $\log(n^n)$. Please explain why this is the case.
Because
$$\ln(n!) = \sum_{k=1}^{n} \ln(k) \leq n\ln(n) = \ln(n^n),$$
we have $\ln(n!) = O(\ln(n^n))$.
And for $n$ big enough,
$$\ln(n!) = \sum_{k=1}^{n} \ln(k) \geq \sum_{k=\left\lfloor \frac n2\right\rfloor}^{n} \ln(k) \geq \sum_{k=\frac n2}^{n} \ln\left(\frac{n}{2}\right)=\frac{n}{2} \ln\left(\frac{n}{2}\right) \geq \frac{n}{2}\left( \ln(n) - \ln(2) \right) \geq Cn\ln(n)$$
so $\ln(n^n) = O(\ln(n!))$
You have then
$$\ln(n^n) = \Theta(\ln(n!))$$
By writing
$$ \begin{align} \log(n^n) - \log(n!) &= \log\left(\frac{n \cdot n \cdots n}{n \cdot (n-1) \cdots 1}\right) \\ &= \log\left(\prod_{k=1}^{n} \frac{n}{k} \right) \\ &= \sum_{k=1}^{n} \log\left(\frac{n}{k}\right) \\ &= n \sum_{k=1}^{n} \log\left(\frac{1}{k/n}\right)\frac{1}{n} \end{align} $$
and using the fact that the right-endpoint Riemann sum of a decreasing nonnegative function is a lower bound for the integral, i.e.
$$ 0 \leq \sum_{k=1}^{n} \log\left(\frac{1}{k/n}\right)\frac{1}{n} \leq \int_0^1 \log\left(\frac{1}{x}\right)dx = 1, $$
we obtain the estimate
$$ \log(n^n) - \log(n!) = O(n) $$
or, rearranging,
$$ \log(n!) = \log(n^n) + O(n). $$
Dividing through by $\log(n^n)$ yields
$$ \frac{\log(n!)}{\log(n^n)} = 1 + O\left(\frac{n}{\log(n^n)}\right) = 1 + O\left(\frac{1}{\log n}\right), $$
so we can conclude that
$$ \lim_{n \to \infty} \frac{\log(n!)}{\log(n^n)} = 1. $$
Stirling's Formula is given by
$$n!=\sqrt{2\pi n}\left(\frac{n}{e}\right)^n\left(1+O\left(\frac1n\right)\right)\tag 1$$
Therefore, we have from $(1)$ for $\log n!$
$$\begin{align} \log\,n!&=\frac12 \log(2\pi)+\left(n+\frac12\right) \log n -n+O\left(\frac1n\right)\\\\ &=O\left(n\,\log n\right)\\\\ \end{align}$$
Since $\log n^n=n\log n$ we see immediately that
$$\log n! =O\left(n\,\log n\right)=O\left(\log n^n\right)$$
as was to be shown.