证明算法的上限和下限
Proving an upper and lower bound for an algorithm
如何证明一种算法的上限和下限?
到目前为止,我认为需要通过考虑 all 输入来显示算法的上限和下限,并表明它不能比 f 差(n) [上限] 且不优于 g(n) [下限].
我的讲师说,对于上限,需要一般地证明它[考虑到所有输入],但对于下限,一个例子就足够了。
这让我很困惑。
谁能解释一下他的意思?
如果您的讲师谈到最坏情况的行为,他是对的。
从一个例子来看,您可以说 运行 时间是 "at least that much"(而且可能更糟),但不能说它是 "at most that much"(因为它可能更糟).
[对称地,当谈到最佳情况行为时,单个案例给出了上限的保证。]
下限和上限是完全不同的东西。下界通常建立 "universally",即与任何特定算法无关。例如,在最坏的情况下,您不能对少于 N.Log(N) 次比较的序列进行排序,因为您需要区分 N!可能的排列,这需要收集 Lg(N!) 位信息。
相反,上限是针对特定算法确定的。例如,HeapSort 永远不会超过 2N.Lg(N) 次比较。当上限满足下限时,该算法被认为是有效的。
如何证明一种算法的上限和下限?
到目前为止,我认为需要通过考虑 all 输入来显示算法的上限和下限,并表明它不能比 f 差(n) [上限] 且不优于 g(n) [下限].
我的讲师说,对于上限,需要一般地证明它[考虑到所有输入],但对于下限,一个例子就足够了。
这让我很困惑。 谁能解释一下他的意思?
如果您的讲师谈到最坏情况的行为,他是对的。
从一个例子来看,您可以说 运行 时间是 "at least that much"(而且可能更糟),但不能说它是 "at most that much"(因为它可能更糟).
[对称地,当谈到最佳情况行为时,单个案例给出了上限的保证。]
下限和上限是完全不同的东西。下界通常建立 "universally",即与任何特定算法无关。例如,在最坏的情况下,您不能对少于 N.Log(N) 次比较的序列进行排序,因为您需要区分 N!可能的排列,这需要收集 Lg(N!) 位信息。
相反,上限是针对特定算法确定的。例如,HeapSort 永远不会超过 2N.Lg(N) 次比较。当上限满足下限时,该算法被认为是有效的。