哪种记号表示增长的上界?
- ABig Omega
- BLittle omega
- CBig O
- DBig Theta
显示提示
- “至多”。
- 两个错误答案已被划掉。剩下的两个中有一个是正确的。
显示答案和解析
为什么是这个答案
O 表示上界,Ω 表示下界,Θ 表示紧确界(tight bound)。
免费的算法与复杂度选择练习题,附提示和解析,分三个难度:关键术语与事实, 概念应用, 案例与分析。
当 n 很大时,哪个复杂度类增长最快?
做得好。想再做下一题吗?准备好做下一题了吗? 每个主题每天都有 5 道新题。
算法是解决一个问题的有限的、精确的步骤列表,例如给一个列表排序,或在电话簿中查找一个名字。
两个算法可以解决同一个问题,但所用的时间可能相差很大。复杂度描述的是输入变大时工作量如何增长。
输入的规模称为 n:要排序的项目数、列表的长度、图中的节点数。
想一想在一本 1000 页的电话簿里找一个名字。读每一页最多需要 1000 步。从中间翻开并每次减半,大约只需要 10 步。
时间复杂度计算步骤数。空间复杂度计算额外的内存。两者都写成 n 的函数。
通常看最坏情况:规模为 n 的所有输入中工作量最大的情况。有时题目问的是平均情况或最好情况。
答案: 4 秒. n 加倍使 n² 乘以 2² = 4,所以时间从约 1 秒变为约 4 秒。2 秒是线性增长的答案,8 秒是 n³ 的答案。
大 O 记号只保留对大的 n 重要的部分。你要舍去常数因子,只保留增长最快的项。
当 n = 1000 时,n² 项是 3 000 000,而 5n 只有 5000。较小的项几乎不改变总数。
这些类别反复出现,按增长从慢到快排列:
大 O 是一个上界:工作量增长最多这么快。Ω(大欧米伽)是下界,Θ(西塔)是紧确界,既是上界也是下界。
对数的底在大 O 中无关紧要,因为不同底的对数只相差一个常数因子。
答案: O(n²). 对大的 n,n² 项占主导,常数因子 2 被舍去。O(n) 保留了错误的项,O(2n²) 忘了舍去常数。
几乎每门课程都会出现一些算法。把它们的复杂度当作事实记住。
递归函数在更小的输入上调用自身,直到遇到可以直接回答的基本情形。它的运行时间写成递推式:
有三种设计思想值得了解。分治是拆分、求解再合并。贪心每一步选取局部最优的选择。动态规划存储重叠子问题的答案,使它们只计算一次。
答案: O(n²). 枢轴不好时,每次划分都在一侧留下 n − 1 个项目,这给出 O(n²)。O(n log n) 是它的平均情况,也是归并排序的最坏情况。
要求一段代码的时间复杂度:
对于理论题,先指出它所描述的算法或思想,再回忆它的复杂度及条件(已排序的输入、非负权重、重叠子问题)。
跟着每一步走。打开下一步之前,先试着预测它。
这段代码的时间复杂度是多少?for i = 1 to n: (j = 1; while j < n: j = j × 2)
n 是循环运行到的数。
i 从 1 到 n,步长为 1,所以外层循环运行 n 次。
j 依次取 1、2、4、8、…,在达到 n 时停止。经过 k 轮后 j = 2k,所以循环大约经过 log₂ n 轮后停止。
内层循环在外层循环里面,所以次数相乘。
对 n = 1024,内层循环运行 log₂ 1024 = 10 次,所以循环体运行 1024 · 10 = 10 240 次。这远少于 n² = 1 048 576。
O(n log n)
答案: O(n). 依次执行的循环相加:n + n = 2n,舍去常数,得 O(n)。只有当一个循环在另一个里面时,O(n²) 才是对的。
P 包含可以在多项式时间内解决的问题。NP 包含其解可以在多项式时间内验证的问题。P 中的每个问题都在 NP 中;P = NP 是否成立仍然未知。
哪种记号表示增长的上界?
O 表示上界,Ω 表示下界,Θ 表示紧确界(tight bound)。
在一个有序数组中,你从两端各放一个指针向内移动,寻找和为目标值的两个元素。时间复杂度是多少?
如果和太小,左指针右移;如果和太大,右指针左移,因此最多 n 步。
Strassen 算法在矩阵乘法中对半尺寸的分块只做 7 次而不是 8 次递归乘法。它的运行时间是多少?
取 a = 7、b = 2,nlog₂ 7 压过 O(n²) 的加法工作量,结果约为 n2.81。
两个算法可以解决同一个问题,但所用的时间可能相差很大。复杂度描述的是输入变大时工作量如何增长。
输入的规模称为 n:要排序的项目数、列表的长度、图中的节点数。
每道题有四个选项,只有一个正确。 卡住了?先打开一个小提示,需要时再查看完整解析。