Вопрос

Я пытаюсь улучшить свой текущий алгоритм для 8-й задачи в королеве, и это первый раз, когда я действительно имею дело с алгоритмом дизайна / алгоритмами. Я хочу реализовать первый поиск, в сочетании с перестановкой различных значений Y, описанных здесь:http://en.wikipedia.org/wiki/eight_queens_puagle#the_eeight_queens_puzzer_as_an_Excrise_in_algorithm_design.

Я реализовал часть перестановки, чтобы решить проблему, но у меня есть небольшие проблемы, обернув свои разум вокруг первого поиска глубины. Он описывается как способ пересечения дерева / графа, но генерирует ли он график дерева? Кажется, единственный способ, которым этот метод будет более эффективным, только если первый поиск по глубине генерирует структуру дерева, которая будет проходить, реализуя некоторую логику только для создания определенных частей дерева.

По сути, мне пришлось бы создать алгоритм, который создал обрезанное дерево лексиграфических перестановок. Я знаю, как реализовать логику обрезки, но я просто не уверен, как связать его с генератором перестановки, так как я использовал Next_Permution.

Есть ли ресурсы, которые могли бы помочь мне с основыми глубины сначала поиска или создания лексиграфических перестановок в форме дерева?

Это было полезно?

Решение

В общем, да, идея первого поиска глубины заключается в том, что вам не придется генерировать (или «посетить» или «расширить») каждый узел.

В случае восьми в восемь королевых проблем, если вы поместите королеву такую, чтобы она может атаковать другую королеву, вы можете прервать эту ветку; Это не может привести к решению.

Если вы решили вариант восьми королевцев, так что ваша цель была найдена один Решение, не все 92, то вы можете бросить курить, как только вы нашли один.

В целом, если вы решили менее дискретные проблемы, такие как нахождение «лучшего» расположения королев в соответствии с некоторыми мерами, то вы могли бы прервать ветку, как только вы знаете, что это не может привести к последнему состоянию лучше, чем конечное состояние Вы бы уже нашли на другой ветке. Это связано с A * Алгоритм поиска.

Еще в целом, если вы атакуете действительно большую проблему (например, шахматы), вы можете быть удовлетворены решением, которое не точнее, так что вы можете прервать ветвь, которая наверное не может привести к решению, которое вы уже нашли.

Другие советы

Сам алгоритм DFS не генерирует дерево / график. Если вы хотите построить дерево и график, это так просто строить его, как вы выполняете поиск. Если вы хотите найти только один выключатель, для этого будет достаточно структура данных Lifo Data, например, связанный список: при посещении нового узла добавьте его в список. Когда вы оставляете узел для возврата в поиски, выключите узел.

Книга под названием «Введение в алгоритмы» Anany Levitan имеет правильное объяснение вашего понимания. Он также предоставил решение 8 Queens проблем, так же, как вы его дезактилизируете. Это поможет наверняка.

Как мое понимание, для поиска одного решения вам не нужна никакая перестановка, все, что вам нужно, это DFS.That, будет одиноко хватило в нахождении решения

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top