1.8.2. Задача “Ханойские башни”
Эта задача формулируется следующим образом. Имеется три стержня, на одном из которых (назовем его занятым) находятся диски разных диаметров, расположенные на стержне в порядке убывания диаметров снизу вверх; второй стержень назовем свободным, а третий - вспомогательным (рис 1.18). Требуется, производя одиночные перемещения дисков, переместить всю “стопку” дисков с занятого стержня на свободный, используя вспомогательный стержень; при этом на любом шаге диски должны быть расположены на каждом стержне в порядке убывания их диаметров.
Рис. 1.18. Ханойские башни
В табл. 1.15 приведено решение для случая четырех дисков. Здесь А - занятый в начальный момент (нулевой шаг) стержень, В - свободный , а С - вспомогательный стержень. Цифрами обозначен “номер” диска, причем бо`льшему номеру соответствует больший диаметр. Видно, что процесс перемещения стопки дисков можно разбить на фазы ( 1-я фаза - шаги 1-8, 2-я фаза - шаги 9-12, 3-я фаза - шаги 13 и 14, 4-я фаза - шаг 15), в течение каждой из которых на свободный стержень перемещается самый нижний из оставшихся в предыдущей фазе дисков. Подчёркнуты номера дисков на свободном стержне, которые были нижними в начале данной фазы, а прямоугольником обведены номера дисков, собранных на вспомогательном (занятом) стержне к началу следующей фазы. Отметим, что в середине процесса в качестве вспомогательного выступают то стержень А, то стержень С.
Анализ перемещений дисков по табл. 1.5 позволяет выявить определенные закономерности, составить словесное описание алгоритма перемещений для общего случая (количество дисков произвольно), а затем перейти к разработке схемы алгоритма.
Таблица 1.5.
Шаг |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
A |
4-1 |
4-2 |
4,3 |
4,3 |
4 |
4,1 |
4,1 |
4 |
0 |
0 |
2 |
2,1 |
2,1 |
2 |
0 |
0 |
B |
0 |
0 |
2 |
2,1 |
2,1 |
2 |
0 |
0 |
4 |
4,1 |
4,1 |
4 |
4,3 |
4,3 |
4-2 |
4-1 |
C |
0 |
1 |
1 |
0 |
3 |
3 |
3,2 |
3-1 |
3-1 |
3,2 |
3 |
3 |
0 |
1 |
1 |
0 |
Чтобы переместить самый нижний диск на стержень В, необходимо 2n-1 перемещений. Общее число перемещений равно
. (1.23)
Предыдущие утверждения можно доказать по индукции. По этой же схеме можно построить рекурсивный алгоритм.
1.10. Контрольные вопросы и упражнения
В чем суть проблемы алгоритмической неразрешимости? Каковы пути решения этой проблемы?
Какие виды обработки данных знаете Вы?
Докажите, что каждый из рассмотренных в данной главе вычислительных процессов является алгоритмом.
4. Предложите несколько вариантов произвольных СА, содержащих 8..10 вершин, используя различные допустимые соединения вершин разных типов. Составьте фрагменты СА для формул (1.3) ... (1.6) и сравните попарно фрагменты . для формул (1.3), (1.5) и (1.4), (1.6). В каком случае вычисления рациональнее и почему ?
6. Для функции y=F(x), представленной разложением в ряд (1.8), постройте СА, позволяющего вычислить значение y в точках разбиения с погрешностью при равномерном разбиении области определения [a,b] на m частей.
7. Составьте два варианта фрагмента СА для примера 1.6 с использованием и без использования оператора case ... of и сравните их . В чем принципиальное отличие этих вариантов ?
8. Составьте СА определения максимального элемента множества, содержащего 12 чисел. Какое количество сравнений и перестановок элементов понадобится в случае, если массив отсортирован в порядке возрастания элементов? Выведите формулу для количества сравнений и перестановок в случае произвольного количества элементов.
Каким требованиям должны удовлетворять размерности матриц A, B и C, чтобы корректно выполнить матричную операцию D = A + BхC . Сколько циклов понадобится для вычисления матрицы D?
Докажите, что для перемещения самого нижнего, n-го диска в задаче “Ханойские башни” на свободный стержень необходимо 2n-1 одиночных перемещений. Докажите также, что общее число перемещений на свободный диск определяется числом 2n-1.
Составьте СА поиска пути в лабиринте.
Если MIN_A (п.1.6.) описывает встроенную в некий вычислительный процесс (модуль) процедуру, то при обращении к этой процедуре возможны случаи, когда сформированный в основном процессе массив А содержит всего один элемент либо пуст. Составьте СА для процедуры MIN_A, в которой учитывались бы эти случаи .
В СА решения квадратного уравнения (рис 1.4.) используется преобразования уравнения общего вида (1.7.) к приведённому. В некоторых случаях может оказаться что а = 0; при этом вычисление p и q связано с делением на 0, что недопустимо. Скорректируйте данную СА с учётом этого обстоятельства.
Составьте словесное описание алгоритма перемножения двух матриц .
Почему некоммутативна в общем случае операция перемножения двух квадратных матриц одинаковой размерности? В каком частном случае коммутативность имеет место?