证明f(n)是O(2^n)

我明白如何使用大O的定义来证明f(n)是O(n)或O(n^2),但对于O(2^n)我感到困惑。你能帮我证明2^n + n^3 + 30是O(2^n)吗?大一AI专业,我喜欢所有内容,但复杂度让我头疼!


回答:

我不会为你解决这个问题,因为这听起来像是作业。但我会解决一个你已经知道如何解决的问题,然后试图说服你,这个问题并没有什么不同。

所以,回忆一下,当我们试图证明某个函数,称之为f(n),属于另一个函数的Big-Oh,称之为g(n)时,我们在做什么。我们试图证明,在某个常数因子的范围内,并且当n变大时,f(n)永远不会比g(n)差。我们通过选择两个数字,c和n0来做到这一点。第一个,c,就是我之前提到的那个“常数因子”。我们将f(n)和g(n)按如下方式关联:

f(n) ≤ c g(n),对所有n ≥ n0成立

重要的是,c和n0并不是唯一的。通常,你可以几乎任意选择一个,然后通过简单的代数计算出另一个的值。所以我们用下面的函数来尝试:

f(n) = n² + 5n + 10

g(n) = n²

首先我们根据我们的常数因子c设置关系:

n² + 5n + 10 ≤ c n²

现在我们想让c单独出来,与n的某个其他函数相关,所以只需将n²从两边除掉:

1 + 5/n + 10/n² ≤ c

我们想知道什么值的n(我们称之为n0)使得这个对于所有更大的n值都成立。嗯,我们可以选择一个c并求解n,或者选择一个n0并求解c。这并不重要,但我们选择n0 = 1,只需在看到n的地方都替换成1,看看会发生什么:

1 + 5/1 + 10/1 = 1 + 5 + 10 = 16 ≤ c

这就是我们的答案:如果我们选择c为16,那么每当n大于1时(即,n0 = 1),f(n)将小于g(n)。

那么,你能用你试图解决的问题来做这个吗?嗯……为什么不能呢?我们有两个函数,f(n)和g(n)。我们试图证明与你知道如何解决的问题完全相同的关系。唯一改变的是函数的类型,从n的多项式变为n的指数函数(和一个混合的)。但这重要吗?嗯,代数看起来会有点不同,但那又怎样?它还是代数。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注