У меня есть алгоритмы поиска negascout или главных вариаций, которые прекрасно работают для решения проблем. Я где-то читал, что для того, чтобы эти алгоритмы были наиболее эффективными, важно сортировать ходы так, чтобы поиск начинался с того, что, вероятно, будет лучшим ходом.
Предположим, эвристика, что в крестики-нолики, центральный квадрат лучше, чем угловой квадрат, который лучше, чем боковой квадрат.
Я представляю квадрат в крестики-нолики целым числом от 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]
где кандидат_move - список ходов кандидатов, например:
candidate_move = [2, 5, 9]
Код возвращает:
[5, 9, 2]
Похоже, что упорядочение движений таким образом не дает никакой выгоды с точки зрения вычисления времени для решения проблем.
Есть ли более эффективный (с точки зрения скорости вычислений) способ кодирования функции sort_candidate_move ()?