Задача 8-куин с использованием динамического программирования - PullRequest
10 голосов
/ 14 августа 2011

Я довольно смущен идеей реализации задачи 8-ферзя с помощью динамического программирования. Кажется, это невозможно на одном конце, как для DP ", если проблема была разбита на ряд подзадач и было найдено оптимальное решение для каждой подзадачи, то полученное решение было бы реализовано посредством решения этих подзадач. Проблема которая не имеет такой структуры, не может быть решена с помощью динамического программирования "( Reference ). Принимая это во внимание, оптимальное решение для платы 7x7 может быть неоптимальным (даже неверным) для 8x8. Таким образом, результат проблемы может не реализоваться путем оптимального решения подзадачи.

С другой стороны, DP - это оптимизация для проблем с возвратом ... если это так, то проблема с 8-ю фермами может быть решена с помощью обратного отслеживания ... означает ли это, что хранение только тупиков может преобразовать решение с обратным отслеживанием в DP? Если это так, то возможно 2,1 не выполнимо для родителя 1,1, но может быть выполнимо для 1,2.

Обновление

У кого-нибудь есть идея, можно ли решить проблему 8-ферзя или n-ферзя с помощью динамического программирования? Если да, то каковы будут ваши комментарии к приведенным выше наблюдениям?

Ответы [ 2 ]

3 голосов
/ 15 августа 2011

оптимальное решение для платы 7x7 также может быть неоптимальным (даже некорректным) для 8x8.

Да, вы правы. Но это не хороший способ разделить проблему. Посмотрите на статью yi_H, опубликованную в его ответе , теорема 2.4, и посмотрите описание алгоритма. Они делят решения на классы эквивалентности в соответствии с наборами замкнутых линий (то есть линий, которым угрожают королевы). Теорема 2.4 гарантирует, что как только они решат подзадачу на конкретном наборе замкнутых линий, они могут решить остальное отдельно и затем объединить результат! Очень умно.

1 голос
/ 14 августа 2011

Просто публикуем очевидный гугл-хит:

Динамическое программирование решения проблемы n-queens

Примечание: это все еще очень медленно для больших n, O (f (n) * 8 ^ n), вам лучше использовать другой алгоритм:

Алгоритм полиномиального времени для задачи N-Квинса

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...