首先,我们需要理解问题中的几个概念:
现在我们来证明n!对于任何常数自然数p,不在O(n ^ p)中。
假设存在一个常数自然数p,使得n! = O(n ^ p)。根据大O符号的定义,存在正常数C和正整数n0,使得对于所有n >= n0,有n! <= C * (n ^ p)。
我们可以将n!展开为n (n-1) (n-2) ... 2 * 1。将其代入上述不等式中,得到:
n (n-1) (n-2) ... 2 1 <= C (n ^ p)
我们可以观察到,左边的乘积中,至少有一项是n或者n的倍数。假设这一项为k * n,其中k是一个大于1的常数。那么上述不等式可以进一步化简为:
k n (n-1) (n-2) ... 2 1 <= C * (n ^ p)
我们可以继续观察到,右边的n ^ p中,至少有一项是n的p次方。假设这一项为m * (n ^ p),其中m是一个大于1的常数。那么上述不等式可以进一步化简为:
k n (n-1) (n-2) ... 2 1 <= C m (n ^ p)
我们可以继续观察到,左边的乘积中,至少有p项是n的倍数。假设这p项分别为k1 n, k2 n, ..., kp * n,其中ki是大于1的常数。那么上述不等式可以进一步化简为:
k (k1 n) (k2 n) ... (kp n) <= C m * (n ^ p)
化简后得到:
k (k1 k2 ... kp) (n ^ p) <= C m * (n ^ p)
我们可以看到,左边的乘积中,至少有p项是n的倍数,而右边的n ^ p是n的p次方。由于k、ki、m都是大于1的常数,所以左边的乘积是一个大于1的常数。因此,上述不等式可以进一步化简为:
常数 (n ^ p) <= C m * (n ^ p)
我们可以看到,左边的常数乘以n的p次方,与右边的C m (n ^ p)相比,左边的结果是一个常数。但是,当n足够大时,右边的结果会随着n的增加而增加。这与我们最初的假设矛盾。
因此,我们可以得出结论:对于任何常数自然数p,n!不属于O(n ^ p)。
领取专属 10元无门槛券
手把手带您无忧上云