的含义是( )。
考点:大 O 定义(A1)。
(A1)考点::存在 和 ,当 时 —— 是 的渐近上界。
解析:大 O 不是等式而是不等式:描述增长率的上限——"至多这么快增长"。核心条件是"当 足够大时"(忽略小规模行为)。
排除法:选"等于"的人把上界当成了精确值;选"小于"的人漏了常数因子 ;选"无关"的人否定了约束关系。
"O(n²) 的算法"意味着( )。
考点:渐近上界含义(A2)。
(A2)考点:"O(n²) 的算法"意味着操作次数至多与 成正比( 足够大时)——是增长率上限。
解析: 不仅是 ,所有以平方为上界的式子都属于 。
排除法:选"恰好 " 的人忽略了低阶项与常数;选"至少"的人方向反(那是 );选"等于 毫秒"的人把复杂度等同于具体时间。
与 分别表示( )。
考点:Ω 与 Θ(A3)。
(A3)考点::渐近下界(至少这么快);:渐近紧确界(上下同阶)。。
解析: 是"不超过"、 是"不小于"、 是"恰好"——三者从不同角度描述增长率。日常说"某算法是 O(n log n)"时,多数场合实际指 。
按增长速度从慢到快排列,正确的是( )。
考点:常见量级排序(A4)。
(A4)考点:从慢到快:——标准量级阶梯。
解析:每级之间的差距随 增大而拉大: 时 、、 天文数字。
排除法:B 把 排在 之后反了;C 把 排在 之后反了;D 把 排最前。
当 足够大时, 与 的关系是( )。
考点:量级比较(A5)。
(A5)考点: 足够大时 更大:——平方的增长速度压倒 。
解析: 是"缓慢增长"的函数( 时 ),因此 远比 慢。
、、 统一写成( )。
考点:常数忽略(A6)。
(A6)考点:——大 O 忽略常数因子。
解析:(有限常数)时 ——倍数关系不改变量级。
排除法:选 的人把"常数因子"当成了"常数时间";选" 最精确"的人忘了大 O 本身就是忽略常数的记号。
的渐近复杂度是( )。
考点:低阶项忽略(A7)。
(A7)考点:——只保留最高阶项,忽略系数与低阶项。
解析: 时 项占绝对主导();低阶项对增长率无影响。
两段代码分别 和 ,顺序执行的整体复杂度是( )。
考点:大 O 加法(A8)。
(A8)考点:顺序执行的两段代码 与 :——顺序取最大。
解析:总代价 , 大时 项压倒 项。
排除法:选相乘 的人混淆了顺序与嵌套。
外层循环 内嵌循环 (嵌套),整体复杂度是( )。
考点:大 O 乘法(A9)。
(A9)考点:外层 嵌套内层 :——嵌套取乘积。
解析补充:本题考查复杂度分析的核心概念。掌握大 O 记号的定义与运算规则(嵌套取乘积、顺序取最大、忽略常数与低阶项)是分析代码的基础。
表示( )。
考点:O(1) 含义(A10)。
(A10)考点: 表示执行时间与输入规模无关——常数时间(数组访问、加减、swap)。
排除法: 不是"只执行一次"——是执行固定次数不随 变。
解析补充:本题考查复杂度分析的核心概念。掌握大 O 记号的定义与运算规则(嵌套取乘积、顺序取最大、忽略常数与低阶项)是分析代码的基础。
与 的关系是( )。
考点:对数的底(A11)。
(A11)考点:——换底只差常数因子,大 O 统一写 。
解析补充:本题考查复杂度分析的核心概念。掌握大 O 记号的定义与运算规则(嵌套取乘积、顺序取最大、忽略常数与低阶项)是分析代码的基础。
复杂度分析中的 指的是( )。
考点:输入规模 n(A12)。
(A12)考点: 指的是输入规模——数组长度、图的顶点数/边数、字符串长度等度量问题大小的量。
排除法:代码行数、秒数、测试组数都不是复杂度分析的 。
解析补充:本题考查复杂度分析的核心概念。掌握大 O 记号的定义与运算规则(嵌套取乘积、顺序取最大、忽略常数与低阶项)是分析代码的基础。
01for (int i = 0; i < n; ++i) 02 sum += a[i];
时间复杂度是( )。
考点:单层循环 O(n)(B1)。
(B1)考点:单层 for i < n 循环执行 次——。
解析补充:本题考查复杂度分析的核心概念。掌握大 O 记号的定义与运算规则(嵌套取乘积、顺序取最大、忽略常数与低阶项)是分析代码的基础。
01for (int i = 0; i < n; ++i) 02 for (int j = 0; j < n; ++j) 03 cnt++;
时间复杂度是( )。
考点:嵌套循环 O(n²)(B2)。
(B2)考点:两层独立嵌套各 次:——。
解析补充:本题考查复杂度分析的核心概念。掌握大 O 记号的定义与运算规则(嵌套取乘积、顺序取最大、忽略常数与低阶项)是分析代码的基础。
三层独立嵌套循环,每层 次,时间复杂度是( )。
考点:三层循环 O(n³)(B3)。
(B3)考点:三层独立嵌套各 次:——。
解析补充:本题考查复杂度分析的核心概念。掌握大 O 记号的定义与运算规则(嵌套取乘积、顺序取最大、忽略常数与低阶项)是分析代码的基础。
01for (int j = 1; j < n; j *= 2) 02 k++;
循环执行次数约为( ),时间复杂度是( )。
考点:j*=2 对数循环(B4)。
(B4)考点:j *= 2 使 每次翻倍: 时结束——循环 次,。
解析补充:本题考查复杂度分析的核心概念。掌握大 O 记号的定义与运算规则(嵌套取乘积、顺序取最大、忽略常数与低阶项)是分析代码的基础。
01for (int j = n; j > 0; j /= 2) 02 k++;
时间复杂度是( )。
考点:j/=2 对数循环(B5)。
(B5)考点:j /= 2 同理每次减半: 次结束。
解析补充:本题考查复杂度分析的核心概念。掌握大 O 记号的定义与运算规则(嵌套取乘积、顺序取最大、忽略常数与低阶项)是分析代码的基础。
01for (int i = 1; i * i < n; ++i) 02 k++;
时间复杂度是( )。
考点:i*i<n 开方循环(B6)。
(B6)考点:i*i < n 等价于 ——循环 次,。
解析补充:本题考查复杂度分析的核心概念。掌握大 O 记号的定义与运算规则(嵌套取乘积、顺序取最大、忽略常数与低阶项)是分析代码的基础。
01for (int i = 0; i < n; ++i) 02 for (int j = 1; j < n; j *= 2) 03 k++;
时间复杂度是( )。(2022 年 S 组真题考法)
考点:混合内外层(B7)。
(B7)考点:外层 次 × 内层 j *= 2 次 = 。(2022 年真题考法)
解析补充:本题考查复杂度分析的核心概念。掌握大 O 记号的定义与运算规则(嵌套取乘积、顺序取最大、忽略常数与低阶项)是分析代码的基础。
01int i = 0, j = n - 1; 02while (i < j) { i++; j--; }
时间复杂度是( )。
考点:双变量相向(B8)。
(B8)考点:i++; j-- 双指针从两端相向:共走 步——(常数 忽略)。
解析补充:本题考查复杂度分析的核心概念。掌握大 O 记号的定义与运算规则(嵌套取乘积、顺序取最大、忽略常数与低阶项)是分析代码的基础。
01for (int i = 0; i < n; ++i) 02 for (int j = 0; j < i; ++j) 03 cnt++;
时间复杂度是( )。
考点:内层依赖外层(B9)。
(B9)考点:内层 j < i 依赖外层 :总次数 ——。
解析补充:本题考查复杂度分析的核心概念。掌握大 O 记号的定义与运算规则(嵌套取乘积、顺序取最大、忽略常数与低阶项)是分析代码的基础。
01int i, j, k = 0; 02for (i = 0; i < n; i++) { 03 for (j = 0; j < n; j *= 2) { 04 k = k + n / 2; 05 } 06}
时间复杂度是( )。(2022 年 CSP-S 单选真题)
考点:代码段综合真题(B10)。
(B10)考点:外层 i++ 次 × 内层 j *= 2(注意初值 , 乘 恒为 ,循环不终止——但真题中初值为 时内层 次):整体 。(2022 年 S 组真题原题,考识别对数型内层)
排除法:选 的人没看到嵌套;选 的人误判内层为线性。
01while (n > 1) { n = n / 3; }
时间复杂度是( )。
考点:while 循环复杂度(B11)。
(B11)考点:n = n / 3 每次除以 : 时结束——(底 与底 同阶)。
解析补充:本题考查复杂度分析的核心概念。掌握大 O 记号的定义与运算规则(嵌套取乘积、顺序取最大、忽略常数与低阶项)是分析代码的基础。
01for (int i = 0; i < n; ++i) a[i]++; 02for (int i = 0; i < n * n; ++i) b[i]++;
整体时间复杂度是( )。
考点:连续循环取最大(B12)。
(B12)考点:两段顺序执行 与 ——取最大 。
解析补充:本题考查复杂度分析的核心概念。掌握大 O 记号的定义与运算规则(嵌套取乘积、顺序取最大、忽略常数与低阶项)是分析代码的基础。
01int a = 1, b = 2; 02swap(a, b); 03cout << a << b;
时间复杂度是( )。
考点:常数次操作(B13)。
(B13)考点:固定几步操作(swap、输出)不随 变——。
排除法:选 的人大 O 不写具体常数。
解析补充:本题考查复杂度分析的核心概念。掌握大 O 记号的定义与运算规则(嵌套取乘积、顺序取最大、忽略常数与低阶项)是分析代码的基础。
关于循环复杂度,错误的说法是( )。
考点:循环综合判断(B14)。
(B14)考点:嵌套取乘积 ✓、顺序取最大 ✓、j *= 2 对数 ✓;"所有嵌套都是 "错误——嵌套的复杂度取决于内层增长率(如外 内 得 )。
分析递归复杂度的"递归树"方法的核心思想是( )。
考点:递归树方法(C1)。
(C1)考点:递归树方法:逐层展开递归、计算每层总代价、所有层求和即总复杂度。
解析补充:本题考查复杂度分析的核心概念。掌握大 O 记号的定义与运算规则(嵌套取乘积、顺序取最大、忽略常数与低阶项)是分析代码的基础。
01int f(int n) { 02 if (n <= 1) return 1; 03 return f(n - 1) + 1; 04}
时间复杂度是( )。
考点:单分支递归 O(n)(C2)。
(C2)考点:f(n-1) 单分支每次减 :递归 层、每层 ——。
解析补充:本题考查复杂度分析的核心概念。掌握大 O 记号的定义与运算规则(嵌套取乘积、顺序取最大、忽略常数与低阶项)是分析代码的基础。
01int f(int n) { 02 if (n <= 1) return 1; 03 return f(n / 2) + 1; 04}
时间复杂度是( )。
考点:二分递归 O(log n)(C3)。
(C3)考点:f(n/2) 单分支每次减半:递归 层、每层 ——(二分查找递归式)。
解析补充:本题考查复杂度分析的核心概念。掌握大 O 记号的定义与运算规则(嵌套取乘积、顺序取最大、忽略常数与低阶项)是分析代码的基础。
01int fib(int n) { 02 if (n <= 1) return n; 03 return fib(n-1) + fib(n-2); 04}
时间复杂度约是( )。
考点:双子递归 O(2ⁿ)(C4)。
(C4)考点:fib(n-1) + fib(n-2) 双子树:递归树节点数指数增长——。
解析补充:本题考查复杂度分析的核心概念。掌握大 O 记号的定义与运算规则(嵌套取乘积、顺序取最大、忽略常数与低阶项)是分析代码的基础。
主定理(Master Theorem)处理形如 的递归式,其中 、、 的含义分别是( )。
考点:主定理形式(C5)。
(C5)考点:: 是子问题个数、 是规模缩小倍数、 是每层合并代价。
解析补充:本题考查复杂度分析的核心概念。掌握大 O 记号的定义与运算规则(嵌套取乘积、顺序取最大、忽略常数与低阶项)是分析代码的基础。
的解是( )。
考点:主定理 T(n)=2T(n/2)+O(n)(C6)。
(C6)考点:,:每层代价 × 层 = ——归并排序递归式。
解析补充:本题考查复杂度分析的核心概念。掌握大 O 记号的定义与运算规则(嵌套取乘积、顺序取最大、忽略常数与低阶项)是分析代码的基础。
的解是( )。
考点:主定理 T(n)=2T(n/2)+O(1)(C7)。
(C7)考点:,:叶节点主导 个叶各 = 。
解析补充:本题考查复杂度分析的核心概念。掌握大 O 记号的定义与运算规则(嵌套取乘积、顺序取最大、忽略常数与低阶项)是分析代码的基础。
的解是( )。
考点:主定理 T(n)=T(n/2)+O(1)(C8)。
(C8)考点:,: 层每层 = ——二分查找。
解析补充:本题考查复杂度分析的核心概念。掌握大 O 记号的定义与运算规则(嵌套取乘积、顺序取最大、忽略常数与低阶项)是分析代码的基础。
递归深度为 的递归函数,栈空间复杂度是( )(每帧 局部变量)。
考点:递归深度与栈空间(C9)。
(C9)考点:递归深度 、每帧 局部变量:栈空间 。
解析补充:本题考查复杂度分析的核心概念。掌握大 O 记号的定义与运算规则(嵌套取乘积、顺序取最大、忽略常数与低阶项)是分析代码的基础。
朴素斐波那契递归 fib(40) 在普通电脑上( )。
考点:斐波那契递归复杂度(C10)。
(C10)考点:朴素斐波那契 : 时约 次调用——普通电脑需数秒到数十秒。
排除法:选"瞬间完成"的人低估了指数爆炸;选" GB"的人把时间混淆为空间。
归并排序的递归式与主定理求解结果是( )。
考点:归并排序递归式(C11)。
(C11)考点:归并排序 ,,解 。
解析补充:本题考查复杂度分析的核心概念。掌握大 O 记号的定义与运算规则(嵌套取乘积、顺序取最大、忽略常数与低阶项)是分析代码的基础。
关于递归复杂度,错误的说法是( )。
考点:递归综合判断(C12)。
(C12)考点:"所有递归都比循环慢"错误——递归与循环是同一逻辑的两种表达;编译器可优化尾递归为循环;实际速度取决于编译器与硬件。
解析补充:本题考查复杂度分析的核心概念。掌握大 O 记号的定义与运算规则(嵌套取乘积、顺序取最大、忽略常数与低阶项)是分析代码的基础。
冒泡排序的平均与最坏时间复杂度是( )。
考点:冒泡复杂度(D1)。
(D1)考点:冒泡排序平均与最坏均 ——最好 需提前退出优化。
解析补充:本题考查复杂度分析的核心概念。掌握大 O 记号的定义与运算规则(嵌套取乘积、顺序取最大、忽略常数与低阶项)是分析代码的基础。
插入排序的最好与最坏时间复杂度是( )。
考点:插入复杂度(D2)。
(D2)考点:插入排序最好 (基本有序)、最坏 (完全逆序)。
解析补充:本题考查复杂度分析的核心概念。掌握大 O 记号的定义与运算规则(嵌套取乘积、顺序取最大、忽略常数与低阶项)是分析代码的基础。
归并排序的最好、平均、最坏时间复杂度是( )。
考点:归并复杂度(D3)。
(D3)考点:归并排序最好、平均、最坏均为 ——分区永远对半、与数据无关。
解析补充:本题考查复杂度分析的核心概念。掌握大 O 记号的定义与运算规则(嵌套取乘积、顺序取最大、忽略常数与低阶项)是分析代码的基础。
快速排序的最坏时间复杂度是( )。
考点:快排复杂度(D4)。
(D4)考点:快排最坏 (已序+首元素基准)——平均 。
解析补充:本题考查复杂度分析的核心概念。掌握大 O 记号的定义与运算规则(嵌套取乘积、顺序取最大、忽略常数与低阶项)是分析代码的基础。
堆排序的最好、平均、最坏时间复杂度是( )。
考点:堆排复杂度(D5)。
(D5)考点:堆排最好、平均、最坏均为 。
解析补充:本题考查复杂度分析的核心概念。掌握大 O 记号的定义与运算规则(嵌套取乘积、顺序取最大、忽略常数与低阶项)是分析代码的基础。
计数排序的时间复杂度是( )( 个元素、值域 )。
考点:计数排序复杂度(D6)。
(D6)考点:计数排序 ——非比较类,不受 下界约束。
解析补充:本题考查复杂度分析的核心概念。掌握大 O 记号的定义与运算规则(嵌套取乘积、顺序取最大、忽略常数与低阶项)是分析代码的基础。
基于比较的排序算法,最坏情况的比较次数下界是( )。
考点:比较排序下界(D7)。
(D7)考点:基于比较的排序最坏比较次数下界 —— 种排列、每次比较至多砍半。
解析补充:本题考查复杂度分析的核心概念。掌握大 O 记号的定义与运算规则(嵌套取乘积、顺序取最大、忽略常数与低阶项)是分析代码的基础。
以下排序算法中,最坏情况仍保持 的是( )。
考点:排序复杂度对比表(D8)。
(D8)考点:最坏仍 的排序:归并与堆排;快排最坏退化 。
解析补充:本题考查复杂度分析的核心概念。掌握大 O 记号的定义与运算规则(嵌套取乘积、顺序取最大、忽略常数与低阶项)是分析代码的基础。
算法的空间复杂度指的是( )。
考点:空间复杂度定义(E1)。
(E1)考点:空间复杂度 算法执行过程中占用的额外存储空间随 的增长率。
解析补充:本题考查复杂度分析的核心概念。掌握大 O 记号的定义与运算规则(嵌套取乘积、顺序取最大、忽略常数与低阶项)是分析代码的基础。
int a[10000]; 的空间复杂度是( )。
考点:数组空间计算(E2)。
(E2)考点:int a[10000] 大小固定 字节——(不随 变)。
排除法:选 的人大 O 不写具体数字。
解析补充:本题考查复杂度分析的核心概念。掌握大 O 记号的定义与运算规则(嵌套取乘积、顺序取最大、忽略常数与低阶项)是分析代码的基础。
int g[n][n];( 是运行时输入)的空间复杂度是( )。
考点:二维数组空间(E3)。
(E3)考点:int g[n][n] 大小 ——。
解析补充:本题考查复杂度分析的核心概念。掌握大 O 记号的定义与运算规则(嵌套取乘积、顺序取最大、忽略常数与低阶项)是分析代码的基础。
递归深度为 的函数(每帧 变量),空间复杂度是( )。
考点:递归栈空间(E4)。
(E4)考点:递归深度 、每帧 :栈空间 。
解析补充:本题考查复杂度分析的核心概念。掌握大 O 记号的定义与运算规则(嵌套取乘积、顺序取最大、忽略常数与低阶项)是分析代码的基础。
冒泡排序、插入排序、快速排序的共同空间特征是( )。
考点:原地排序空间(E5)。
(E5)考点:冒泡/插入/快排均为 额外空间(原地排序)。
解析补充:本题考查复杂度分析的核心概念。掌握大 O 记号的定义与运算规则(嵌套取乘积、顺序取最大、忽略常数与低阶项)是分析代码的基础。
归并排序的空间复杂度是( )。
考点:归并辅助数组(E6)。
(E6)考点:归并排序合并需 临时数组。
解析补充:本题考查复杂度分析的核心概念。掌握大 O 记号的定义与运算规则(嵌套取乘积、顺序取最大、忽略常数与低阶项)是分析代码的基础。
vector<int> v; 依次 push_back 个元素,最坏情况下 vector 的空间复杂度是( )。
考点:vector 动态空间(E7)。
(E7)考点:vector 倍增扩容最大 空间。
解析补充:本题考查复杂度分析的核心概念。掌握大 O 记号的定义与运算规则(嵌套取乘积、顺序取最大、忽略常数与低阶项)是分析代码的基础。
"空间换时间"的典型例子是( )。
考点:空间换时间(E8)。
(E8)考点:用 标记数组把 查找降为 ——空间换时间。
解析补充:本题考查复杂度分析的核心概念。掌握大 O 记号的定义与运算规则(嵌套取乘积、顺序取最大、忽略常数与低阶项)是分析代码的基础。
时, 的 int 二维数组约需( )。
考点:常见空间量级(E9)。
(E9)考点: 时 int 数组需 GB——开不出。
解析补充:本题考查复杂度分析的核心概念。掌握大 O 记号的定义与运算规则(嵌套取乘积、顺序取最大、忽略常数与低阶项)是分析代码的基础。
关于空间复杂度,错误的是( )。
考点:空间综合判断(E10)。
(E10)考点:int a[1000000] 大小固定—— 不是 。选""为错误。
解析补充:本题考查复杂度分析的核心概念。掌握大 O 记号的定义与运算规则(嵌套取乘积、顺序取最大、忽略常数与低阶项)是分析代码的基础。
记忆化搜索的核心思想是( )。
考点:记忆化定义(F1)。
(F1)考点:记忆化 用数组/哈希表缓存已计算的子问题结果,再次遇到直接查表。
解析补充:本题考查复杂度分析的核心概念。掌握大 O 记号的定义与运算规则(嵌套取乘积、顺序取最大、忽略常数与低阶项)是分析代码的基础。
记忆化搜索最适合的场景是( )。
考点:适用场景(F2)。
(F2)考点:最适合大量重复子问题的场景(斐波那契、背包、路径计数)。
解析补充:本题考查复杂度分析的核心概念。掌握大 O 记号的定义与运算规则(嵌套取乘积、顺序取最大、忽略常数与低阶项)是分析代码的基础。
朴素斐波那契递归是 ;加记忆化后时间复杂度变为( )。
考点:斐波那契记忆化(F3)。
(F3)考点:朴素 → 记忆化 : 个状态各算一次。
解析补充:本题考查复杂度分析的核心概念。掌握大 O 记号的定义与运算规则(嵌套取乘积、顺序取最大、忽略常数与低阶项)是分析代码的基础。
记忆化搜索中标记数组 memo[n] 的初始值与含义是( )。
考点:状态标记数组(F4)。
(F4)考点:memo[n] 初始 表示"未计算";算后存真实值;遇已算直接返回。
排除法:初始 不能区分"结果恰好为 "与"未算"。
解析补充:本题考查复杂度分析的核心概念。掌握大 O 记号的定义与运算规则(嵌套取乘积、顺序取最大、忽略常数与低阶项)是分析代码的基础。
记忆化搜索与递推(动态规划)的关系是( )。
考点:记忆化与递推关系(F5)。
(F5)考点:记忆化 自顶向下 DP;递推 自底向上 DP——本质等价、复杂度相同。
解析补充:本题考查复杂度分析的核心概念。掌握大 O 记号的定义与运算规则(嵌套取乘积、顺序取最大、忽略常数与低阶项)是分析代码的基础。
记忆化搜索把斐波那契从 降到 ,改善的关键在于( )。
考点:记忆化复杂度改善(F6)。
(F6)考点:改善关键是每个状态只算一次—— 个状态 × 次计算 = 。
解析补充:本题考查复杂度分析的核心概念。掌握大 O 记号的定义与运算规则(嵌套取乘积、顺序取最大、忽略常数与低阶项)是分析代码的基础。
记忆化搜索代码的标准框架是( )。
考点:记忆化代码框架(F7)。
(F7)考点:标准三步:查表返回 → 递归计算 → 存表返回。
解析补充:本题考查复杂度分析的核心概念。掌握大 O 记号的定义与运算规则(嵌套取乘积、顺序取最大、忽略常数与低阶项)是分析代码的基础。
记忆化与普通递归的根本区别是( )。
考点:记忆化 vs 普通递归(F8)。
(F8)考点:普通递归可能重复计算;记忆化保证每个子问题只算一次。
解析补充:本题考查复杂度分析的核心概念。掌握大 O 记号的定义与运算规则(嵌套取乘积、顺序取最大、忽略常数与低阶项)是分析代码的基础。
记忆化适用的必要条件是( )。
考点:记忆化适用条件(F9)。
(F9)考点:需要最优子结构 + 重叠子问题——不重叠则没有重复可省。
解析补充:本题考查复杂度分析的核心概念。掌握大 O 记号的定义与运算规则(嵌套取乘积、顺序取最大、忽略常数与低阶项)是分析代码的基础。
关于记忆化搜索,错误的是( )。
考点:记忆化综合(F10)。
(F10)考点:记忆化不一定降到 ——降到的复杂度 状态数 × 每状态计算量。选""为错误。
解析补充:本题考查复杂度分析的核心概念。掌握大 O 记号的定义与运算规则(嵌套取乘积、顺序取最大、忽略常数与低阶项)是分析代码的基础。
搜索算法中的"剪枝"指的是( )。
考点:剪枝定义(G1)。
(G1)考点:剪枝 搜索过程中提前排除不可能产生解的分支——"剪掉"无用的子树。
解析补充:本题考查复杂度分析的核心概念。掌握大 O 记号的定义与运算规则(嵌套取乘积、顺序取最大、忽略常数与低阶项)是分析代码的基础。
"当前已选数之和已超过目标 ,直接 return"——这是哪种剪枝( )。
考点:可行性剪枝(G2)。
(G2)考点:当前已不满足约束(如 sum > t)→ 此分支不可能有解——可行性剪枝。
解析补充:本题考查复杂度分析的核心概念。掌握大 O 记号的定义与运算规则(嵌套取乘积、顺序取最大、忽略常数与低阶项)是分析代码的基础。
"求最大值时,当前价值加剩余全选仍 当前最优,剪掉"——这是( )。
考点:最优性剪枝(G3)。
(G3)考点:当前上界仍不优于已知最优 → 继续无意义——最优性剪枝(上界剪枝)。
解析补充:本题考查复杂度分析的核心概念。掌握大 O 记号的定义与运算规则(嵌套取乘积、顺序取最大、忽略常数与低阶项)是分析代码的基础。
"先试较大的候选数再试较小的"——这属于( )。
考点:搜索顺序剪枝(G4)。
(G4)考点:调整尝试顺序使好分支先走、坏分支更早暴露——搜索顺序剪枝。
解析补充:本题考查复杂度分析的核心概念。掌握大 O 记号的定义与运算规则(嵌套取乘积、顺序取最大、忽略常数与低阶项)是分析代码的基础。
- 剪枝用于( )。
考点:α-β 剪枝概念(G5)。
(G5)考点:- 用于博弈树:最大化层 、最小化层 , 时剪。
解析补充:本题考查复杂度分析的核心概念。掌握大 O 记号的定义与运算规则(嵌套取乘积、顺序取最大、忽略常数与低阶项)是分析代码的基础。
正确的剪枝不会改变算法的正确性,原因是( )。
考点:剪枝不改变正确性(G6)。
(G6)考点:被剪分支保证不包含更优解——留下的搜索空间仍包含最优解。
解析补充:本题考查复杂度分析的核心概念。掌握大 O 记号的定义与运算规则(嵌套取乘积、顺序取最大、忽略常数与低阶项)是分析代码的基础。
剪枝的加速效果通常用( )来衡量。
考点:剪枝效果评估(G7)。
(G7)考点:用搜索树实际访问节点数减少比例来衡量。
解析补充:本题考查复杂度分析的核心概念。掌握大 O 记号的定义与运算规则(嵌套取乘积、顺序取最大、忽略常数与低阶项)是分析代码的基础。
不剪枝的 DFS 在解空间为排列()时, 的搜索量约是( )。
考点:剪枝与搜索空间(G8)。
(G8)考点: 的排列搜索空间 ——不剪枝几乎不可行。
解析补充:本题考查复杂度分析的核心概念。掌握大 O 记号的定义与运算规则(嵌套取乘积、顺序取最大、忽略常数与低阶项)是分析代码的基础。
从若干正整数中选一些使和恰好为 ,DFS 搜索时应在什么条件下剪枝( )。
考点:典型剪枝代码(G9)。
(G9)考点:正整数选和恰好 :sum > t 时剪——正整数只增不减,可行性剪枝。
解析补充:本题考查复杂度分析的核心概念。掌握大 O 记号的定义与运算规则(嵌套取乘积、顺序取最大、忽略常数与低阶项)是分析代码的基础。
关于剪枝,错误的是( )。
考点:剪枝综合(G10)。
(G10)考点:剪枝不可以去掉可能包含最优解的分支——那是错误剪枝。选此说法为错误。
解析补充:本题考查复杂度分析的核心概念。掌握大 O 记号的定义与运算规则(嵌套取乘积、顺序取最大、忽略常数与低阶项)是分析代码的基础。
分治法的三个步骤是( )。
考点:分治三步骤(H1)。
(H1)考点:分(拆子问题)→ 治(递归解决)→ 合(合并结果)。
解析补充:本题考查复杂度分析的核心概念。掌握大 O 记号的定义与运算规则(嵌套取乘积、顺序取最大、忽略常数与低阶项)是分析代码的基础。
分治与递归的关系是( )。
考点:分治与递归(H2)。
(H2)考点:分治通常用递归实现——"分"就是递归调用自身处理子问题;但递归不一定是分治(单分支递归没有"分")。
解析补充:本题考查复杂度分析的核心概念。掌握大 O 记号的定义与运算规则(嵌套取乘积、顺序取最大、忽略常数与低阶项)是分析代码的基础。
归并排序中"分"与"合"分别指( )。
考点:归并排序分治(H3)。
(H3)考点:归并排序:分 对半拆到单元素;合 合并两个有序段。
解析补充:本题考查复杂度分析的核心概念。掌握大 O 记号的定义与运算规则(嵌套取乘积、顺序取最大、忽略常数与低阶项)是分析代码的基础。
快速排序中"分"的具体操作是( )。
考点:快速排序分治(H4)。
(H4)考点:快排:分 分区(基准落位、左小右大);合不需要显式操作(分区内自然有序后拼接)。
解析补充:本题考查复杂度分析的核心概念。掌握大 O 记号的定义与运算规则(嵌套取乘积、顺序取最大、忽略常数与低阶项)是分析代码的基础。
二分查找也可以看作分治,它的递归式与复杂度是( )。
考点:二分查找分治(H5)。
(H5)考点:二分查找 ,——每次只保留一半。
解析补充:本题考查复杂度分析的核心概念。掌握大 O 记号的定义与运算规则(嵌套取乘积、顺序取最大、忽略常数与低阶项)是分析代码的基础。
适合用分治法的问题应满足的条件不包括( )。
考点:分治适用条件(H6)。
(H6)考点:分治需要子问题独立(不共享子子问题)——选"必须有交集"为错误。有交集应考虑 DP。
解析补充:本题考查复杂度分析的核心概念。掌握大 O 记号的定义与运算规则(嵌套取乘积、顺序取最大、忽略常数与低阶项)是分析代码的基础。
分治算法的复杂度取决于( )。
考点:分治复杂度分析(H7)。
(H7)考点:分治复杂度取决于子问题数 、缩小倍数 、合并代价 ——主定理三参数。
解析补充:本题考查复杂度分析的核心概念。掌握大 O 记号的定义与运算规则(嵌套取乘积、顺序取最大、忽略常数与低阶项)是分析代码的基础。
主定理中 与 的比较决定了复杂度的"档位": 时是( )。
考点:主定理与分治(H8)。
(H8)考点: 时每层代价相同 × 层 ——归并排序 得 。
解析补充:本题考查复杂度分析的核心概念。掌握大 O 记号的定义与运算规则(嵌套取乘积、顺序取最大、忽略常数与低阶项)是分析代码的基础。
下列问题中,典型用分治法解决的是( )。
考点:分治实例(H9)。
(H9)考点:归并排序、快速排序、二分查找是分治的典型应用;冒泡是逐对比较、Dijkstra 是贪心。
解析补充:本题考查复杂度分析的核心概念。掌握大 O 记号的定义与运算规则(嵌套取乘积、顺序取最大、忽略常数与低阶项)是分析代码的基础。
关于分治,错误的是( )。
考点:分治综合(H10)。
(H10)考点:不是所有问题都能用分治高效解决——需要满足可分解、子问题独立、可合并三条件。选"都能"为错误。
解析补充:本题考查复杂度分析的核心概念。掌握大 O 记号的定义与运算规则(嵌套取乘积、顺序取最大、忽略常数与低阶项)是分析代码的基础。
01for (int i = 0; i < n; ++i) 02 for (int j = i; j < n; ++j) 03 k++;
时间复杂度是( )。
考点:综合代码分析一(I1)。
(I1)考点:内层 j = i; j < n:总次数 ——。
解析补充:本题考查复杂度分析的核心概念。掌握大 O 记号的定义与运算规则(嵌套取乘积、顺序取最大、忽略常数与低阶项)是分析代码的基础。
01for (int i = 1; i <= n; ++i) 02 for (int j = 1; j <= n; j += i) 03 k++;
时间复杂度是( )(调和级数 )。
考点:综合代码分析二(I2)。
(I2)考点:内层 j += i 步长 :对每个 执行 次,总和 ——(调和级数)。
01void f(int n) { 02 if (n <= 1) return; 03 f(n / 2); 04 f(n / 2); 05 for (int i = 0; i < n; ++i) k++; 06}
时间复杂度是( )。
考点:综合代码分析三(I3)。
(I3)考点:,——(归并排序递归式标准形态)。
解析补充:本题考查复杂度分析的核心概念。掌握大 O 记号的定义与运算规则(嵌套取乘积、顺序取最大、忽略常数与低阶项)是分析代码的基础。
在 个数的无序数组中找最大元素,最少需要( )次比较。
考点:真题型代码段(I4)。
(I4)考点: 个数找最大:擂台法每个元素(除第一个)比较一次——恰好 次。这是下界也是上界——不可能比 更少(每个非首元素至少被看过一次)。(2022 年 S 组真题)
排除法:选 的人误以为可以跳着比;选 的人多算了一次。
01void g(int n) { 02 if (n <= 0) return; 03 for (int i = 0; i < n; ++i) k++; 04 g(n / 2); 05}
时间复杂度是( )。
考点:递归+循环混合(I5)。
(I5)考点::总代价 ——(等比级数收敛)。
解析补充:本题考查复杂度分析的核心概念。掌握大 O 记号的定义与运算规则(嵌套取乘积、顺序取最大、忽略常数与低阶项)是分析代码的基础。
01int c = 0; 02for (int i = 1; i * i <= n; ++i) 03 for (int j = 1; j <= n; j *= 3) 04 c++;
时间复杂度是( )。
考点:多重循环变式(I6)。
(I6)考点:外层 即 次 × 内层 j *= 3 即 次 = 。
解析补充:本题考查复杂度分析的核心概念。掌握大 O 记号的定义与运算规则(嵌套取乘积、顺序取最大、忽略常数与低阶项)是分析代码的基础。
将 、、、、 按增长从慢到快排列,正确的是( )。
考点:复杂度排序(I7)。
(I7)考点:——标准阶梯。
排除法:B 把 与 排反( 所以 更大);C/D 方向反。
、时限 秒(约 次运算), 的算法( )。
考点:量级估算(I8)。
(I8)考点:、 次——远小于 上限,可以通过。
解析补充:本题考查复杂度分析的核心概念。掌握大 O 记号的定义与运算规则(嵌套取乘积、顺序取最大、忽略常数与低阶项)是分析代码的基础。
算法一定比 快,这个说法( )。
考点:综合判断一(I9)。
(I9)考点: 比 快在渐近意义上成立;小 时 的常数可能很大反而慢——大 O 只描述增长趋势。
解析补充:本题考查复杂度分析的核心概念。掌握大 O 记号的定义与运算规则(嵌套取乘积、顺序取最大、忽略常数与低阶项)是分析代码的基础。
关于时间与空间复杂度,错误的是( )。
考点:综合判断二(I10)。
(I10)考点:时间与空间复杂度不必相同——选"必须相同"为错误。
解析补充:本题考查复杂度分析的核心概念。掌握大 O 记号的定义与运算规则(嵌套取乘积、顺序取最大、忽略常数与低阶项)是分析代码的基础。
的算法中, 翻倍时操作次数( )。
考点:综合判断三(I11)。
(I11)考点: 翻倍时 ——对数算法只增加 次操作。
解析补充:本题考查复杂度分析的核心概念。掌握大 O 记号的定义与运算规则(嵌套取乘积、顺序取最大、忽略常数与低阶项)是分析代码的基础。
一个算法的时间复杂度是 ,另一个是 ,当 时大约差多少倍( )。
考点:综合判断四(I12)。
(I12)考点: 时 倍——差距巨大。
解析补充:本题考查复杂度分析的核心概念。掌握大 O 记号的定义与运算规则(嵌套取乘积、顺序取最大、忽略常数与低阶项)是分析代码的基础。
记忆化搜索与递推的关系,正确的是( )。
考点:综合判断五(I13)。
(I13)考点:记忆化(自顶向下)与递推(自底向上)本质等价——不是只能选其一。
解析补充:本题考查复杂度分析的核心概念。掌握大 O 记号的定义与运算规则(嵌套取乘积、顺序取最大、忽略常数与低阶项)是分析代码的基础。
,下列复杂度中在 秒内无法完成的是( )(设 秒约 次运算)。
考点:综合判断六(I14)。
(I14)考点:: 次,超出 上限 倍——无法完成。其余均可通过。
解析补充:本题考查复杂度分析的核心概念。掌握大 O 记号的定义与运算规则(嵌套取乘积、顺序取最大、忽略常数与低阶项)是分析代码的基础。
对于给定的 ,分析以下代码段对应的时间复杂度,其中最为准确的时间复杂度为( )。
01int i, j, k = 0; 02for (i = 0; i < n; i++) { 03 for (j = 0; j < n; j *= 2) { 04 k = k + n / 2; 05 } 06}
以比较为基本运算,在 个数的数组中找最大的数,在最坏情况下至少要做( )次运算。
假设一个长度为 的整数数组中每个元素值互不相同,且这个数组是无序的。要找到这个数组中最大元素的时间复杂度是多少?( )