剪枝的意义在于使一些根本不可能成为答案的分支从搜索空间中删去,以达到减少时空复杂度的效果。剪枝在搜索算法中的应用场景很广,以下收集一些剪枝的普遍套路
①可行性剪枝:当当前状态和题意不符合,break。(如题中条件的基础判断一下)
②最优性剪枝:当当前状态生成的结果必不可能比已有答案更优,break,if(now>ans)break;
③记忆化搜索(去重剪枝):将之前遍历过的分支的结果用某个数据结构存储起来,当下一次遍历到这个分支的时候不需要再次计算,只需要通过该数据结构存储起来,达到不重复遍历的效果。(记忆型dp)
④顺序剪枝(sort排序,贪心):当该搜索算法与单调性有关的时候,我们显然会按照顺序或逆序去遍历,而不是按乱序遍历。
⑤去等效冗余剪枝:当多个分支的效果一致,只需要遍历一个。