证明n ^ 2 - 10n不是O(n)的矛盾

时间:2015-09-01 13:47:51

标签: big-o time-complexity complexity-theory asymptotic-complexity

我有解决方案,但我不理解其中的一部分。

想要证明:n^2-10n不是O(n)的元素。

相反n^2 - 10O(n)

的元素

必须存在c > 0n0 > 0,以便所有n >= n0n^2-10n <= cn

重新排列上面的等式,我们得到n<=c+10

这是我迷路的地方

k = 1 + max(n0, c+10)

k >= n0然而k <= c+10并非如此,所以我们已经产生了矛盾。

问题:什么是k,我们为什么要分配1 + max(n0, c+10)

1 个答案:

答案 0 :(得分:1)

让我们看看:理解这一点的一部分是直观地看出矛盾存在的原因;理论细节往往是你直觉的结果。

您知道n^2 - 10n O(n) n <= c+10n每个n0大于或等于c。请记住,c+10是常量,因此这意味着n(也是常量)必须大于或等于大于或等于{{1}的每个n0 }}。直觉上,您可以立即看到这是不可能的,因为常数不能大于无数个数。

这是什么意思?

好吧,您可以选择c的任何值,我可以立即告诉您某些n大于c+10因此违反了要求n <= c+10。例如,如果你给我c = 1000,我可以说“好吧,我选择n = 1011”。

所以,如果你给我c,我给你n = c+10+1,你就输掉了比赛;大于或等于n的每个c+10+1都违反了要求n <= c+10(请记住,每个n >= n0的要求必须

现在,知道我将永远选择n = c+10+1,你可能会选择一些大于n0的{​​{1}}使我的答案无效,从而使事情复杂化。例如,你说“ok,c+10是1000”。我说:“很好!c是1011 - 在那里,我发现了一个违反约束的值。”但后来你说:“不,你没有!因为我选择n”。这使我的回答无效,因为我们的结论早于条件n0 = 2000必须仅适用于每个n <= c+10。在此示例中,1011不大于或等于2000,因此我的答案无效。我不能选择低于2000的东西。

这就是您需要n >= n0:验证max()任何k的原因。使用n0总是获取违反约束k = max(n0, c+10)+1的值,无论您选择n <= c+10还是c多么疯狂。

所以,有了这个改进,你会告诉我:“我选择n0。”我为了阻止你的下一步行动,说:“好的,你为c = 1000选择了什么价值?”您选择-10000,或5000或100000000000000000000。这没关系。如果我回复n0,我总是赢得:)

我希望现在能说清楚。