Анализ рекурсивного алгоритма решения задачи о ханойской башне на основе подстановок
Автор: Тюрин С.Ф.
Журнал: Вестник Пермского университета. Математика. Механика. Информатика @vestnik-psu-mmi
Рубрика: Информатика. Информационные системы
Статья в выпуске: 1 (40), 2018 года.
Бесплатный доступ
Анализируется система подстановок, описывающая рекурсивный алгоритм решения задачи о Ханойской башне. Показывается, что для трех стержней формируются 6 возможных подстановок переменных, обозначающих стержни и их глобальный и локальный смысл. Приводятся примеры подстановок в задаче для одного, двух и трех дисков.
Ханойская башня, рекурсия, подстановки
Короткий адрес: https://sciup.org/147245358
IDR: 147245358 | DOI: 10.17072/1993-0550-2018-1-56-61
Текст научной статьи Анализ рекурсивного алгоритма решения задачи о ханойской башне на основе подстановок
Задача о Ханойской башне представляет собой игру, придуманную французским математиком Франсуа Эдуардом Анатолем Люка (1842–1891) [1–3] (рис. 1).

а) б)
Рис. 1 . Задача о Ханойской башне: а) игрушка с восемью дисками;
-
б) ее автор Франсуа Эдуард Анатоль Люка
Азиатская тематика данной задачи, на наш взгляд, связана с тем, что в то время Вьетнам был французской колонией. Ханойская башня – задача оптимального (за кратчайшее число ходов) и своего рода безопасного (бОльший диск не может лежать на меньшем, в этом ограничении безопасность и заключается!) перемещения ("перемещения упорядоченности") с одного стержня – объекта Х на другой Z с дополнительным вспомо- гательным объектом Y (между прочим, есть задачи и не с одним Y).
Принцип разной частоты "переноса" дисков разного "диаметра" применяется в системах резервного копирования информации [4], в которых "диаметр" диска как бы соответствует периодичности копирования.
В [1] описано интересное решение задачи на соответствующем графе. Так, для двух дисков получают граф, изображенный на рис. 2.

Рис. 2. Решение задачи о Ханойской башне для n=2 на графе
Имеется много подходов к алгоритмическому решению задачи [5–7]. Так, при четном числе дисков в графе всегда надо двигаться "налево", при нечетном – "направо". Можно стержни расположить в виде треугольника, тогда в нем можно двигаться по и против часовой стрелки, что использует соответствующий алгоритм.
Особый интерес представляет рекурсивный алгоритм [8]. На математических форумах пишут: "Рекурсивное решение напоминает волшебный фокус – не зная решения, а зная только некоторую закономерность задачи, получаем само решение. Фактически указывается не сама последовательность перемещений дисков, а алгоритм сведения задачи к более простому случаю" [3]. Вызывает интерес исследование деталей этого "фокуса" с методической целью, при использовании интерпретации вызовов рекурсивной процедуры в виде соответствующих подстановок.
1. Представление рекурсии системой подстановок
Рекурсивная процедура, например, может иметь вид [8]:
CARRY(n,x,z,y) – перенос дисков с х на z, используя y.
Разбиваем CARRY(n,x,z,y) на две основных подзадачи:
-
1. CARRY(n-1,x,y,z) башню n-1 (без самого большого диска) перенести с х на y, используя z;
-
2. CARRY(1,x,z,_) перенести один нижний диск с х на z;
-
3. CARRY(n-1,y,z,x) перенести башню n-1 перенести с y на z, пользуясь x.
Перенос одного диска выполним как нерекурсивную процедуру ONEDISC(x,z). Получаем схему алгоритма (рис. 3).
Представим программу системой подстановок следующим образом:
^ x z y ^
n ,—,—,— I;
l x z y J
, X y z n - 1,—,—,—;
x y z x z
- -;
xz
yzx n - 1,-J ,
yzx
В выражение (1) подстановка л \ x z y n, — , — ,— - это CARRY(n,x,z,y: integer); с l x z y J указанием изменяющегося "смысла" переменных. В числителе – как бы глобальный смысл, в знаменателе – локальный, т. е. на данном этапе. В начале – х "откуда" – исходный стержень=x, z – "куда" – целевой = z, y – "дополнительный" = y.
xyz n — 1, —, —,— - это CARRY(n-1,x,y,z); -xyz перенос подбашни n-1 с исходного на дополнительный стержень, т. е. здесь дополнительный в качестве целевого, а целевой – в качестве дополнительного.
x, - - ONEDISC(x,z); - перенос большо-xz го диска с исходного на целевой стержень.
yzx n — 1, —, —,— - это CARRY(n-1,y,z,x), пе-yzx ренос подбашни n-1 с дополнительного стержня (он теперь в качестве исходного) на целевой стержень (он в качестве дополнительного), а исходный стержень – в качестве целевого.

