big-o - 了解何时使用 theta 来计算时间复杂度
问题描述
我(相信)我了解 Big-O、Big-Ω 和 Big-Θ 的定义;其中 Big-O 是渐近上界,Big-Ω 是渐近下界,Big-Θ 是渐近紧界。但是,我一直对在某些情况下使用 Θ 感到困惑,例如在插入排序中:
据我了解,这表明插入排序将:
至少花费线性时间(它不会比线性时间运行得更快);根据大Ω。
最多
n^2
花费时间(不会超过n^2
);根据Big-O。
困惑源于我对何时使用 Big-Θ 的理解。为此,我被引导相信只有在 Big-O 和 Big-Ω 的值相同时才能使用 Big-Θ。如果是这样,为什么插入排序被认为是Θ(n^2)
当Ω
和O
值不同时?
解决方案
基本上,只有在算法运行时间的上限和下限之间没有渐近间隙时,才能使用 Big-Θ:
在您的示例中,插入排序最多需要 O(n^2) 时间(在最坏的情况下),并且需要 Ω(n) 的时间(在最好的情况下)。因此,O(n^2) 是算法的时间上限,Ω(n) 是算法的下限。由于这两个不相同,因此您不能使用 Big-Θ 来描述插入排序算法的运行时间。
但是,请考虑选择排序算法。它最坏情况下的运行时间是O(n^2),最好情况下运行时间是Ω(n^2)。因此,由于上界和下界相同(渐近),可以说选择排序算法的运行时间为 Θ(n^2)。
推荐阅读
- c# - 这是交换字节顺序的合法方式吗?
- ios - 如何使 UICollectionView 仅在触摸而不是触摸时选择一个单元格
- c# - 将 Func 列表作为单个 Func 返回
- sql - SQL:仅当同一行上的另一列具有不同值时才返回一列的值
- asp.net - 将值与会话进行比较,并根据会话值显示和隐藏菜单项
- python - 来自分组列表的 django 过滤器
- javascript - 如何在 React.js 中的 React-Redux-Tabs 中显示和操作多个 Ag-Grids 的数据
- javascript - 使用 Javascript 获取特定目录中的所有文件名
- javascript - handlebarjs 将地图打印为表格
- javascript - 当提示框将使用jquery时,当用户单击确定时如何从提示框真值显示警报