3

3 n = O(2 n ) 吗?(3/2) n = O(2 n ) 怎么样?你能解释一下答案吗?

我第一次弄错了,因为无论你将 2 n乘以什么常数 C,3 n的增长速度都比 2 n快。第二个也一样?

log(3 n ) = O(log (2 n ) ) 怎么样?我认为我们无法确定这一点,因为我们不知道日志的基础。

4

1 回答 1

5

让我们实际证明一个更强的结果:对于任何常数 r 0和 r 1,其中 1 ≤ r 0 < r 1,r 0 n = O(r 1 n ) 是真的,r 1 n = r 0 n是假的. 这证明了您的结果是一种特殊情况,因为 1 < 3/2 < 2。

为了证明第一部分,我们将证明 r 0 n = O(r 1 n )。为此,我们将使用 big-O 的定义并找到 n 0和 c 的值,这样对于任何 n > n 0,我们都有

r 0 n ≤ cr 1 n

我们可以选择 n = n 0并且可以选择 c = 1。然后上面的不等式成立,所以根据定义我们有 r 0 n = O(r 1 n )。

为了证明第二部分,我们将证明 r 1 n ≠ O(r 0 n )。为此,我们将通过矛盾进行。为了矛盾起见,假设存在 c 和 n 0的选择,使得对于任何 n > n 0,我们有

r 1 n ≤ cr 0 n

取双方的log得到

n log r 1 ≤ log (cr 0 n )

n log r 1 ≤ log c + n log r 0

n (log r 1 - log r 0 ) ≤ log c

n log(r 1 / r 0 ) ≤ log c

n ≤ log c / (log(r 1 / r 0 ))

但是现在我们遇到了麻烦,因为这个陈述应该适用于n的任何选择。但是,如果我们选择任何大于 log c / (log(r 1 / r 0 )) 的 n,则该陈述变为错误。

我们遇到了矛盾,所以我们的假设一定是错误的。因此,如果 1 < r 0 < r 1,我们有 r 1 n ≠ O(r 0 n )。

希望这可以帮助!

于 2013-02-13T06:44:36.340 回答