针对软考下午试题C语言算法考点总结
算法分类
贪心算法
不从整体考虑,总是做出在当前看来最好的选择,即局部最优选择。
分治法
将一个规模为n的问题分解为k个规模较小的子问题,这些子问题相互独立且与原问题相同,递归的求解这些子问题,然后将子问题的解合并得到原问题的解。
适用范围:
- 该问题的规模缩小到一定的程度就可以容易地解决
- 该问题可以分解为若干个规模较小的相同问题,即该问题具有最优子结构性质。
- 利用该问题分解出的子问题的解可以合并为该问题的解;
- 该问题所分解出的各个子问题是相互独立的,即子问题之间不包含公共的子子问题。
动态规划
通过组合子问题的解而解决整个问题,与分治法不同的是,分解得子问题往往不是独立的,即相同的子问题可能会被求解多次。
适用范围:
- 最优子结构性质:一个最优化策略的子策略总是最优的。
- 无后效性:每个状态都是过去历史的一个完整总结。
- 子问题的重叠性:是指在用递归算法自顶向下对问题进行求解时,每次产生的子问题并不总是新问题,有些子问题会被重复计算多次。
回溯法
主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件是就“回溯”返回,尝试别的路径。
适用范围:
在包含问题的所有解的解空间树中,按照深度优先的策略,从根结点出发深度探索解空间树。