自从死在生日蛋糕这道题的无法理解之后,我就决定要好好开始学习搜索这一神仙算法。
下面是我自己对于搜索中的剪枝的一些理解(可能方法是抄的,但是理解是自己想的,就算不是自己的创新,也是自己理解之后的自己的话!):自己口胡一波,不一定对,但是应该好记。
搜索顺序的优化
搜索还有顺序?直接搜不就行了?
no,no,no…
搜索当然是有顺序的,平常来说,若是填一些东西的话,当然是先拿大的填之后再用小的补充(就比如说是Stick这道题),这样的话就会少放些东西(东西一个一个计数)从而减少搜索次数。
所以说,总体而言是,搜索顺序向着搜索次数减少的方向靠近,从而使得搜索树的规模尽量小。
排除等效冗余
等效冗余是什么意思?就是同等效果的多余的东西。
可以思考一下,等效冗余会对搜索造成什么影响?
从字面意思出发,等效是同等效果的,也就是说当前的东西可能在之前已经出现过了,就像是两个完全相等的数字放在了不同的位置一样;
那冗余的意思是多余的重复(来自百度百科的权威认证),同样地,我们继续从字面意思出发,多余的是指不必要的,重复是指之前有过。既然之前有过,也就是该事物已经被搜索过了。
如果我们继续在等效冗余上搜索,只是会徒徒增加搜索数的大小而已,所以我们要ban掉这些东西。
用Stick举个例子:若某一长度已经在长度的方案下搜索过了是不合法的,那么同样长度的在该长度下也是不合法的,所以我们可以直接跳过这些等效冗余的长度。
待更。。