我有解决方案,但我不理解其中的一部分。
想要证明:n^2-10n
不是O(n)
的元素。
相反n^2 - 10
是O(n)
必须存在c > 0
和n0 > 0
,以便所有n >= n0
,n^2-10n <= cn
重新排列上面的等式,我们得到n<=c+10
这是我迷路的地方
让k = 1 + max(n0, c+10)
k >= n0
然而k <= c+10
并非如此,所以我们已经产生了矛盾。
问题:什么是k
,我们为什么要分配1 + max(n0, c+10)
答案 0 :(得分:1)
让我们看看:理解这一点的一部分是直观地看出矛盾存在的原因;理论细节往往是你直觉的结果。
您知道n^2 - 10n
O(n)
n <= c+10
,n
每个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
,我总是赢得:)
我希望现在能说清楚。