Рис. 3. Схема алгоритма решения задачи о Ханойской башне
Таким образом, при вызовах процедуры осуществляется подстановка переменных:
( x z y ^ 1 n ,—,—,— I ; |
( 1 x z y ^ I n — 1,-,—,— I ; |
( x z y ^ I n — 2,-,-,— | ; |
|||
l x z y J |
l x y z J |
l x z y J |
|||
i x y z n — 1,—,—,—; |
O x y z n — 2,—,—,—; |
xyz n — 3,—,—,—; |
|||
x y z |
■ |
x z y |
■ |
xyz |
|
x z |
x z |
x x. |
|||
x ’ z ’ |
,_; x y |
, ; xz |
|||
n — 1, y , z , x ; |
n — 2, y , z , x ; |
n — 3, y , z , x ; |
|||
y z x |
z y x |
y z x |
Так, во второй "скобке" (2)
^ x X Z У У n -1, —, —, — I получается, поскольку при
V x У z J
очередном вызове берется n — 1,—,—,— из xyz первой "скобки".
xz xz xz xz
Получаем -,-; -,—; -,-; —,—;...
xz xy xz xy
yzx
, , •
zyx
( . X Z УI n—j - -- I;
V Z У x J
xyz n — j — 1, —,_,_;
zxy
.
Это первый шаг, зависящий от четности n.
xz
, ;
zy
xz xz
Нечетное-- , —; четное - —, —. xz xy
Получаем первые две подстановки:
-
1) x,z,y,
-
2) x,y,z и, соответственно, переносы дисков xz и xy.
Обратим еще раз внимание на чередование подстановок на этом первом проходе:
■ 1 У z x n — j — 1, —, —, —;
x У z
Получаем четвертую подстановку: 4) z,y,x и перенос zy. Подстановки x,y,z, полу-
yzx
чаемые из —,—
xy
, z
yzx и x,z,y из —, —,— уже
xzy
были выше. Но получаются еще вот такие:
I( x z У | I 1( . x z У | I 1( „ x z У I I si n,-,-,- l^^l n —1,-,-,- l^^l n — 2,-,-,- tl^ [V x z У J J [V x У z J J [V x z У J J
xyz zxy
xy и —,—
yxz
z
,—, их еще не было.
Соответственно:
xyz
Подставляем —, —,—
zxy
1 x У z I f _ x у z I f „ x у z I n — 1,-,-,-; |^ n — 2-,-,-; l^S n — 3,-,-,-; !^ x У z J [ x z У J [ x У z J
, x z У I n — k,—,—,— I;
z x У J
f 1yzx 1 f У у Z X 1 f У у Z X 1
S n — 1---; !^s n — 2,-,--; |^S n — 3,-,-,-; !^ ....
[ У z x J [ zуx J [ У z x J
Далее от них (после них) идет "переломная"
xyz n — k —1>_>_>_;
x
zy
xz
,-;
zx
! .
yzx yzx команда либо —, —, — , либо —, — , — .
yzx zyx
yzx
Проверим после — , —, — : yzx
fr n— V
xz i ,-,-
у \
,
У z x J
xyz
n — i — 1, —, —,-;
yxz
xz
, ;
yz
yzx n — i — 1, —,-, —;
xzy
.
Получаем третью подстановку 3) y,z,x и перенос yz.
Проверим после
n — k — 1, У , —
x ,-;
У x Z
Таким образом, имеем пятую новку 5) z,x,y и перенос zx.
xyz
Подставляем —,—,— : yxz
[ n — l , x , -, У ) V У x z J
xyz n — l —1,_,_,_;
x
yz
xz
, ;
yx
n — l — 1, У , -
x
, ;
z x У
>
подста-
Таким образом, получаем подстановку 6) y,x,z и перенос yx. Получаем все 6=3! вариантов перестановок xyz и 6 возможных переносов с одного стержня на другой.
2. Анализ подстановок переменных в рекурсивном алгоритме решения задачи о Ханойской башне при n=1
yzx
Затем идет вызов 0, —, —, — yzx
Проанализируем изменение порядка переменных для n=1. Первый вызов:
ГГ 1
1, x , -, y ;
I x - y J
0 т, 1 , У ; к у z x J
yzx
0, ,-,-^
0, x , y , - ;
xyz
xz
,-;
xz
0, y , - , x
yzx
xyz
Далее 0, — , — , — ; вызывает снова проце-xyz дуру с другими значениями переменных:
x z у о,-,-Л ; к X у z J
—
yzx
xyz
1, , , ;
yxz
xz
,-;
yz
1, y , - , x
xzy
Перестановки переменных при этом вы-
глядят следующим образом (рис. 5):
0, x , y , - ; 4
X y z
xyz
1, , , ;
xzy
•

Рис. 5. Изменение порядка переменных при n=1 и вызове 0, y , - , x .
yzx
—
xz
,-; xy
1, y,-, x zyx
Поскольку получаем -1, то этот вызов заканчивается. Перестановки переменных при этом выглядят следующим образом (рис. 4):

Рис. 4. Изменение порядка переменных
xyz при n=1 и вызове 0, —, —,— xyz
Далее выполняется единственный пере- xz нос (10): x,z : —, —.
xz
Поскольку и здесь получаем -1, то и этот вызов заканчивается. Конец процедуры.
Таким образом, осуществляется единст- xz венный перенос: x, - : —, —.
xz
Здесь алгоритм не доходит до переноса "подбашни", так как ее нет, переносится только самый большой диск (а у нас всего один диск, он и есть самый большой!). Всего одна (исходная) подстановка значений переменных. Дерево решения для n=1 имеет вид на рис. 6.

Рис. 6. Дерево решения для n=1
3. Анализ подстановок переменных в рекурсивном алгоритме решения задачи о Ханойской башне при n=2, n=3
В случае вид:
n=2 "первый
проход" имеет
<
? x z y b
2, , , I;
x z У J
xyz
1, , , ;
xyz
r^i
xz
,-;
xz
1, y, z, x
yzx
;
1 x z y b
1, , , I;
x y z J
0, x, y, z;
xzy
ri
x
z
xy
0, y, z, x
zyx
;
0, x, z, y|;
x z y J
^^^^^^в
xyz
1, , , ;
xyz
xz
, ;
xz
^^^^в
yzx
1,_,_,_;
yzx
r.
Далее, рассуждая аналогично вышеописанному, получаем 2-1-0 (перенос 1)-1 (перенос 2)-1(перенос 3 после "перелома"). Дерево решения для n=2 изображено на рис. 7.

Рис. 7. Дерево решения для n=2
В случае n=3 получим (рис. 8):
, X Z У
3, , , I ;
X Z У J
7 XZ У ).
2, , , ;
X У Z J
, x z У
1, ,-, I ;
X Z У J
xyz
2, , , ;
xyz xz
, ;
xz
r^i
yzx
2, , , ;
yzx
xyz
1, , ,;
xzy xz
,;
xy yzx
1, , ,;
zyx
r ^ i
0, x , У , Z ;
xyz
xz
, xz
0, У , Z , x ;
yzx

Рис. 8. Дерево решения для n=3
Выводы
Таким образом, использование формализации в виде подстановок, позволяет проанализировать изменение значений переменный при рекурсивных вызовах. Этот подход объясняет принцип выбора переноса диска в алгоритме решения задачи о Ханойской башне, что можно использовать в методических целях при проведении занятий по дисциплине "Алгоритмы и анализ сложности".
Список литературы Анализ рекурсивного алгоритма решения задачи о ханойской башне на основе подстановок
- Коршунов Ю.М. Математические основы кибернетики: учеб. пособие для вузов. 3-е изд., перераб. и доп. М.: Энергоатомиздат, 1987.496 с. 2. Ханойские башни и Эдуард Люка. URL: http://ipuzzles.ru/tower-of-hanoi/eduard-luka-tower-of-hanoi/ (дата обращения: 10.01.2018).
- Окулов С.М., Лялин А.В. Ханойские башни. URL: http://files.lbz.ru/pdf/cC2810-9-ch.pdf (дата обращения: 10.01.2018).
- Схема резервного копирования "Ханойская башня". URL: http://www.acronis.com/ru-ru/support/documentation/ABR10/index.html #1432.html (дата обращения: 11.12.2017).
- Задача о ханойской башне. URL: http://math-info.hse.ru/f/2011-12/ling/ lecture1.pdf (дата обращения: 12.01.2018).
- Савин А. Ханойская башня. URL: http://ipuzzles.ru/tower-of-hanoi/savin-tower-of-hanoi/ (дата обращения: 17.01.2018).
- Тюрин С.Ф. Задача о Ханойской башне // Вестник Пермского национального исследовательского политехнического университета. Электротехника, информационные технологии, системы управления. 2016. №2(18). С. 85-97
- Миков А.И., Лапина О.Н. Вычислимость и сложность алгоритмов: учеб. пособие. Краснодар: Кубан. гос. ун-т, 2013. 79 с
- Ханойские башни и Эдуард Люка. URL: http://ipuzzles.ru/tower-of-hanoi/eduard-luka-tower-of-hanoi/ (дата обращения: 10.01.2018)