- •Дискретная математика
- •Введение
- •1. Введение в теорию множеств
- •1.1. Множества
- •Основные понятия
- •Операции над множествами
- •Свойства операций объединения и пересечения
- •1.2. Отношения
- •1.2.1. Бинарные отношения. Основные определения
- •1.2.2. Свойства бинарных отношений
- •2. Теория графов
- •2.1. Основные понятия
- •2.2. Способы задания графов
- •2.4. Сети и их свойства1
- •3. Введение в математическую логику
- •3.1. Логика высказываний
- •3.1.1. Высказывания
- •3.1.1.1. Понятие высказывания
- •2.1.1.2. Логические связки
- •1.1.3. Условные высказывания
- •1.1.4. Эквивалентные высказывания
- •3.1.2. Аксиоматические системы
- •3.1.2.1. Умозаключения
- •3.1.3. Полнота в логике высказываний
- •3.1.3.1. Эквивалентные замены логических связок
- •3.2. Логика предикатов
- •3.2.1. Определение предиката
- •3.2.2. Кванторы. Их свойства и применение
- •3.2.2.1. Квантор всеобщности и квантор существования
- •4. Прикладная теория алгоритмов
- •4.1. Алгоритм: определение и основные свойства
- •4.2. Реализация управляющих алгоритмов
- •4.3. Формализация понятия алгоритма
- •4.4. Машина Тьюринга
- •4.5. Свойства машины Тьюринга
- •4.6. Реализация машины Тьюринга
- •4.7. Формальные системы и алгоритмы.
- •5. Комбинаторный анализ
- •5.1. Основное правило комбинаторики
- •5.2. Правило суммы
- •5.3. Правило прямого произведения
- •5.4. Перестановки
- •5.5. Число различных k-элементарных подмножеств n-элементарного множества
- •5.6. Число подмножеств данного множества
- •5.7. Размещение элементов множества
- •5.7. Размещения с повторениями
- •5.8. Размещения без повторений
- •5.9. Комбинации элементов с повторениями
- •6. Языки и грамматики
- •6.1. Основные определения
- •6.2. Формальные грамматики
- •6.3. Грамматики с ограничениями на правила
- •6.4. Способы записи синтаксиса языка
- •Метаязык Хомского
- •Метаязык Хомского-Щутценберже
- •Бэкуса-Наура формы (бнф)
- •Список рекомендуемой литературы
4.5. Свойства машины Тьюринга
Рассмотрим несколько свойств машин Тьюринга.
Теорема 1. Для любой машины Тьюринга существует эквивалентная машина Тьюринга, такая, что все ребра, входящие в каждую вершину, помечены одними тем же направлением движения головки.
Доказательство легко следует из правила эквивалентного преобразования исходной машины Тьюринга.
Рис. 4.2.
Каждое состояние исходной МТ расщепляется на несколько эквивалентных состояний, в каждое из которых приходят ребра только с одинаковой пометкой о направленности движения головки.
Теорема 2. Для любой машины Тьюринга существует эквивалентная машина Тьюринга, работающая на полу бесконечной ленте.
Доказательство этой теоремы конструктивное, то есть мы дадим алгоритм, по которому для любой машины Тьюринга может быть построена эквивалентная машина Тьюринга с объявленным свойством. Во-первых, занумеруем ячейки рабочей ленты МТ, то есть определим повое расположение информации на ленте:
Рис. 4.3.
Затем перенумеруем ячейки, причем будем считать, что символ «*» не содержится в словаре МТ:
Рис. 4.4.
Наконец, изменим машину Тьюринга, удвоив число се состояний, и изменим сдвиг головки считывания-записи так, чтобы в одной группе состояний работа машины была бы эквивалентна ее работе в заштрихованной зоне, а в другой группе состояний машина работала бы так, как исходная машина работает в не заштрихованной зоне. Если при работе МТ встретится символ «*», значит головка считывания-записи достигла границы зоны.
Рис. 4.5.
Начальное состояние новой машины Тьюринга устанавливается в одной или другой зоне в зависимости оттого, в какой части исходной ленты располагалась головка считывания-записи в исходной конфигурации. Очевидно, что слева от ограничивающих маркеров «*» лента в эквивалентной машине Тьюринга не используется.
4.6. Реализация машины Тьюринга
Наращиваемую память в современных компьютерах можно считать аналогом бесконечной в одну сторону рабочей ленты машины Тьюринга. достаточно только пяти типов команд, чтобы реализовать операции машины Тьюринга.
Команда |
Пояснение |
Сдвиг {влево, вправо} |
Сдвиг головки на одну позицию на ленте влево или вправо |
Переход, р |
Безусловный переход к команде с номером р |
Если, s, р |
Условный переход к команде с номером р, если в обозреваемой ячейке находится символ s |
Печать, s |
Печать символа s в обозреваемую ячейку |
Стоп |
Останов |
Для того чтобы автоматическое вычислительное устройство могло реализовать любой алгоритм, достаточно, чтобы оно могло работать с линейной памятью и могло выполнять по крайней мере пять перечисленных выше операций. Известно, что все современные компьютеры включают подобные команды. Это означает, что все они являются универсальными вычислителями. Известно также, что кроме этих команд компьютеры включают также множество и других видов команд. Очевидно, эти дополнительные команды не расширяют принципиально возможностей компьютеров, но существенно повышают удобство и, главное, эффективность вычислителей.
Другой интересный вывод связан с возможностью реализации машины Тьюринга на языке высокого уровня. С помощью последовательности операторов, выбора (if-then-else), цикла (while) и перехода (goto) любую программу машины Тьюринга можно реализовать. Однако справедливо и более сильное утверждение: оператор перехода в этом наборе лишний. Действительно, пусть state — переменная типа состояние, symbol— переменная типа символ. Пусть элементарными операциями языка являются Читатъ(с) — чтение очередного символа из обозреваемой ячейки входной ленты (или моделирующего ее массива) и помещение его в переменную с, Писатъ(с) — печатать символ с в обозреваемую ячейку входной ленты и Сдвиг (D) — имитация сдвига головки чтения-записи по рабочей ленте МТ (фактически изменение индекса читаемого элемента одномерного массива).
Отсюда следует важный вывод: любую машину Тьюринга (и, следовательно, любой алгоритм) можно реализовать на языке высокого уровня с использованием только трех управляющих конструкций: последовательность, выбор и цикл. Тем самым мы доказали известную основную теорему структурного программирования, доказанную впервые совсем из других соображений Бомом и Якопини. Смысл этой важнейшей теоремы и более широко, структурного программирования как подхода в целом, состоит в том, что для спецификации алгоритмов достаточно очень небольшого числа программных структур — последовательности, выбора и цикла, каждая с одной точкой входа и одной точкой выхода. Использование только этих простых конструкции проясняет соотношение между статическим текстом программы и возможными динамическими путями всех выполнений программы.