Издание 6-е, дополненное. Книга содержит задачи по программированию различной трудности. Большинство задач приводятся с решениями. Цель книги — научить основным методам построения корректных и быстрых алгоритмов. Для учителей информатики, старшеклассников, студентов младших курсов высших учебных заведений. Пособие может быть использовано на кружковых и факультативных занятиях в общеобразовательных учреждениях, в школах с углублённым изучением математики и информатики, а также в иных целях, не противоречащих законодательству РФ.
Несколько замечаний вместо предисловия 3
Содержание 5
1. Переменные, выражения, присваивания 8
1.1. Задачи без массивов 8
1.2. Массивы 23
1.3. Индуктивные функции (по А.Г. Кушниренко) 38
2. Порождение комбинаторных объектов 43
2.1. Размещения с повторениями 43
2.2. Перестановки 44
2.3. Подмножества 45
2.4. Разбиения 48
2.5. Коды Грея и аналогичные задачи 49
2.6. Несколько замечаний 55
2.7. Подсчёт количеств 57
3. Обход дерева. Перебор с возвратами 60
3.1. Ферзи, не бьющие друг друга: обход дерева позиций 60
3.2. Обход дерева в других задачах 70
4. Сортировка 72
4.1. Квадратичные алгоритмы 72
4.2. Алгоритмы порядка nlog n 73
4.3. Применения сортировки 80
4.4. Нижние оценки для числа сравнений при сортировке 82
4.5. Родственные сортировке задачи 84
5. Конечные автоматы и обработка текстов 90
5.1. Составные символы, комментарии и т.п. 90
5.2. Ввод чисел 92
6. Типы данных 96
6.1. Стеки 96
6.2. Очереди 103
6.3. Множества 111
6.4. Разные задачи 115
7. Рекурсия 117
7.1. Примеры рекурсивных программ 117
7.2. Рекурсивная обработка деревьев 120
7.3. Порождение комбинаторных объектов, перебор 123
7.4. Другие применения рекурсии 127
8. Как обойтись без рекурсии 135
8.1. Таблица значений (динамическое программирование) 135
8.2. Стек отложенных заданий 140
8.3. Более сложные случаи рекурсии 143
9. Разные алгоритмы на графах 146
9.1. Кратчайшие пути 146
9.2. Связные компоненты, поиск в глубину и ширину 150
9.3. Сети, потоки и разрезы 156
10. Сопоставление с образцом 176
10.1. Простейший пример 176
10.2. Повторения в образце - источник проблем 179
10.3. Вспомогательные утверждения 181
10.4. Алгоритм Кнута-Морриса-Пратта 181
10.5. Алгоритм Бойера-Мура 184
10.6. Алгоритм Рабина 186
10.7. Более сложные образцы и автоматы 188
10.8. Суффиксные деревья 195
11. Анализ игр 208
11.1. Примеры игр 208
11.2. Цена игры 210
11.3. Вычисление цены: полный обход 218
11.4. Альфа-бета-процедура 221
11.5. Ретроспективный анализ 225
12. Оптимальное кодирование 228
12.1. Коды 228
12.2. Неравенство Крафта-Макмиллана 229
12.3. Код Хаффмана 233
12.4. Код Шеннона-Фано 235
13. Представление множеств. Хеширование 239
13.1. Хеширование с открытой адресацией 239
13.2. Хеширование со списками 242
14. Деревья. Сбалансированные деревья 248
14.1. Представление множеств с помощью деревьев 248
14.2. Сбалансированные деревья 256
15. Контекстно-свободные грамматики 267
15.1. Общий алгоритм разбора 267
15.2. Метод рекурсивного спуска 273
15.3. Алгоритм разбора для LL(1)-грамматик 284
16. Синтаксический разбор слева направо (LR) 292
16.1. LR-процессы 292
16.2. LR(0)-грамматики 298
16.3. SLR(1)-грамматики 304
16.4. LR(1)-грамматики, LALR(1)-грамматики 305
16.5. Общие замечания о разных методах разбора 308
Книги для чтения 310
Предметный указатель 311
Указатель имён 317
Название: Программирование: теоремы и задачи
Автор: Шень А.
Год: 2017
Жанр: Программирование, учебник
Издательство: М.: Издательство МЦНМО
Язык: Русский
Формат: pdf
Качество: eBook
Страниц: 321
Размер: 1,3 MB
Скачать Шень А. - Программирование: теоремы и задачи (2017)