1.目标树:
在发现问题解决问题过程中,我们可以建立一棵目标树,目标树表示的是解决问题的具体步骤,分支和循环。
2.深度优先和广度优先:
深度优先:在一支到达终点后,可以选择回溯到之前的分支然后对第二支进行运算直到重点,以此类推,直到找到问题的解答。(列式查找)
广度优先:一层一层的查找数据,直到找到解答或达到最后一层。(层式查找)
注意:1.深度优先相对于广度优先来说,查找的次数更少,故深度优先更加高效。
2.可以通过过滤层来过滤掉不可能的或重复的分支,以提升效率。
3.广度优先空间复杂度大(占用内存多),时间复杂度小,但可以找到最优解(花费较多时间)
深度优先时间复杂度大,空间复杂度小,一般只能找到一个满意解(但可以快速靠近目标)
3.爬山算法和束搜索
爬山算法是深度优先算法的改良
爬山算法:始终关注的是当前位置离目标位置的距离远近在选择分支时,选择离目标更近的那一支,而不是从左到右进入分支。(需要回溯)
束搜索是广度优先的改良
束搜素:在广度优先的基础上,加入束宽(束宽是限制束搜索的参数,即每一层只能取最优的束宽个分支)
4.极大极小值算法和剪枝算法
剪枝算法(α-β算法)是对极大极小值算法的改进,透过反向评估,筛选掉一部分不可能或无用的分支,极大的提高了运算效率。
参考:https://www.zhihu.com/question/27221568
极小极大和剪枝算法曾在IBM开发的国际象棋超级电脑,深蓝(Deep Blue)中被应用,并且两次打败当时的世界国际象棋冠军。
下面我用ProcessOn画了一个图用于说明
这是一棵选择树,
在象棋(极大极小值法)中,极大值者总是选择分值最大的选项,极小值者总是选择分值最小的选项,每一层代表一次选择那么:
在计算机运算过程中
假设D=2 ,E=6,F=1,G=9
1.计算机从左到右,当遍历到D时
因为D是由MIN来选择的,因为B是由MAX选择得到的,所以 B<=2,
A是由MAX来选择的所以 A>=2
2.当遍历到F时
因为F=1,所以 C<=1,
因为B<=2 C<=1 且 此时由MAX作出选择,他一定会选择 B这一支,
此时就可以使用剪枝算法,切掉A-C这一支,大大提高效率。
注意:
极大值极小值算法,剪枝算法是针对2者进行博弈的算法,可能拿不到真正的极大值(例如上题中的9),但是通过这个算法可以尽量提高自己分数,降低敌人分数。
在运算中,能计算出更深层次(步数)的结果,就能以更高的胜率赢下对手