Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Теория алгоритмов.doc
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
2.19 Mб
Скачать

Примеры нечисловых алгоритмов

Пример 7. Греческая мифология повествует о том, как легендарный Тезей отважился проникнуть в подземный лабиринт с тем, чтобы отыскать и убить чудовищного Минотавра и благополучно выбрался из лабиринта, пользуясь клубком ниток, врученным ему Ариадной. Каким же методом пользовался Тезей, продвигаясь по запутанным коридорам подземелья, что не заблудился?

Представим себе, что имеется конечное число площадок лабиринта A,B,C,D,…,Q, соединенных между собой коридорами. Каждый коридор соединяет две смежные площадки. От некоторых площадок исходит только один коридор (тупиковые площадки). Например, схематически лабиринт можно представить в следующем виде:

Площадка X достижима с площадки Y, если существует путь, ведущий от Y к X через промежуточные коридоры и площадки: Y,X1,X2,…,Xn,X, где Y и X1,X1 и X2,…,Xn и X смежные площадки.

Так, в нашей схеме площадка G достижима с площадки A, а площадка M – недостижима.

Тезею следует разыскать Минотавра, если площадка, на которой находится Минотавр, достижима с той площадки, где стоит Ариадна с концом клубка в руке. Уничтожив Минотавра, Тезею следует возвратиться по кратчайшему пути. Если же Минотавр недостижим, то Тезею следует, обследовав все достижимые площадки, вернуться к Ариадне.

Укажем один приемлемый алгоритм. Будем считать, что кроме клубка ниток Тезей запасся куском мела для пометки обследованных площадок и коридоров.

В процессе поиска Тезею могут встретиться коридоры:

а) ни разу не пройденные (свободные),

б) пройденные один раз (с протянутой по ним нитью),

в) пройденные дважды – туда и обратно (помеченные с двух концов крестиками).

В случае а) Тезею следует идти вперед, разматывая за собой клубок. Если с данной площадки исходит несколько свободных коридоров, то он должен выбрать ближайший справа от себя коридор. Например, попав первый раз с площадки C на площадку E, он должен идти по коридору ED.

Если же окажется, что на данной площадке все коридоры меченые (т.е. либо отмечены крестиком, либо протянута нить), то в этом случае Тезею следует двигаться в обратном направлении по тому же коридору, по которому он только что пришел. При этом ему следует наматывать клубок и коридор помечать крестиком. Так, например, попав на площадку B со стороны D он не найдет свободного коридора и вынужден будет идти по BD, DE и наматывать клубок. Коридоры BD и DE с обоих концов будут помечены крестиком.

Выбор хода на площадке зависит от следующих признаков:

  1. Минотавр. Следует убить его и по коридорам, по которым протянута нить, вернуться к Ариадне.

  2. Свободный ход. Имеется, по крайней мере, один свободный коридор.

  3. Петля. От данной площадки расходятся, по крайней мере, два коридора, через которые протянута нить.

  4. Отсутствие всех трех предыдущих признаков – тупиковая площадка.

  5. Ариадна. Поиск прекращается.

Итак, процесс поиска Минотавра определяется следующей таблицей.

№ п/п

Признак

Ход

1

Минотавр

Остановка, далее обратный ход

2

Свободный коридор

Разматывание нити

3

Петля

Наматывание нити

4

Тупик

Наматывание нити

5

Ариадна

Прекращение поиска

Через конечное число ходов Тезей обязательно придет к Ариадне, т.к. лабиринт конечный. При этом если с площадки, где осталась Ариадна, достижима площадка с Минотавром, то Тезей обязательно разыщет его, если же площадка с Минотавром недостижима, то убедится в этом.

Пример 8. Вспомним алгебраический способ определения тождественной истинности формул алгебры высказываний: пользуясь основными тождествами булевой алгебры, данную формулу алгебры высказываний приводим к конъюнктивной нормальной форме. Далее смотрим: все ли элементарные дизъюнкции содержат некоторое элементарное высказывание А одновременно с его отрицанием А, и делаем соответствующий вывод.

Пример 9. На плацу выстроены в каре 100 солдат в форме 1010 без учета их роста. Требуется отобрать среди них самого высокого солдата.

Решение.

      1. Выбираем самого рослого в каждом ряду.

      2. Выбираем самого рослого среди 10 отобранных солдат.

Алгоритм для реализации в обоих этапах: В каждом ряду i=1,2,…,9.

        1. Начиная от j=1 до 9, сравни по росту стоящих рядом двух солдат xj и xj+1, переходи к указанию 2).

        2. Если xj выше чем xj+1 , то пусть они меняются местами, переходи к указанию 1).

        3. Солдат, стоящий крайним справа в ряду j самый рослый

        4. Выполни указания 1) и 2) для солдат, стоящих справа в каждом ряду.

        5. С олдат, стоящий в дальнем правом углу будет самым рослым.

Пример 10. Рабочее поле в виде квадрата разбито на n2 квадратиков, причем соседние квадратики соединены проходами (см. рис 1.). В нижнем левом углу имеется единственный вход (выход) в поле.

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

Команды для робота:

Приведем решение для случая, когда n – четное число. Каждой клетке зададим номер xi,j, где i – порядковый номер по горизонтали, а j – порядковый номер по вертикали. Входная клетка будет иметь номер x1,1.

      1. Вход в клетку х11.

      2. Вперед на 1 шаг.

      3. Вперед на (n-2) шага.

      4. Поворот на 900 вправо.

      5. Вперед на 1 шаг.

      6. Поворот на 900 вправо.

      7. Вперед на (n-2) шага.

      8. Поворот на 900 влево.

      9. Вперед на 1 шаг. Если это возможно, то перейти к указанию 12.

      10. Поворот на 900 влево.

      11. Переход к указанию 3.

      12. Поворот на 900 вправо.

      13. Вперед на 1 шаг.

      14. Поворот на 900 вправо.

      15. Вперед на (n-1) шаг.

      16. Поворот на 900 влево.

      17. Вперед на 1 шаг.

      18. Конец.

В случае, когда n – нечетное число, по-видимому, задача неразрешима.

Алгоритмы в примерах 7,8,9 и 10 являются примерами логических алгоритмов. Примерами нечисловых математических алгоритмов можно назвать способы решения задач на построение с помощью циркуля и линейки (такие задачи приведены в конце §1).