Не все же окончания нужно смотреть за один раз? Вообще, в основном цикле надо работать только с данными для окончаний одного типа. И только на первом проходе смотреть младшие эндшпиля. Например, при первом проходе вы генерируете все хода, и ставите оценку в тех случаях, когда есть переход в младший выигрывающий эндшпиль или уничтожаются все шашки противника или запирание. Потом у вас уже будет проставлены ходы до выигрыша в случае, если ход приводит к моментальному выигрышу (
), или позиции, для которых есть переход в младшее окончание (тут мы знаем, что позиция выигрывается не более чем за
ходов, но в реале оптимальное
может быть меньше..
Дальше мы в младшие окончания не заглядываем. Берем
(до выигрыша два полухода), и смотрим, можем ли мы улучшить проставленные ранее результаты, где
, а также прописываем оценку для окончаний, у которых нет оценки.
Да, первый проход может быть медленным. Одна из причин---младшее окончание может быть практически любым в отличие от шахмат из-за возможности сбивать за ход любое количество шашек противника. Но далее мы к винту не обращаемся.
Кстати, для задачи идеально подходит OpenCL.