枚举的基本思想总结

概念


枚举是基于已有知识进行答案猜测的问题求解策略。


步骤


步骤如下:

1.从可能的集合中,一一列举各元素。

2.根据问题所给的检验条件判定列举元素是否满足。

3.使条件成立即是问题的解。

4.若条件不成立则进行下一次列举,新的列举是前面的列举中没出现过的(不会重复列举同一个元素)。


关键


1.得到问题的解空间(所有可能)建立简洁的数学模型(情况尽可能的简洁,变量之间相互独立)。

2.不断减少搜索的空间,在已列举的元素不成立的情况下,排除空间内已经不满足题意的解,从而减少代码体的循环次数。

3.采取合适的搜索顺序。


举例


枚举的基本思想总结_第1张图片



首先一共买100只鸡,每种鸡买的范围为[ 0-100 ]于是我可以对三种鸡分别列举0-100种可能


枚举的基本思想总结_第2张图片



不过这样计算有很多多余的猜测,导致耗时长。

为了减少多余的猜测,可以在已列举的情况下,不断排除空间内已不满足的解。

由于只买100只鸡,在枚举了前两种鸡的个数之后,第三只鸡的个数也已经得到了 = 100 - i - j

因此没必要再进行枚举。


枚举的基本思想总结_第3张图片



这样时间复杂度立刻从O(100^3)变成了O(100^2)

其次一共100钱就算都买第一种鸡也买不了100只,同理第二种枚举也不用到100。于是还是可以在这样的基础上继续改进循环体的结束范围,从而优化运行时间等等。













你可能感兴趣的:(【编程算法基础】,【C/C++】)