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\)
(稍微有点抽象,建议画图,或看博客的图解)

posted @ 2024-11-25 18:31  花子の水晶植轮daisuki  阅读(79)  评论(0)    收藏  举报
https://blog-static.cnblogs.com/files/zouwangblog/mouse-click.js