【软考算法】软件设计师下午第四题算法系列完结篇:从“放弃“到“稳拿“的备考心法

前面六篇我们把分治法、动态规划、贪心算法、回溯法、递归与递推、链表树图六大板块过了一遍。今天不聊具体代码,聊聊**考场上怎么把这 15 分从"直接放弃"变成"稳拿七八分"**。

一、七篇算法,一场考试:先做个回顾

这个系列从一开始的总纲,到分治法、DP、贪心、回溯、递归递推、链表树图,覆盖了第四题 90% 以上的考点。如果你一路跟着看下来,至少应该对下面这些词不再陌生了:

  • 分治法:归并排序、快速排序、最大子数组——记住"拆、治、合"和递归式 T(n) = 2T(n/2) + n

  • 动态规划:0-1 背包、最长公共子序列——记住"填表"和状态转移方程;

  • 贪心算法:活动选择、Prim 最小生成树——记住"局部最优"和"每次选当前最小的";

  • 回溯法:N 皇后、0-1 背包回溯版——记住"递归尝试 + 约束检查 + 剪枝/回溯";

  • 递归与递推:斐波那契、汉诺塔、阶乘——记住"递归出口"和"自己调用自己";

  • 链表/树/图:中序遍历非递归、链表逆置、图 DFS——记住"指针指对、顺序走对"。

但知道和拿到分之间,还差一个东西:考场策略


二、下午题全局时间分配:90 分钟六道题

软件设计师下午《应用技术》共 90 分钟,6 道大题。时间分配决定了你能不能从容地做完,而不是做到第四题就崩盘。

题号内容分值建议用时优先级
第 1 题数据流图20 分25~30 分钟
第 2 题数据库设计15 分20~25 分钟
第 3 题UML 建模15 分20~25 分钟
第 4 题算法(C 语言)15 分20~25 分钟
第 5 题设计模式(Java/C++ 二选一)15 分20~25 分钟
第 6 题设计模式(Java/C++ 二选一)15 分不做

注意:第 5、6 题是二选一,选你熟悉的那道。如果你前面跟我一起把设计模式系列啃完了,这 15 分基本是白送的。

关键策略第 4 题可以放在最后做。前三题套路固定,练熟了就是送分题;第 5/6 题设计模式也是送分题。先把这 50 分的"基本盘"稳稳拿到手,再回来啃第四题这块硬骨头。这样即使第四题只拿了 5 分,前面 50 分 + 后面 5 分 = 55 分,也过线了。

千万不要在第四题上死磕 40 分钟,导致后面设计模式的送分题没时间做。那是战略性自杀。


三、第四题的"抢分"策略:把 15 分拆成四块

第四题的 15 分,通常由四部分组成。每一块都有对应的"抢分"技巧:

1. 算法策略识别(3 分)—— 必拿,送分题

看到代码里有:

  • 递归拆两半 + 合并 → 分治法

  • 二维数组填表 + 从子问题推父问题 → 动态规划

  • "每次选当前最优"、"局部最优" → 贪心算法

  • 递归尝试 + 不满足就退回去 → 回溯法

  • 函数自己调用自己 + 递归出口 → 递归

这 3 分是白送的,一定要拿到

2. 复杂度分析(3 分)—— 背下来就有分

把这张表印在脑子里:

算法时间复杂度空间复杂度
归并排序O(n log n)O(n)
快速排序(平均)O(n log n)O(log n)
快速排序(最坏)O(n²)O(n)
0-1 背包 DPO(n × C)O(n × C) / O(C)
LCSO(m × n)O(m × n)
活动选择(贪心)O(n log n)O(n)
Prim(邻接矩阵)O(V²)O(V)
N 皇后(回溯)O(n!)O(n)
汉诺塔O(2^n)O(n)
斐波那契递归O(2^n)O(n)
斐波那契递推O(n)O(1)
二叉树遍历O(n)O(h) / O(n)

考场上如果记不清,记住几个万能规律

  • 有双重循环填二维表 → O(n²)O(m × n)

  • 有递归拆两半 → O(n log n)

  • 有递归逐层减一 → O(n)O(2^n)

  • 有暴力回溯 → O(2^n)O(n!)

3. 代码填空(6~9 分)—— 能填就填,不能填就跳过

这是第四题的大头,也是最难的部分。但有几个技巧可以提高命中率:

技巧一:找递归出口 看到 if (___) 后面直接 return,填边界条件

  • 排序/分治:begin >= endlow >= high

  • 递归数列:n == 1n == 0n <= 2

  • 链表:p == NULL

  • 树:root == NULL

技巧二:找递归调用 看到函数名后面跟参数,但参数变了:

  • 分治:mergeSort(arr, begin, mid) + mergeSort(arr, mid+1, end)

  • 快排:quickSort(arr, low, pivotPos-1)

  • 回溯:backtrack(k+1, ...)

  • 汉诺塔:hanoi(n-1, ...)

