|
|
|
|
|
Хопкрофт, Джон, Э., Мотвани, Раджив, Ульман, Джеффри, Д.
Введение в
теорию автоматов, языков и
вычислений М.:
Издательский дом "Вильямс", 2002 |
|
|
|
Содержание |
|
|
|
Предисловие Как
пользоваться книгой Требования
к уровню подготовки Упражнения Поддержка
в World Wide Web Благодарности |
14 15 15 16 16 16 |
|
|
ГЛАВА 1. Автоматы: методы
и понятия 1.1. Зачем
изучается теория автоматов? 1.1.1.
Введение в теорию конечных автоматов 1.1.2.
Структурные представления 1.1.3.
Автоматы и сложность 1.2. Введение
в теорию формальных доказательств 1.2.1.
Дедуктивные доказательства 1.2.2.
Сведение к определениям 1.2.3.
Другие формы теорем 1.2.4.
Теоремы без гипотезы 1.3. Дополнительные
схемы доказательств 1.3.1.
Доказательства эквивалентностей, связанных с множествами 1.3.2.
Контрапозиция 1.3.3.
Доказательство методом "от противного" 1.3.4.
Контрпримеры 1.4. Индуктивные
доказательства 1.4.1.
Индукция по целым числам 1.4.2.
Более общие формы целочисленных индуктивных доказательств 1.4.3.
Структурная индукция 1.4.4.
Совместная индукция 1.5. Основные
понятия теории автоматов 1.5.1.
Алфавиты 1.5.2.
Цепочки 1.5.3.
Языки 1.5.4.
Проблемы Резюме Литература |
17 18 18 20 21 21 22 25 27 30 30 30 32 34 34 36 36 39 40 43 45 46 46 47 48 50 52 |
|
|
ГЛАВА 2. Конечные
автоматы 2.1. Неформальное
знакомство с конечными автоматами 2.1.1.
Основные правила 2.1.2.
Протокол 2.1.3.
Возможность игнорирования автоматом некоторых действий 2.1.4.
Система в целом как автомат 2.1.5.
Проверка протокола с помощью автомата-произведения 2.2. Детерминированные
конечные автоматы 2.2.1.
Определение детерминированного конечного автомата 2.2.2.
Как ДКА обрабатывает цепочки 2.2.3.
Более простые представления ДКА 2.2.4.
Расширение функции переходов на цепочки 2.2.5.
Язык ДКА 2.2.6.
Упражнения к разделу 2.2 2.3. Недетерминированные
конечные автоматы 2.3.1.
Неформальное описание недетерминированного конечного автомата 2.3.2.Определение
недетерминированного конечного автомата 2.3.3.
Расширенная функция переходов 2.3.4.
Язык НКА 2.3.5.
Эквивалентность детерминированных и
недетерминированных конечных
автоматов 2.3.6.
Плохой случай для конструкции подмножеств 2.3.7.
Упражнения к разделу 2.3 2.4. Приложение:
поиск в тексте 2.4.1.
Поиск цепочек в тексте 2.4.2.
Недетерминированные конечные автоматы для поиска в тексте 2.4.3.
ДКА, распознающий множество ключевых слов 2.4.4.
Упражнения к разделу 2.4 2.5. Конечные
автоматы с эпсилон-переходами 2.5.1.
Использование е-переходов 2.5.2.
Формальная запись е-НКА 2.5.3.
Что такое е-замыкание 2.5.4.
Расширенные переходы и языки г-НКА 2.5.5.
Устранение е-переходов 2.5.6.
Упражнения к разделу 2.5 Резюме Литература |
53 54 54 55 57 59 61 61 62 62 64 65 68 69 71 72 73 74 75 77 81 83 85 85 86 87 89 89 89 91 91 92 94 97 97 98 |
|
|
ГЛАВА 3. Регулярные
выражения и языки 3.1. Регулярные
выражения 3.1.1.
Операторы регулярных выражений 3.1.2.
Построение регулярных выражений 3.1.3.
Приоритеты регулярных операторов 3.1.4.
Упражнения к разделу 3.1 3.2. Конечные
автоматы и регулярные выражения 3.2.1.
От ДКА к регулярным выражениям 3.2.2.
Преобразование ДКА в регулярное выражение методом исключения
состояний 3.2.3.
Преобразование регулярного выражения в автомат 3.2.4.
Упражнения к разделу 3.2 3.3. Применение
регулярных выражений 3.3.1.
Регулярные выражения в UNIX 3.3.2.
Лексический анализ 3.3.3.
Поиск образцов в тексте 3.3.4.
Упражнения к разделу 3.3 3.4. Алгебраические законы
для регулярных выражений 3.4.1.
Ассоциативность и коммутативность 3.4.2.
Единичные и нулевые элементы 3.4.3.
Дистрибутивные законы 3.4.4.
Закон идемпотентности 3.4.5.
Законы, связанные с оператором итерации 3.4.6.
Установление законов для регулярных выражений 3.4.7. Проверка истинности алгебраических законов для регулярных выражений 3.4.8. Упражнения к разделу 3.4 Резюме Литература |
101 101 102 104 106 108 108 109 114 120 124 126 126 128 130 132 132 133 134 134 135 136 136 139 140 141 142 |
|
|
ГЛАВА 4. Свойства
регулярных языков 4.1. Доказательство
нерегулярности языков 4.1.1.
Лемма о накачке для регулярных языков 4.1.2.
Применение леммы о накачке 4.1.3.
Упражнения к разделу 4.1 4.2. Свойства
замкнутости регулярных языков 4.2.1.
Замкнутость регулярных языков относительно булевых операций 4.2.2.
Обращение 4.2.3.
Гомоморфизмы 4.2.4.
Обратный гомоморфизм 4.2.5.
Упражнения к разделу 4.2 4.3. Свойства
разрешимости регулярных языков 4.3.1.
Преобразования различных представлений языков 4.3.2.
Проверка пустоты регулярных языков 4.3.3.
Проверка принадлежности регулярному языку 4.3.4.
Упражнения к разделу 4.3 4.4. Эквивалентность
и минимизация автоматов 4.4.1.
Проверка эквивалентности состояний 4.4.2.
Проверка эквивалентности регулярных языков 4.4.3.
Минимизация ДКА 4.4.4.
Почему минимизированный ДКА невозможно улучшить 4.4.5.
Упражнения к разделу 4.4 Резюме Литература |
143 143 144 145 147 148 149 154 156 157 163 166 167 169 170 171 171 172 175 177 180 182 183 183 |
|
|
ГЛАВА 5.
Контекстно-свободные грамматики и языки
5.1. Контекстно-свободные
грамматики 5.1.1.
Неформальный пример 5.1.2.
Определение контекстно-свободных грамматик 5.1.3.
Порождения с использованием грамматики 5.1.4.
Левые и правые порождения 5.1.5.
Язык, задаваемый грамматикой 5.1.6.
Выводимые цепочки 5.1.7.
Упражнения к разделу 5.1 5.2. Деревья
разбора 5.2.1.
Построение деревьев разбора 5.2.2.
Крона дерева разбора 5.2.3.
Вывод, порождение и деревья разбора 5.2.4.
От выводов к деревьям разбора 5.2.5.
От деревьев к порождениям 5.2.6.
От порождений к рекурсивным выводам 5.2.7.
Упражнения к разделу 5.2 5.3. Приложения
контекстно-свободных грамматик 5.3.1.
Синтаксические анализаторы 5.3.2.
Генератор синтаксических анализаторов YACC 5.3.1.
Языки описания документов 5.3.4.
XML и определения типа документа 5.3.5.
Упражнения к разделу 5.3 5.4. Неоднозначность
в грамматиках и языках 5.4.1.
Неоднозначные грамматики 5.4.2.
Исключение неоднозначности из грамматик 5.4.3.
Левые порождения как способ выражения неоднозначности 5.4.4.
Существенная неоднозначность 5.4.5.
Упражнения к разделу 5.4 Резюме Литература |
185 185 185 187 189 191 193 194 195 197 197 199 200 201 202 205 207 207 208 210 211 213 219 220 220 222 225 226 228 229 230 |
|
|
ГЛАВА 6. Автоматы с
магазинной памятью 6.1. Определение
автоматов с магазинной памятью 6.1.1.
Неформальное введение 6.1.2.
Формальное определение автомата с магазинной памятью 6.1.3.
Графическое представление МП-автоматов 6.1.4.
Конфигурации МП-автомата 6.1.5.
Упражнения к разделу 6.1 6.2. Языки
МП-автоматов 6.2.1.
Допустимость по заключительному состоянию 6.2.2.
Допустимость по пустому магазину 6.2.3.
От пустого магазина к заключительному состоянию 6.2.4.
От заключительного состояния к пустому магазину 6.2.5.
Упражнения к разделу 6.2 6.3. Эквивалентность
МП-автоматов и КС-грамматик 6.3.1.
От грамматик к МП-автоматам 6.3.2.
От МП-автоматов к грамматикам 6.3.3.
Упражнения к разделу 6.3 6.4. Детерминированные
автоматы с магазинной памятью 6.4.1.
Определение детерминированного МП-автомата Регулярные
языки и детерминированные МП-автоматы 6.4.3.
Детерминированные МП-автоматы и КС-языки 6.4.4.
Детерминированные МП-автоматы и неоднозначные грамматики 6.4.5.
Упражнения к разделу 6.4 Резюме Литература |
233 233 233 235 237 238 241 242 242 244 244 247 249 251 251 255 259 260 260 261 262 263 264 265 266 |
|
|
ГЛАВА 7. Свойства
контекстно-свободных языков 7.1. Нормальные
формы контекстно-свободных грамматик 7.1.1.
Удаление бесполезных символов 7.1.2.
Вычисление порождающих и достижимых символов 7.1.3.
Удаление Е-продукций 7.1.4.
Удаление цепных продукций 7.1.5.
Нормальная форма Хомского 7.1.6.
Упражнения к разделу 7.1 7.2. Лемма
о накачке для контекстно-свободных языков 7.2.1.
Размер деревьев разбора 7.2.2.
Утверждение леммы о накачке 7.2.3.
Приложения леммы о накачке к КС-языкам 7.2.4.
Упражнения к разделу 7.2 7.3. Свойства
замкнутости контекстно-свободных языков 7.3.1.
Подстановки 7.3.2.
Приложения теоремы о подстановке 7.3.3.
Обращение 7.3.4.
Пересечение с регулярным языком 7.3.5.
Обратный гомоморфизм 7.3.6.
Упражнения к разделу 7.3 7.4. Свойства
разрешимости КС-языков 7.4.1.
Сложность взаимных преобразований КС-грамматик и
МП- автоматов 7.4.2.
Временная сложность преобразования к нормальной форме Хомского 7.4.3.
Проверка пустоты КС-языков 7.4.4.
Проверка принадлежности КС-языку 7.4.5.
Обзор неразрешимых проблем КС-языков 7.4.6. Упражнения к разделу 7.4 Резюме Литература |
269 269 269 271 273 276 280 284 287 287 288 290 293 295 295 297 298 298 302 304 306 306 308 309 311 314 315 316 317 |
|
|
ГЛАВА 8. Введение в
теорию машин Тьюринга 8.1. Задачи,
не решаемые компьютерами 8.1.1.
Программы печати "Hello, world" 8.1.2.
Гипотетическая программа проверки приветствия мира 8.1.3.
Сведение одной проблемы к другой 8.1.4.
Упражнения к разделу 8.1 8.2. Машина
Тьюринга 8.2.1.
Поиски решения всех математических вопросов 8.2.2.
Описание машин Тьюринга 8.2.3.
Конфигурации машин Тьюринга 8.2.4.
Диаграммы переходов для машин Тьюринга 8.2.5.
Язык машины Тьюринга 8.2.6.
Машины Тьюринга и останов 8.2.7.
Упражнения к разделу 8.2 8.3. Техника
программирования машин Тьюринга 8.3.1.
Память в состоянии 8.3.2.
Многодорожечные ленты 8.3.3.
Подпрограммы 8.3.4.
Упражнения к разделу 8.3 8.4. Расширения
базовой машины Тьюринга 8.4.1.
Многоленточные машины Тьюринга 8.4.2.
Эквивалентность одноленточных и многоленточных машин Тьюринга 8.4.3.
Время работы и конструкция "много лент к одной" 8.4.4.
Недетерминированные машины Тьюринга 8.4.5.
Упражнения к разделу 8.4 8.5. Машины
Тьюринга с ограничениями 8.5.1.
Машины Тьюринга с односторонними лентами 8.5.2.
Мультистековые машины 8.5.3.
Счётчиковые машины 8.5.4.
Мощность счётчиковых машин 8.5.5.
Упражнения к разделу 8.5 8.6. Машины
Тьюринга и компьютеры 8.6.1.
Имитация машины Тьюринга на компьютере 8.6.2.
Имитация компьютера на машине Тьюринга 8.6.3.
Сравнение времени работы компьютеров и машин Тьюринга Резюме Литература |
319 319 320 322 325 328 328 329 330 331 334 337 338 339 340 340 342 344 346 346 347 348 349 351 353 355 356 358 361 362 364 365 365 366 371 374 376 |
|
|
ГЛАВА 9. Неразрешимость 9.1. Неперечислимый
язык 9.1.1.
Перечисление двоичных цепочек 9.1.2.
Коды машин Тьюринга 9.1.3.
Язык диагонализации 9.1.4.
Доказательство неперечислимости Ld 9.1.5.
Упражнения к разделу 9.1 9.2. Неразрешимая
РП-проблема 9.2.1.
Рекурсивные языки 9.2.2.
Дополнения рекурсивных и РП-языков 9.2.3.
Универсальный язык 9.2.4.
Неразрешимость универсального языка 9.2.5.
Упражнения к разделу 9.2 9.3. Неразрешимые
проблемы, связанные с машинами Тьюринга 9.3.1.
Сведения 9.3.2.
Машины Тьюринга, допускающие пустой язык 9.3.3.
Теорема Раиса и свойства РП-языков 9.3.4.
Проблемы, связанные с описаниями языков в виде машин Тьюринга 9.3.5.
Упражнения к разделу 9.3 9.4. Проблема
соответствий Поста 9.4.1.
Определение проблемы соответствий Поста 9.4.2.
"Модифицированная" ПСП 9.4.3.
Завершение доказательства неразрешимости ПСП 9.4.4.
Упражнения к разделу 9.4 9.5. Другие
неразрешимые проблемы 9.5.1.
Проблемы, связанные с программами 9.5.2.
Неразрешимость проблемы неоднозначности КС-грамматик 9.5.3.
Дополнение языка списка 9.5.4.
Упражнения к разделу 9.5 Резюме Литература |
377 378 378 379 380 381 382 382 383 385 387 389 390 392 392 394 397 399 400 401 402 404 407 412 413 413 413 416 418 420 421 |
|
|
ГЛАВА 10. Труднорешаемые
проблемы 10.1. Классы
P и NP 10.1.1.
Проблемы, разрешимые за полиномиальное время 10.1.2.
Пример: алгоритм Крускала 10.1.3.
Недетерминированное полиномиальное время 10.1.4.
Пример из NP: проблема коммивояжера 10.1.5.
Полиномиальные сведения 10.1.6.
NP-полные проблемы 10.1.7.
Упражнения к разделу 10.1 10.2. Первая
NP-полная проблема 10.2.1.
Проблема выполнимости 10.2.2.
Представление экземпляров ВЫП 10.2.3.
NP-полнота проблемы ВЫП 10.2.4.
Упражнения к разделу 10.2 10.3. Ограниченная
проблема выполнимости 10.3.1.
Нормальные формы булевых выражений 10.3.2.
Преобразование формул в КНФ 10.3.3.
NP-полнота проблемы ВКНФ 10.3.4.
NP-полнота проблемы 3-выполнимости 10.3.5.
Упражнения к разделу 10.3 10.4. Еще
несколько NP-полных проблем 10.4.1.
Описание NP-полных проблем 10.4.2.
Проблема независимого множества 10.4.3.
Проблема узельного покрытия 10.4.4.
Проблема ориентированного гамильтонова цикла 10.4.5.
Неориентированные гамильтоновы циклы и ПКОМ 10.4.6.
Вывод относительно NP-полных проблем 10.4.7.
Упражнения к разделу 10.4 Резюме Литература |
423 424 424 424 429 429 431 432 434 436 436 438 439 445 445 446 447 450 455 456 457 458 458 462 464 470 472 473 477 478 |
|
|
ГЛАВА 11. Дополнительные
классы проблем 11.1. Дополнения
языков из NP 11.1.1. Класс языков co-NP 11.1.2. NP-полные проблемы и co-NP 11.1.3.
Упражнения к разделу 11.1 11.2. Проблемы, разрешимые в
полиномиальном пространстве 11.2.1.
Машины Тьюринга с полиномиальным пространством 11.2.2.
Связь PS и NPS с определёнными ранее классами 11.2.3.
Детерминированное и недетерминированное полиномиальное пространство 11.3. Проблема, полная для PS 11.3.1.
PS-полнота 11.3.2.
Булевы формулы с кванторами 11.3.3.
Вычисление булевых формул с кванторами 11.3.4.
PS-полнота проблемы КБФ 11.3.5.
Упражнения к разделу 11.3 11.4. Классы языков, основанные на
рандомизации 11.4.1.
Быстрая сортировка – пример рандомизированного алгоритма 11.4.2.
Вариант машины Тьюринга с исползованием рандомизации 11.4.3.
Язык рандомизированной машины Тьюринга 11.4.4.
Класс RP 11.4.5.
Распознавание языков из RP 11.4.6.
Класс ZPP 11.4.7.
Соотношение между RP и ZPP 11.4.8.
Соотношения с классами P и NP 11.5. Сложность проверки простоты 11.5.1.
Важность проверки пустоты 11.5.2.
Введение в модулярную арифметику 11.5.3.
Сложность вычислений в модулярной арифметике 11.5.4.
Рандомизированная полиномиальная проверка простоты 11.5.5.
Недетерминированные проверки простоты 11.5.6.
Упражнения к разделу 11.5 Резюме Литература Предметный указатель |
481 482 482 483 484 485 485 486 487 489 490 491 492 494 498 499 499 500 502 504 506 506 507 509 509 510 514 512 515 516 519 520 521 523 |
|
|
|
|