我使用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()进行编码?
答案 0 :(得分:0)
井字游戏最多可进行9个步骤,少于9个步骤!不同的游戏。对于这种规模的问题,所有明智的算法都将是超快的,因此比较它们的时间不会显示太大差异。该算法的时间复杂度估计(“大O”)是渐近的,这意味着它们仅在大到非常大的问题上才可见。