技巧三:找指针操作

  • 链表入栈/头插:q->link = stacktop; stacktop = q;

  • 链表出栈:stacktop = stacktop->link;

  • 二叉树向左:ptr = ptr->lchild;

  • 二叉树向右:ptr = ptr->rchild;

技巧四:找状态转移

  • DP 背包:max(dp[i-1][j], dp[i-1][j-w[i]] + v[i])

  • LCS:dp[i-1][j-1] + 1max(dp[i-1][j], dp[i][j-1])

如果实在不会,不要空着。根据上下文猜一个最合理的答案,写上去。软考阅卷是按点给分,写错了不扣分,写对了就给分。

4. 实例推演(3 分)—— 草稿纸走一遍

给定输入,让你写出输出。这题没有捷径,就是在草稿纸上一步一步走代码。不要嫌麻烦,走一遍比看十遍都管用。

走的过程中:

  • 标清楚每一步变量的值;

  • 递归的话画出调用栈;

  • 填表的话把表格画出来。


四、各板块得分预期:别想着满分,想着稳分

根据前面六篇的案例难度,给你一个现实的得分预期

板块题目难度预期得分拿分关键
分治法中等7~10 分归并/快排代码模板背熟
动态规划较难6~9 分状态转移方程填对
贪心算法中等7~10 分策略识别 + 复杂度
回溯法中等6~8 分递归出口 + 约束条件
递归与递推较易8~10 分递归出口 + 调用式
链表/树/图中等7~10 分指针操作 + 遍历顺序

底线目标:第四题拿 7 分(策略识别 3 分 + 复杂度 3 分 + 代码填空蒙对 1 空)。

理想目标:第四题拿 10 分(策略识别 3 分 + 复杂度 3 分 + 代码填空对 2~3 空 + 实例推演对)。

天花板:第四题拿 12~15 分。这需要你对算法有较深的理解,且考场上状态好。但记住,45 分及格,不需要天花板


五、"不会也能拿分"的猜题口诀

最后送你一套猜题口诀,考场上脑子一片空白时,拿出来用:

策略识别四选一:

  • 拆两半、递归、合并 → 分治

  • 填表、子问题推父问题 → 动态规划

  • 选当前最优、不回头 → 贪心

  • 尝试、冲突、退回去 → 回溯

  • 自己调用自己、有出口 → 递归

复杂度常见值:

  • 排序类 → O(n log n)

  • 填表类 → O(n²)

  • 暴力递归 → O(2^n)

  • 树遍历 → O(n)

代码填空看上下文:

  • if (___) 后面直接 return → 找边界条件

  • 函数名 + 变参数 → 找递归调用

  • -> 箭头 → 找指针成员lchildrchildnextlink

  • max(min( → 找状态转移比较逻辑


六、写在最后:45 分及格,不是 75 分满分

备考软件设计师,很多人死在两个心态上:

一是"完美主义":非要把每道题都搞懂,结果时间不够,后面送分题没时间做。

二是"自我放弃":看到第四题是算法,直接跳过,连策略识别和复杂度的 6 分都不要了。

这两种心态都要不得。软考是通过性考试,不是选拔性考试。45 分及格,意味着你可以策略性地放弃一部分分数,只要保证其他部分稳稳拿到。

第四题 15 分,你拿 7 分,不亏;拿 10 分,血赚;拿 5 分,前面三题和设计模式拿满,照样过。

这个系列七篇博客,从总纲到分治、DP、贪心、回溯、递归、链表树图,覆盖了第四题的全部考点。如果你能把这七篇里的代码框架、填空套路、复杂度表背下来,考场上第四题至少能拿到一个"不拖后腿"的分数。

算法这东西,说到底不是背出来的,是练出来的。但软考不是算法竞赛,它考的是你能不能在给定的框架里,把缺的那几块拼图补上。

所以,别被第四题吓到。跟着这个系列,一道一道来,一步一步走。

及格线 45 分,不是让你做对所有题,而是让你别放弃任何一题。


七、系列目录(完整版)

  1. 总纲:从"直接放弃"到"稳稳拿分"的备考策略

  2. 分治法:归并排序与快速排序的"拆、治、合"

  3. 动态规划:0-1 背包与最长公共子序列的"填表艺术"

  4. 贪心算法:活动选择与最小生成树的"局部最优"

  5. 回溯法:N 皇后与 0-1 背包的"走迷宫艺术"

  6. 递归与递推:斐波那契、汉诺塔与阶乘的"自我调用"

  7. 链表/树/图:指针操作、遍历顺序与邻接矩阵的"基本功"

  8. 完结篇:从"放弃"到"稳拿"的备考心法(本篇)


这个系列到这里就全部结束了。如果你跟着看到了这里,感谢你的耐心。祝备考顺利,45 分稳过。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值