数据结构中提到的树如下所示:
基础类:二叉搜索(排序)树,线索二叉树,哈夫曼树(最优二叉树),二叉堆
平衡树类:AVL,红黑树,2-3树,2-3-4树,B树,B+树,B-树,treap,SBT
优先队列类:左高树(左偏树,可并堆,斜堆),双端堆,斐波那契堆
集合类:并查集
区间树类:线段树,划分树,归并树,树状数组
字母树类:字典树,后缀树AC自动机算法
动态树类:伸展树
计算几何类:KD-tree
(块状树),4叉树
RMQ转LCA:笛卡尔树
图论相关:最小生成树,无根树
其它:败者树,博弈树
博弈树的每个结点表示一个动作对吗:错误。
在博弈树搜索中,整棵博弈树是通过一个个的节点以父子结构连接构成的,这棵博弈树是自组织、自生长的,当搜索到达一个节点之后,如果该节点不是叶子节点的话,则会在其子节点中利用UCB1公式选择一个子节点作为当前节点,如果该节点已经是叶子节点,则调用评估器对该叶子节点进行评估和扩展。由此可见,Node类也就是整个UCT算法的核心。
在Node类中,每个节点最基本的信息就是当前节点的状态了,除此之外,则是关于树的组织结构的信息。而所谓当前节点状态也就是当前节点所处的棋盘状态的信息,为此,继承自Board作为其一个子类是自然而然的想法。
首先分析极小极大分析法效率,上述的极小极大分析法,实际是先生成一棵博弈树,然后再计算其倒推值,至使极小极大分析法效率较低。于是在极小极大分析法的基础上提出了α-β剪枝技术。
α-β剪枝技术的基本思想或算法是,边生成博弈树边计算评估各节点的倒推值,并且根据评估出的倒推值范围,及时停止扩展那些已无必要再扩展的子节点,即相当于剪去了博弈树上的一些分枝,从而节约了机器开销,提高了搜索效率。具体的剪枝方法如下:
(1) 对于一个与节点MIN,若能估计出其倒推值的上确界β,并且这个β值不大于 MIN的父节点(一定是或节点)的估计倒推值的下确界α,即α≥β,则就不必再扩展该 MIN节点的其余子节点了(因为这些节点的估值对MIN父节点的倒推值已无任何影响 了)。这一过程称为α剪枝。
(2) 对于一个或节点MAX,若能估计出其倒推值的下确界α,并且这个α值不小于 MAX的父节点(一定是与节点)的估计倒推值的上确界β,即α≥β,则就不必再扩展该MAX节点的其余子节点了(因为这些节点的估值对MAX父节点的倒推值已无任何影响 了)。这一过程称为β剪枝。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)