引入分治策略往往可以提升算法效率。一方面,分治策略减少了操作数量;另一方面,分治后有利于系统的并行优化。
分析时间复杂度时关注循环层数和每层迭代次数,递归算法则分析递归树。注意最坏/最好/平均情况的区别。
分析复杂度时注意外层循环和内层循环的关联。例如内外两层都到n的循环不一定是O(n²),要看内层是否每次都在缩小。
【考点】递归|分治策略|算法复杂度
本题考查 GESP 五级(C++)核心算法模块的“分治策略”概念。命题人特意用通俗表述检验考生是否理解分治的本质——将大问题拆解为同构小问题。五级考生常把“递归”与“分治”混为一谈,这题就是卡住那些只背定义、没理解思想的人。
解题关键在拆解命题的两部分:①“减少操作数”——分治通过降维(如排序从 O(n²)→O(nlogn))确实减少比较次数;②“利于并行”——分治天然把任务拆成独立子任务,是并行计算的基础。看到“往往提升”“有利于”这类温和表述,直接选 A。这类题的通法是:若命题陈述符合算法经典结论且无绝对化词汇,大概率正确。
陷阱在于命题用词极其“温和”——“往往”“有利于”留了余地。若考生死记硬背“分治一定更快”,遇到“总是减少操作数”就敢选 B,那就掉坑里了。命题人特意没写“总是”“必然”,就是防止机械记忆者误判。五级考生若只背结论、不理解分治思想(如归并排序的递归拆解),看到“并行优化”这种高大上词汇容易自我怀疑,反而选错。
若命题把“往往”改成“总是”,答案必变 B(因为分治有递归栈开销,操作数未必总减少)。反推命题人意图:这题就是考“温和表述”与“绝对概念”的区别。刷到类似题先问自己:命题人为什么选这个词?是不是在暗示某种特例。