Alpha-Beta搜索需要遍历的节点远远少于极大极小算法所遍历的节点:
在任何一层都只进行beta剪枝,它会同负极大值算法一样简洁:
int alphabeta(int nPlay,int alpha,int beta)
{
if(Game over)
return eval(); //胜负已分,返回估值
if(nPlay <=0)
return eval(); //叶子节点返回估值
for(each possible move m) //对每一可能的走法
{
make move m; //产生子节点
//递归搜索子节点
score=-alphabeta(nPly-1,-beta,-alpah)
unmake move m; //撤销搜索过的子节点
if(score >= alpha)
alpha=score; //保存最大值
if(alpha>=beta)
break; //beta剪枝
}
return alpah; //返回极大值
}