В предыдущей задаче я показал (надеюсь правильно), что f(n) = O(g(n))
подразумевает lg(f(n)) = O(lg(g(n)))
с достаточными условиями (например, lg(g(n)) >= 1, f(n) >= 1
и достаточно большим n).
Теперь мне нужно доказать ИЛИ опровергнуть, что f(n) = O(g(n))
подразумевает 2^(f(n)) = O(2^g(n)))
. Интуитивно это имеет смысл, поэтому я решил, что смогу доказать это с помощью предыдущей теоремы. Я заметил, что f(n)
можно переписать как lg(2^f(n))
, а g(n)
— это просто lg(2^g(n))
, что меня взволновало... это берет логарифмическую базу 2 обеих сторон того, что я хочу доказать, и это очень упрощает!
Но я почти уверен, что это не сработает. Просто потому, что lg(2^f(n)) = O(lg(2^g(n)))
не обязательно означает, что 2^f(n) = O(2^g(n))
... это обратное от предыдущей теоремы (где сказано «подразумевает», а не «если и только если»).
Нужно ли мне попробовать это доказательство по-другому, или я действительно могу отказаться от того, что у меня есть (по крайней мере, для начала)?
** Говоря о других способах, может быть, я мог бы просто поспорить о том, как повышение 2 до некоторого g(n)
, которое «выше» f(n)
, все равно будет держать его выше? Это почти похоже на аргумент здравого смысла, но, возможно, я упускаю что-то важное.
**Ой, ой! Я забыл добавить, что f(n)
и g(n)
асимптотически положительны. Согласно определению из нашего учебника, это означает, что они «положительны для всех достаточно больших n».