穷举法的基本思想是根据题目的部分条件确定答案的大致范围,并在此范围内对所有可能的情况逐一验证,直到全部情况验证完毕。若某个情况验证符合题目的全部条件,则为本问题的一个解;若全部情况验证后都不符合题目的全部条件,则本题无解。穷举法也称为枚举法。
递归的穷举问题
- 经典算法求{a, b, c}的子集
数学求解可以很快得出有=8个子集, 即个解.
集合元素较少我们直接罗列出结果来分析下:
{a, b, c} {a, b} {a, c} {a} {b, c} {b} {c} {}
观察所有结果后,重点来了: 每个子集我们可以用{T, T, T} {T, T, F}形式来表示
现在可以把枚举问题转化为决策问题,对每个元素我们都去决策它取或者不取
我们用递归的思想来解决这个问题,对所有情况进行决策,我们把问题拆分,什么时候问题足够小就返回结果,问题足够小从图上可以看到是一条线完全走完,即对每种情况中的元素都做一次决策,剩下的我们继续递归去决策
伪代码分析
function find_subset(全集, 决策