MinMax算法和Alpha-Beta剪枝
MinMax算法和Alpha-Beta剪枝
Minmax:一种用于博弈论 的 暴力dfs搜索算法。
思想:
假设先手为 alpha(A),后手为 beta(B)。现在,每一个dfs的搜索状态有一个权值 \(w\)(可以是估价值),A想获得最大的\(w\)(即初始状态w最大),B想要A获得最小的\(w\)。其中,只有叶子节点才可以直接计算估价值。
对于搜索树的一个节点(对应dfs中的一个状态),若现在轮到A走,那么A会走A的所有子节点中最小权值最大的节点,而B会走最大权值最小的点。

如图:方点是A,圆点是B。答案为3。
Alpha-Beta剪枝
用于Minmax搜索的优化
复杂度?哪有什么复杂度?只要知道这玩意跑得的确很快就行了。适用于10 * 10以内的数据
正文:
核心思想 :我们对每个结点记忆个可能的最小值\(\alpha\)和可能的最大值\(\beta
\),即\(a <= w <= b\),如果 \(a > b\) 了,那么这个点就没必要继续搜索它的子节点了。
那我们该怎么确定某一个节点的\(\alpha\)和\(\beta\)呢?
首先我们来讨论先手:
先手A为了获得最大的w,那么A会走A的所有子节点中最小权值最大的节点,同时用当前最小权值最大的节点来作为临时的\(\alpha\),如果a已经大于b了(b可能是由父亲节点继承来的),那么继续搜索就没有意义了,直接break。
后手其实也类似,不过后手只会去更新\(\beta\)。
(稍微有点抽象,建议画图,或看博客的图解)

                
            
        
浙公网安备 33010602011771号