
- •Алгоритмы и анализ сложности
- •Список литературы (с2)
- •Основные типы алгоритмических моделей. (с8)
- •Машина Поста.
- •Машина Тьюринга.
- •Второй тип алгоритмических моделей.
- •Третий тип алгоритмических моделей.
- •Формальные грамматики и языки
- •Основные понятия (с56)
- •Классификация грамматик и языков по Хомскому (с61-62)
- •Примеры грамматик и языков.
- •Разбор цепочек(с64-67)
- •Формальное определение автомата (с79)
- •Основы анализа алгоритмов.
- •Классификация алгоритмов по виду функции трудоёмкости.
- •1.Количественно-зависимые по трудоемкости алгоритмы
- •2.Параметрически-зависимые по трудоемкости алгоритмы
- •3. Количественно-параметрические по трудоемкости алгоритмы
- •3.1 Порядково-зависимые по трудоемкости алгоритмы
- •Асимптотическая нотация
- •1. Оценка (тетта)
- •2. Оценка о (о большое)
- •3. Оценка (Омега)
- •Класс p
- •Случаи, когда временными оценками пренебрегают.
- •Методы оценки ресурсной эффективности алгоритмов
- •Правила анализа программ
Примеры грамматик и языков.
Разбор цепочек(с64-67)
Цепочка принадлежит языку, порождаемому грамматикой, только в том случае, если существует ее вывод из цели этой грамматики. Процесс построения такого вывода ( а, следовательно, и определения принадлежности цепочки языку) называется разбором.
С практической точки зрения наибольший интерес представляет разбор по контекстно-свободным (КС и УКС) грамматикам. Их порождающей мощности достаточно для описания большей части синтаксической структуры языков программирования, для различных подклассов КС-грамматик имеются хорошо разработанные практически приемлемые способы решения задачи разбора.
Рассмотрим основные понятия и определения, связанные с разбором по КС- грамматике.
В грамматике для одной и той же цепочки может быть несколько выводов, эквивалентных в том смысле, что в них в одних и тех же местах применяются одни и те же правила вывода, но в различном порядке.
Здесь (2) - левосторонний вывод, (3) - правосторонний, а (1) не является ни левосторонним, ни правосторонним, но все эти выводы являются эквивалентными в указанном выше смысле.
Для КС-грамматик можно ввести удобное графическое представление вывода, называемое деревом вывода, причем для всех эквивалентных выводов деревья вывода совпадают.
Дерево вывода часто называют деревом грамматического разбора, или синтаксическим деревом, а процесс построения дерева вывода - грамматическим разбором (синтаксическим анализом).
Это утверждение эквивалентно тому, что цепочка α имеет два или более разных левосторонних (или правосторонних) выводов.
Определение: в противном случае грамматика называется однозначной.
Определение: язык, порождаемый грамматикой, называется неоднозначным, если он не может быть порожден никакой однозначной грамматикой.
Однако это не означает, что язык L(G) обязательно неоднозначный. Определенная нами неоднозначность - это свойство грамматики, а не языка, т.е. для некоторых неоднозначных грамматик существуют эквивалентные им однозначные грамматики.
Если грамматика используется для определения языка программирования, то она должна быть однозначной.
Проблема, порождает ли данная КС-грамматика однозначный язык (т.е. существует ли эквивалентная ей однозначная грамматика), является алгоритмически неразрешимой.
Дерево вывода можно строить нисходящим либо восходящим способом.
При нисходящем разборе дерево вывода формируется от корня к листьям; на каждом шаге для вершины, помеченной нетерминальным символом, пытаются найти такое правило вывода, чтобы имеющиеся в нем терминальные символы “проектировались” на символы исходной цепочки.
Метод восходящего разбора заключается в том, что исходную цепочку пытаются “свернуть” к начальному символу S; на каждом шаге ищут подцепочку, которая совпадает с правой частью какого-либо правила вывода; если такая подцепочка находится, то она заменяется нетерминалом из левой части этого правила. Если грамматика однозначная, то при любом способе построения будет получено одно и то же дерево разбора.
(с68-69)
Примеры решения задач на слайде (с70)
Контекстно-свободные грамматики широко применяются для определения грамматической структуры в грамматическом анализе.
Регулярные грамматики (в виде регулярных выражений) широко применяются как шаблоны для текстового поиска, разбивки и подстановки, в том числе в лексическом анализе.
Лекция №5
Введение в теорию конечных автоматов (КА). Формальное определение КА, способы задания, примеры. Свойства и варианты конечных автоматов (КА).
(с77)
Два наиболее распространенных способа задания формального языка - это
1) порождающий, который предполагает наличие алгоритма, последовательно порождающего все правильные предложения языка (грамматики);
2) распознающий (или аналитический), который предполагают наличие алгоритма, определяющего принадлежность любой фразы данному языку (автоматы). Если цепочка принадлежит языку, то процедура останавливается с ответом «да», т. е. допускает цепочку; иначе — останавливается с ответом «нет» или зацикливается. Язык, определяемый распознавателем — это множество всех цепочек, которые он допускает.
Примеры распознавателей:
Машина Тьюринга (МТ). Язык, который можно задать с помощью МТ, называется рекурсивно перечислимым. Вместо МТ можно использовать эквивалентные алгоритмические схемы: нормальный алгоритм Маркова (НАМ), машину Поста и др.
Линейно ограниченный автомат (ЛОА). Представляет собой МТ, в которой лента не бесконечна, а ограничена длиной входного слова. Определяет контекстно-
зависимые языки.
Автомат с магазинной (внешней) памятью (МП-автомат). В отличие от ЛОА, головка не может изменять входное слово и не может сдвигаться влево; имеется дополнительная память (магазин, или стек), работающая по принципу LIFO. Определяет контекстно-свободные языки.
Конечный автомат (КА). Отличается от МП-автомата отсутствием магазина (т.е. отсутствует внешняя (рабочая) память). Определяет регулярные языки.
Автоматами в данном контексте называют математические модели некоторых вычислительных устройств. (с78)
Автомат – это абстрактное вычислительное устройство (алгоритм), определяющий (вычисляющий) некоторое множество и, возможно, преобразующий его в другое множество. Неформальное описание автоматов выглядит следующим образом: автомат имеет входную ленту, управляющее устройство с конечной памятью для хранения состояний, а также может иметь вспомогательную (рабочую) память и выходную ленты.
Существует два типа автоматов:
1) распознаватели - автоматы без выхода, которые распознают, принадлежит ли входная цепочка заданному множеству L (работа автомата определяется его конечным состоянием);
2) преобразователи - автоматы с выходом, которые преобразуют входную цепочку x в цепочку y при условии, что x ∈ L.
Автомат работает в дискретном времени (измеряется в тактах).
Входную ленту можно рассматривать как линейную последовательность ячеек, причем каждая ячейка может хранить один символ из некоторого конечного входного алфавита и в каждый момент времени лента содержит только конечное число ячеек.
Входная головка в каждый момент времени читает (обозревает) одну ячейку входной ленты. За один такт работы автомата входная головка может сдвинуться на одну ячейку вправо, влево (если МТ и ЛОА) или остаться на месте, при этом она выполняет только чтение, т.е. в ходе работы автомата символы в ячейках входной ленты не меняются (если МТ и ЛОА).
Рабочая лента - это вспомогательное хранилище информации. Данные с нее могут читаться автоматом, могут и записываться на нее.
Управляющее устройство - это программа, управляющая поведением автомата. Оно представляет собой конечное множество состояний вместе с отображением, описывающим, как меняются состояния в соответствии с текущим входным символом, читаемым входной головкой, и текущей информацией, извлеченной с рабочей ленты. Управляющее устройство также определяет направление сдвига рабочей головки и то, какую информацию записать на рабочую ленту.
Автомат работает, выполняя некоторую последовательность рабочих тактов. В начале такта читается входной символ и исследуется информация на рабочей ленте. Затем, в зависимости от прочитанной информации и текущего состояния, определяются действия автомата:
1) входная головка сдвигается вправо, влево (МТ и ЛОА) или стоит на месте;
2) на рабочую ленту записывается некоторая информация;
3) изменяется состояние управляющего устройства;
4) на выходную ленту (если она есть) записывается символ.
Поведение автомата удобно описывать в терминах конфигурации автомата, которая включает в себя:
а) состояние управляющего устройства;
б) содержимое входной ленты с положением входной головки;
в) содержимое рабочей ленты вместе с положением рабочей головки;
г) содержимое выходной ленты, если она есть.
Управляющее устройство может быть недетерминированным. В таком случае для каждой конфигурации существует конечное множество возможных следующих тактов, любой из которых автомат может сделать, исходя из этой конфигурации. Управляющее устройство будет детерминированным, если для каждой конфигурации будет возможен только один следующий такт.
Сложность рабочей ленты определяет сложность автомата. Так, например:
1) машина Тьюринга имеет неограниченную в обе стороны ленту;
2) у линейно-ограниченного автомата длина рабочей ленты представляет собой линейную функцию длины входной цепочки;
3) у МП-автомата рабочая лента работает по принципу магазина LIFO;
4) у конечного автомата рабочая лента отсутствует.
Если зафиксировано некоторое начальное состояние, то такой автомат называют инициальным.