摘自wikipedia
alpha-β修剪的好处在于可以消除搜索树的分支。这样,搜索时间可以限制在“更有希望”的子树中,并且可以在同一时间执行更深入的搜索。该算法和极小化极大算法一样,都是分支限界类算法。若节点搜索顺序达到最佳优化或近似最佳优化(将最佳选择排在各节点首位),则同样时间内搜索深度可达极小化极大算法的两倍多。
算法使用两个值alpha和beta,分别代表大分玩家放心的最高分,以及小分玩家放心的最低分。alpha和beta的初始值分别为正负无穷大,即双玩家都以可能的最低分开始游戏。在选择某节点的特定分枝后,可能发生小分玩家放心的最小分小于大分玩家放心的最大分(beta <= alpha)。这种情况下,父节点不应选择这个节点,否则父节点分数会降低,因此该分枝的其他节点没有必要继续探索。
伪代码:
01 function alphabeta(node, depth,α, β, maximizingPlayer) // node = 节点,depth = 深度,maximizingPlayer= 大分玩家
02 if depth = 0 or node是终端节点
03 return 节点的启发值
04 if maximizingPlayer
05 v := -∞
06 for 每个子节点
07 v := max(v, alphabeta(child,depth - 1, α, β, FALSE)) // child = 子节点
08 α := max(α, v)
09 if β ≤ α