证明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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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