如何证明算法的上限和下限?
到目前为止,我认为算法的上限和下限都需要通过考虑所有输入来显示,并且表明它不会比f(n)[upper]更差。并且不比g(n)[下限]好。
我的讲师说,对于上限,需要一般地证明它[考虑所有输入],但是对于下限,一个例子就足够了。
这让我很困惑。 任何人都可以澄清他的意思吗?
答案 0 :(得分:5)
如果他讲的是最糟糕的行为,那么你的讲师是正确的。
从一个例子中,你可以说运行时间“至少那么多”(并且可能更糟),但并不是说它“最多那么多”(因为它可能更糟)。
[对称地,当谈到最佳案例行为时,单个案例在上限提供保证。]
下限和上限是完全不同的东西。下限通常是“普遍地”建立的,即与任何特定算法无关。例如,在最坏的情况下,您不能在小于N.Log(N)比较中对序列进行排序,因为您需要区分N!可能的排列,这需要收集Lg(N!)位信息。
相反,确定特定算法的上限。例如,HeapSort从不超过2N.Lg(N)比较。当上限符合下限时,算法被认为是有效的。