目前我正在阅读Steven Skiena的算法设计手册第2版,我偶然发现了一个问题。
在第2章中,他解释了算法分析,其中包括Big Oh表示法,我不理解他的解决方案停止和思考:嘻哈到广场?
问题:是(x + y) 2 = O(x 2 + y 2 )。
他的解是(x + y) 2 < = 3(x 2 + y 2 ),这意味着c> ; = 3(从大哦的定义不变)。
这是我的解决方案:
我在这里缺少什么?
答案 0 :(得分:2)
我不知道他在哪里获得了3,但是在这里可以证明(x + y) 2 < = 2(x 2 + y 2 ):
2(x 2 + y 2 ) - (x + y) 2 = 2x 2 + 2y 2 - x 2 -2xy - y 2 = x 2 - 2xy + y 2 =(x - y) 2 > = 0
至于为什么你的解决方案是错误的,你从你想要证明的东西开始,这很棘手。我想在不平等旁边加一个问号作为提醒,它还不知道:
然后每个后续步骤应该是暗示上一步骤的步骤,这样如果您达到一个绝对真实的陈述,您可以撤消步骤并获得证据。下一步很好:
现在你的第3步既不是你要证明的东西也不是你知道的真实。你能说的是一切都是x和y对称的,所以我们可以假设x = max(x,y)(因为如果y是更大的那个,你可以做任何你要做的事情但是用x和y做换)。
但道格拉斯·扎尔指出,第4步并不等同于第2步,因为你增加了不平等的双方。
答案 1 :(得分:1)
首先,确切的常数通常并不重要。使用这种类型的渐近分析的一点是,它比Knuth,Flajolet和Sedgewick以及其他人使用的精确分析更简单。所以,即使你发现3不是最好的常数,那么呢?
其次,你犯了一个更容易捕获的错误,如果不是简单地写一堆方程式,希望它们是不言而喻的,你就写出了逻辑连接。这就像评论您的代码一样。
您想选择c以使不等式成立。这意味着你的含义应该是向上的:7意味着6意味着5意味着4意味着2意味着1.然而,你用2表示更大的表达来替换2的左手边,用更大的表达式替换2的右手边不平等4.第二部分对于向下的含义是有效的,但不是向上的含义。通过更多的工作,你仍然可以建立一个更好的常数,但你没有证明这一点,所以你的推导是不完整的。
我认为本书的解决方案是,如果c> = 1,则c(x ^ 2 + y ^ 2)> = cx ^ 2 + y ^ 2。如果c> = 3且x> = y,则cx ^ 2> = x ^ 2 + 2xy,因此cx ^ 2 + y ^ 2> = x ^ 2 + 2xy + y ^ 2。