Теория графов и её приложения
..pdfПрактическое применение этой задачи, которая в терминах теории графов называется «нахождение кратчайшего пути в графе
срёбрами единичной длины», может быть проиллюстрировано, например, интеллектуальным погрузчиком, когда диаметр диска – это габариты груза на складе и необходимо переместить «башню» товара
содной площадки на другую, пользуясь одной промежуточной площадкой (свободная площадь – на вес золота!). Если больший по габаритам груз окажется над меньшим, упасть может!
Стержни также могут быть представлены стэками процессора, а «диски» – адреса подпрограмм или запросов на прерывание, приоритеты которых упорядочены.
Стержни могут быть и некоторыми уровнями, например безопасности.
«Диаметры» дисков могут иметь другую, например значения уязвимостей, или временную интерпретацию, скажем, время с начала эксплуатации. Известна задача ротации магнитных носителей информации для создания резервных копий с учётом их ресурсов (время нахождения в эксплуатации, число циклов копирования).
Так, при трёх носителях 1, 2, 3 (номера соответствуют условному времени нахождения в эксплуатации, первый – самый «молодой») порядок их использования, например для записи видеоинформации, такой: 1, 2, 1, 3, 1, 2, 1. Эта последовательность – так называемый палиндром (читается одинаково слева направо и справа налево) – есть не что иное, как порядок перекладываний дисков в Ханойской башне с n = 3 (не сказано куда, но указано – кто, какой диск берётся) и расписание «работы»: понедельник – 1, вторник – 2, среда – опять 1 и так далее. Первый диск работает 4 раза, второй 2, третий – 1 (7 шагов).
Самый старый всегда один раз работает и не в выходные… «Дедовщина» какая-то получается!
Если будут четыре носителя, получим количество раз: 8, 4, 2, 1 (15 шагов); при пяти – 15, 8, 4, 2, 1 (31 шаг). Ясно, что это последовательность степеней числа 2.
Впринципе всё это может быть формализовано как задача оптимального и в каком-то смысле безопасного (с точки зрения «зако-
141
нов Брахмы»!) «перемещения упорядоченности чего-либо» с одного объекта на другой с дополнительными вспомогательными объектами размещения этой самой упорядоченности.
А чем плоха такая интерпретация: перемещение линейных боевых порядков (впереди, на первой линии обороны, наименее уязвимые подразделения) с одной позиции на другую через «запасной аэродром» – через дополнительную позицию?! Да если учитывать вероятности нападения противника на эти позиции? Это уже смахивает на теорию игр, к тому же несколько размывается дискретность задачи, каждый «диск» «перекладывается» не сразу, а по «кусочкам»…
Интересно, что задача об оптимальной и безопасной «перевозке через реку козы, капусты и волка» чем-то похожа на задачу о Ханойской башне: три стержня – это два берега реки и лодка (с перевозчиком), но здесь не перемещение вектора упорядоченности, а перемещение множества, некоторые подмножества которого запрещены! Вероятно, здесь мы имеем дело со своего рода «динамической» безопасностью, с оптимальным перемещением, с «трансфером» безопасности. Типа переезд серьёзной организации из одного здания в другое.
Можно предложить и комбинированный вариант – множество башен с запрещением некоторых из их подмножеств, множество последовательностей башен. Но с таким же успехом за одномерной встаёт задача двухмерная – матрица башен, а за ней трёхмерная – куб из ячеек – башен, а там и n-мерная! А как вам задача перемещения деревьев, а то и леса?
Но мы слишком углубились в сторону… Вернёмся к началу. Для алгоритмического решения задачи о Ханойской башне
с произвольным числом дисков представление в виде графа, рассмотренное нами ранее в курсе дискретной математики, весьма неудобно. Действительно, чтобы найти кратчайший путь, необходимо сначала построить весь граф, а он может быть очень громоздким.
Попробуем упростить решение, ещё раз проанализировав особенности задачи. Рассмотрим n = 1 и назовём стержни X, Y, Z
(рис. П3.5).
142
аб
Рис. П3.5. Задача о Ханойской башне для n = 1: а – исходное состояние; б – целевое состояние
Изобразим-таки опять задачу в виде графа (рис. П3.6). Перекладывание в формате «откуда → куда» выглядит так:
(Х → Z). Здесь движение идёт как бы направо из исходного состояния. Вспомним граф для n = 2, там надо двигаться всегда налево
(рис. П3.7).
Рис. П3.6. Граф задачи |
Рис. П3.7. Граф задачи о Ханойской |
о Ханойской башне для n = 1 |
башне для n = 2 |
Здесь получаем: (Х → Y), (Х → Z), (Y → Z). В случае n = 3 имеем
(Х → Z), (Х → Y), (Z → Y), (Х → Z), (Y → Х), (Y → Z), (Х → Z),
в этом случае надо двигаться всегда направо (рис. П3.8).
143
Рис. П3.8. Граф задачи о Ханойской башне для n = 3
Анализ задачи при n = 4 ((Х → Y), (Х → Z), (Y → Z), (Х → Y), (Z → Х), (Z → Y), (Х → Y), (Х → Z), (Y → Z), (Y → Х), (Z → Х), (Y → Z), (Х → Y), (Х → Z), (Y → Z)) показывает, что в соответствующем графе надо двигаться всегда налево (рис. П3.9).
Следовательно, напрашивается предположение, что при нечётном n надо двигаться направо, при чётном – налево! Видимо, этот вывод можно строго доказать методом математической индукции. Да, но где право, где лево, если не строить граф, а решать задачу пошагово?!
Вернёмся к задаче для n = 1. Будем обозначать диски номерами так, что номер – это как бы «диаметр» диска. Чем больше номер, тем больше диаметр. Изобразим стержни X, Y, Z не на одной линии, а в виде треугольника (рис. П3.10).
144
145
Рис. П3.9. Граф задачи о Ханойской башне для n = 4
Рис. П3.10. Решение задачи о Ханойской башне для n = 1
Следовательно, в такой интерпретации для n = 1 речь идёт о движении диска 1 против часовой стрелки в треугольнике X, Y, Z
[30].
Задача о Ханойской башне для n = 2
Исходное состояние изображено на рис. П.3.11.
а |
б |
Рис. П3.11. Задача о Ханойской башне для n = 2: а – исходное состояние на стержнях; б – исходное состояние в виде графа – треугольника с помеченными вершинами
Первый диск переносится по часовой стрелке (рис. П3.12).
146
аб
Рис. П3.12. Задача о Ханойской башне для n = 2: а – перенос первого диска – на стержнях; б – перенос первого диска – по часовой стрелке в графе – треугольнике с помеченными вершинами
Второй диск переносится против часовой стрелки (рис. П3.13).
а |
б |
Рис. П3.13. Задача о Ханойской башне для n = 2: а – перенос не первого, второго диска – на стержнях; б – перенос не первого, второго диска – против часовой стрелки в графе – треугольнике с помеченными вершинами
Первый диск переносится по часовой стрелке, и задача решена –
(рис. П3.14).
а |
б |
Рис. П3.14. Задача о Ханойской башне для n = 2: а – перенос первого диска – на стержнях; б – перенос первого диска – по часовой стрелке в графе – треугольнике с помеченными вершинами. Заключительное состояние
147
Задача о Ханойской башне для n = 3
Исходное состояние изображено на рис. П3.15.
аб
Рис. П3.15. Задача о Ханойской башне для n = 3: а – исходное состояние на стержнях; б – исходное состояние в виде графа – треугольника с помеченными вершинами
Первый шаг. Первый диск переносится против часовой стрелки
(рис. П3.16).
а б
Рис. П3.16. Задача о Ханойской башне для n = 3: а – перенос первого диска – на стержнях; б – перенос первого диска – против часовой стрелки в графе – треугольнике с помеченными вершинами
Второй шаг. Второй диск переносится по часовой стрелке
(рис. П.3.17).
а |
б |
Рис. П3.17. Задача о Ханойской башне для n = 3: а – перенос не первого, второго диска – на стержнях; б – перенос не первого, а второго диска – по часовой стрелке в графе – треугольнике с помеченными вершинами
148
Третий шаг. Первый диск опять переносится против часовой стрелки (рис. П3.18).
аб
Рис. П3.18. Задача о Ханойской башне для n = 3: а – второй перенос первого диска – на стержнях; б – второй перенос первого диска – против часовой стрелки в графе – треугольнике с помеченными вершинами
Четвёртый шаг. Третий диск, а может быть перенесён только он, поскольку первый диск дважды не переносится, а второй не может быть перенесён, переносится против часовой стрелки (рис. П.3.19).
а |
б |
Рис. П3.19. Задача о Ханойской башне для n = 3: а – перенос не первого, третьего диска – на стержнях; б – перенос не первого, а третьего диска – по часовой стрелке в графе – треугольнике с помеченными вершинами
Пятый шаг. Первый диск третий раз переносится против часовой стрелки (рис. П3.20).
аб
Рис. П3.20. Задача о Ханойской башне для n = 3: а – третий перенос первого диска – на стержнях; б – третий перенос первого диска – против часовой стрелки в графе – треугольнике с помеченными вершинами
149
Шестой шаг. Второй диск второй раз переносится по часовой стрелке (рис. П3.21).
а |
б |
Рис. П3.21. Задача о Ханойской башне для n = 3: а – перенос не первого, второго диска – второй раз на стержнях; б – перенос не первого, а второго диска второй раз – по часовой стрелке в графе – треугольнике с помеченными вершинами
И, наконец, первый диск четвёртый раз переносится против часовой стрелки (рис. П3.22).
а |
б |
Рис. П3.22. Задача о Ханойской башне для n = 3: а – четвёртый перенос первого диска – на стержнях; б – четвёртый перенос первого диска – против часовой стрелки в графе – треугольнике с помеченными вершинами.
Заключительное состояние
Таким образом, первый диск при нечётном общем числе дисков движется против часовой стрелки, а при чётном общем числе дисков – по часовой стрелке.
Построим таблицу местоположения дисков (рис. П3.23).
Рис. П3.23. Таблица местоположения дисков
150