提示:
算法的穷举设计方法
穷举设计方法
概念
穷举法又称穷举搜索法,是一种在问题域的解空间中对所有可能的解穷举搜索,并根据条件选择最优解的方法的总称。
数学上也把穷举法称为枚举法,就是在一个由有限个元素构成的集合中,把所有元素一一枚举研究的方法。
穷举法一般用来找出符合条件的所有解,但是如果给出最优解的判断条件,穷举法也可以用于求解最优解问题。
设计思路
使用穷举法解决问题,基本上就是以下两个步骤:
确定问题的解(或状态)的定义、解空间的范围以及正确解的判定条件;
根据解空间的特点来选择搜索策略,逐个检验解空间中的候选解是否正确;
解空间定义
解空间就是全部可能的候选解的一个约束范围,确定问题的解就在这个约束范围内,将搜索策略应用到这个约束范围就可以找到问题的解。
穷举解空间的策略
穷举解空间的策略就是搜索算法的设计策略,根据问题的类型,解空间的结构可能是线性表、集合、树或者图,对于不同类型的解空间,需要设计与之相适应的穷举搜索算法。
🛴盲目搜索:把所有可能的解都检查一遍。
🛴启发性搜索:由启发函数策动有目的的搜索行为,这些策略和依据通常能够加快算法的收敛速度,或者能够划定一个更小的、最有可能出现解的空间并在此空间上搜索。
剪枝一个很形象的比喻,如果某一个状态节点确定不可能演化出结果,就应该停止从这个状态节点开始的搜索,相当于状态树上这一分枝就被剪掉了。
除了采用剪枝策略,还可以使用限制搜索深度的方法加快算法的收敛,但是限制搜索深度会导致无解,或错过最优解,通常只在特定的情况下使用,比如博弈树的搜索。
剪枝策略
对解空间穷举搜索时,如果有一些状态节点可以根据问题提供的信息明确地被判定为不可能演化出最优解,也就是说,从此节点开始遍历得到的子树,可能存在正确的解,但是肯定不是最优解,就可以跳过此状态节点的遍历,这将极大地提高算法的执行效率,这就是剪枝策略,应用剪枝策略的难点在于如何找到一个评价方法(估值函数)对状态节点进行评估。