Jump to content

Танцевальные ссылки

(Перенаправлено с танцевальных ссылок )
Продолжительность: 50 секунд.
Алгоритм Dancing Links решает из поликуба головоломку

В информатике ) — «танцующие ссылки» ( DLX это метод добавления и удаления узла из циклического двусвязного списка . Это особенно полезно для эффективной реализации алгоритмов поиска с возвратом , таких как алгоритм X Кнута для задачи точного покрытия . [1] Алгоритм X — это рекурсивный , недетерминированный , в глубину , поиска с возвратом алгоритм который находит все решения задачи точного покрытия . Некоторые из наиболее известных задач на точное покрытие включают в себя мозаику , задачу n ферзей и судоку .

Название «танцующие ссылки» , предложенное Дональдом Кнутом , связано с тем, как работает алгоритм, поскольку итерации алгоритма заставляют ссылки «танцевать» с партнерскими ссылками, напоминая «изысканно поставленный танец». Кнут считает, что Хироши Хитоцумацу и Кохей Ношита изобрели эту идею в 1979 году. [2] но именно его газета популяризировала это.

Выполнение

[ редактировать ]

Поскольку в оставшейся части статьи обсуждаются детали метода реализации алгоритма X, читателю настоятельно рекомендуется об алгоритме X. сначала прочитать статью

Основные идеи

[ редактировать ]

Идея DLX основана на наблюдении, что в циклическом двусвязном списке узлов

x.left.right ← x.right;
x.right.left ← x.left;

удалит узел x из списка, а

x.left.right ← x;
x.right.left ← x;

восстановит позицию x в списке, предполагая, что x.right и x.left остались неизмененными. Это работает независимо от количества элементов в списке, даже если это число равно 1.

Кнут заметил, что наивная реализация его алгоритма X потратит слишком много времени на поиск единиц. При выборе столбца приходилось искать единицы по всей матрице. При выборе строки приходилось искать единицы по всему столбцу. После выбора строки в этой строке и ряде столбцов необходимо было выполнить поиск единиц. Чтобы сократить время поиска со сложности O(n) до O(1), Кнут реализовал разреженную матрицу , в которой хранятся только единицы.

Каждый узел в матрице всегда будет указывать на соседние узлы слева и справа (1 в той же строке), сверху и снизу (1 в том же столбце) и заголовок своего столбца (описано ниже). Каждая строка и столбец матрицы будут состоять из кругового двусвязного списка узлов.

[ редактировать ]
Изображение танцующих звеньев. [3]

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

Наконец, каждый заголовок столбца может дополнительно отслеживать количество узлов в своем столбце, так что сложность поиска столбца с наименьшим количеством узлов составляет O( n ), а не O( n × m ), где n — количество столбцов и m — количество строк. Выбор столбца с небольшим количеством узлов — это эвристика, которая в некоторых случаях повышает производительность, но не является существенной для алгоритма.

Исследование

[ редактировать ]

В алгоритме X строки и столбцы регулярно удаляются из матрицы и восстанавливаются в ней. Исключения определяются путем выбора столбца и строки в этом столбце. Если в выбранном столбце нет строк, текущая матрица неразрешима и ее необходимо вернуть. При исключении удаляются все столбцы, для которых выбранная строка содержит 1, а также все строки (включая выбранную строку), содержащие 1 в любом из удаленных столбцов. Столбцы удаляются, поскольку они заполнены, а строки удаляются, поскольку они конфликтуют с выбранной строкой. Чтобы удалить один столбец, сначала удалите заголовок выбранного столбца. Затем для каждой строки, где выбранный столбец содержит 1, пройдите по строке и удалите ее из других столбцов (это делает эти строки недоступными и предотвращает конфликты). Повторите удаление столбца для каждого столбца, в котором выбранная строка содержит 1. Такой порядок гарантирует, что любой удаленный узел будет удален ровно один раз и в предсказуемом порядке, поэтому его можно будет соответствующим образом отследить. Если в полученной матрице нет столбцов, то все они заполнены и выбранные строки образуют решение.

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

Дополнительные ограничения

[ редактировать ]

Также возможно решать задачи с одним покрытием, в которых определенное ограничение является необязательным, но может быть удовлетворено не более одного раза. Dancing Links включает в себя основные столбцы, которые необходимо заполнить, и второстепенные столбцы, которые являются необязательными. Это изменяет проверку решения алгоритма с матрицы, не имеющей столбцов, на матрицу, не имеющую основных столбцов, и если используется эвристика минимума единиц в столбце, то ее необходимо проверять только в пределах основных столбцов. Кнут обсуждает необязательные ограничения применительно к проблеме n ферзей . Диагонали шахматной доски представляют собой необязательные ограничения, поскольку некоторые диагонали могут быть не заняты. Если диагональ занята, то ее можно занять только один раз.

См. также

[ редактировать ]
  1. ^ Кнут, Дональд Э. (2000). «Танцевальные звенья». Миллениальные перспективы в области компьютерных наук . Р159. 187 . arXiv : cs/0011047 . Бибкод : 2000cs.......11047K .
  2. ^ Хитотумату, Хироси; Ношита, Кохей (30 апреля 1979 г.). «Методика реализации алгоритмов обратного отслеживания и ее применение». Письма об обработке информации . 8 (4): 174–175. дои : 10.1016/0020-0190(79)90016-4 . (требуется подписка)
  3. ^ «Онлайн-инструменты для управления танцующими ссылками» .
[ редактировать ]


Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 68519e486ec9038f05e3472d4068be7d__1686389040
URL1:https://arc.ask3.ru/arc/aa/68/7d/68519e486ec9038f05e3472d4068be7d.html
Заголовок, (Title) документа по адресу, URL1:
Dancing Links - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)