枚举
概念:基于已有知识进行答案猜测的一种问题求解策略
方式:从可能的集合中一一列举各元素
枚举算法:
对问题可能解集合的每一项,根据问题给定的检验条件判定哪些问题是成立的,使条件成立的即是问题的解
白话文理解:根据条件,猜测一下所有的可能性,然后将每一个可能性进行一一验证,直到找到符合标准的那一个,最简单的就是暴力求解,每种情况都试一次,那肯定不会有遗漏的,但一般情况下有了条件约束,我们能够在所有可能性当中筛选出一些绝对不符合条件的结果,这样下来就能减少枚举的数量。枚举的关键在于怎么合理的翻译约束条件,使得在枚举过程中可能的解的数量尽可能少,设置验证函数过程中,挑选合适的搜索顺序,减少代码中的循环次数
过程
1.判断猜测的答案是否正确
2.进行新猜测
(1)猜测的结果必须是前面猜测中没有出现过的
(2)猜测过程中要及早排除错误的答案
⚠️注意事项:
1.给出解空间,建立简洁的数学模型
判断可能的情况是什么,模型中的变量数尽可能少,而且相互之间互相独立
2.减少搜索空间
利用知识缩小模型中各变量的取值范围,避免不必要运算,减少代码中循环体执行次数
3.采用合适的搜索顺序
搜索空间的遍历顺序要与模型中的条件表达式一致
以上是枚举算法的一些概念性的东西。概念很好理解,培养枚举思维,更好的写好算法是关键,这种思维的培养需要大量的实际操作,多做题,多做题,多做题。
以下会是一些例题(未完待续)