Сортировка перед альфа-бета-обрезкой - крестики-нолики - питон - PullRequest
0 голосов
/ 16 ноября 2018

У меня есть алгоритмы поиска 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 ()?

1 Ответ

0 голосов
/ 16 ноября 2018

Крестики-нолики - это максимум 9 шагов, что дает менее 9!разные игры.Для задачи такого масштаба все разумные алгоритмы будут сверхбыстрыми, поэтому сравнение их времен не покажет большой разницы.Оценки сложности времени алгоритмов («большой O») являются асимптотическими, что означает, что они очевидны только для задачи от большого до очень большого размера.

...