Big Oh Notation 查找 n0 和 c

问题描述

我正在看这个问题:

证明 100?+5 ∈ ?(?²)(即 100?+5 的上界是?²)

?(?) ≤ ??(?) 对于所有? ≥ ?0
所以它变成 100?+5 ≤ ??²

答案是:

?0 ≈ 25.05(?² 算法截取 ? 算法的数字)和 ? = 4 以便当 ? 增加到 25.05 以上时,不管它会怎样 仍然证明100?+5∈??²为真

我的问题是:你是如何推导出 ?0 = 25.05 和 ? = 4 的?这是一种猜测和试验的方法,还是有一种正确的方法来获得那个特定的答案?或者您只需要从 1 开始,然后逐步向上看是否有效?

解决方法

解决此类问题的一个好方法是首先修复 c 让我们在这个例子中取 4

然后你所要做的就是使用简单的等式计算出 n0

100n + 5 = 4n^2 4n^2 - 100n - 5 = 0 n = 25.05 或 n = -0.05 在这里你可以注意到它们在 -0.08 和 25.05 相交两次,就像你一样想要 n0 这样之后 100n +5 总是低于 4n^2 -0.05 不是那个,因为 25.05 > -0.05 并且在 25.05 它们相交所以 n0 = 25.05 .

在修复 c 并试图找出 n0 之前,您可以尝试大数 n0 以了解它是否是上限。

,

n0 和 c 有无数种选择可以用来证明这个界限成立。我们需要找到 n0 和 c,使得对于 n >= n0,f(n)

cn^2 - 100n - 5 >= 0

我们可以使用二次公式求根:

n1,n2 = [100 +- sqrt(10000 + 20c)]/2c

因为 c 是正数,所以我们知道 sqrt 项在评估后将大于 100,并且由于我们只对 n > 0 感兴趣,所以我们可以放弃这些解决方案中较小的一个,并专注于这一点:

n0 = [100 + sqrt(10000 + 20c)]/2c

我们可以稍微简化一下:

n0 = [100 + sqrt(10000 + 20c)]/2c
   = [100 + 2*sqrt(2500 + 5c)]/2c
   = [50 + sqrt(2500 + 5c)]/c

此时,我们可以选择 c 的值或 n0 的值,然后求解另一个。您的示例选择 c = 4 并得到近似答案 n0 ~ 25.05。如果我们更愿意直接选择 n0(假设我们想要 n0 = 10),那么我们计算如下:

10 = [50 + sqrt(2500 + 5c)]/c
10c = 50 + sqrt(2500 + 5c)
(10c - 50) = sqrt(2500 + 5c)
(100c^2 - 1000c + 2500) = (2500 + 5c)
100c^2 - 1005c = 0
c(100c - 1005) = 0
c = 0 or c = 1005/100 ~ 10.05

因为解c=0显然不行,所以解c​​~10.05对于我们选择的n0=10似乎是有效的。你可以选择其他的n0或c,这样找到对应的常数。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...