Alpha Beta修剪之前的排序动作-井字游戏-python

时间:2018-11-16 15:14:45

标签: python sorting tic-tac-toe alpha-beta-pruning

我使用negascout或主要变异搜索算法可以很好地解决井字游戏。我在某处读到,为了使这些算法最有效,对动作进行排序非常重要,这样搜索才能从可能是最佳动作的位置开始。

假设在井字游戏中,试探法是中心方格胜于角落方格,后者优于边方格。

I按数字小键盘上的顺序,以1到9之间的整数表示井字游戏中的正方形。在Python3中,我目前正在做:

def sort_candidate_move(candidate_move):
    # center > corner > side
    move_dict = {1: 'b', 2: 'c', 3: 'b', 4: 'c', 5: 'a', 6: 'c', 7: 'b', 8: 'c', 9: 'b'}
    to_sort = [(move_dict[move], move) for move in candidate_move]
    to_sort.sort()
    return [tup[1] for tup in to_sort]

其中候选人_移动是候选人移动的列表,例如:

candidate_move = [2, 5, 9]

代码返回:

[5, 9, 2]

看来排序的这种方式在解决井字游戏的计算时间上没有任何好处。

是否有更有效的方式(就计算速度而言)来对函数sort_candidate_move()进行编码?

1 个答案:

答案 0 :(得分:0)

井字游戏最多可进行9个步骤,少于9个步骤!不同的游戏。对于这种规模的问题,所有明智的算法都将是超快的,因此比较它们的时间不会显示太大差异。该算法的时间复杂度估计(“大O”)是渐近的,这意味着它们仅在大到非常大的问题上才可见。