361
Н.Вирт АЛГОРИТМЫ И СТРУКТУРЫ ДАННЫХ М.: Мир, 1989, 360 стр. От переводчика 5 Предисловие 8 Предисловие к изданию 1986 года 15 Нотация 17 1. Основные понятия структур данных 18 1.1. Введение 18 1.2. Концепция типа данных 22 1.3. Простейшие типы данных 26 1.4. Простейшие стандартные типы 27 1.5. Ограниченные типы (диапазоны) 33 1.6. Массив 33 1.7. Запись 37 1.8. Записи с вариантами 41 1.9. Множества 44 1.10. Представление массивов, записей и множеств 46 1.10.1. Представление Массивов 46 1.10.2. Представление записей 49 1.10.3. Представление множеств 50 1.11. Последовательности 51 1.11.1. Элементарные операции с последовательностями 54 1.11.2. Буферизованные последовательности 58 1.11.3. Стандартные ввод и вывод 64 1.12. Поиск 67 1.12.1. Линейный поиск 68 1.12.2. Поиск делением пополам (двоичный поиск) 70 1.12.3. Поиск в.таблице 72 1.12.4. Прямой поиск строки 74 1.12.5. Поиск в строке. Алгоритм Кнута, Мориса и Пратта 76 12.6. Поиск в строке. Алгоритм Боуера и Мура 83 Упражнения 87 2. Сортировка 90 2.1. Введение 90 2.2. Сортировка массивов 93 2.2.1. Сортировка с помощью прямого включения 95 2.2.2. Сортировка с помощью прямого выбора 99 2.2.3. Сортировка с помощью прямого обмена 101 2.3. Улучшенные методы сортировки 105 2.3.1. Сортировка с помощью включений с уменьшающимися расстояниями 105 2.3.2. Сортировка с помощью дерева 108

Вирт Н. - Алгоритмы и структуры данных.pdf

Embed Size (px)

Citation preview

Н.Вирт АЛГОРИТМЫ И СТРУКТУРЫ ДАННЫХ

М.: Мир, 1989, 360 стр. От переводчика 5 Предисловие 8 Предисловие к изданию 1986 года 15 Нотация 17 1. Основные понятия структур данных 18 1.1. Введение 18 1.2. Концепция типа данных 22 1.3. Простейшие типы данных 26 1.4. Простейшие стандартные типы 27 1.5. Ограниченные типы (диапазоны) 33 1.6. Массив 33 1.7. Запись 37 1.8. Записи с вариантами 41 1.9. Множества 44 1.10. Представление массивов, записей и множеств 46

1.10.1. Представление Массивов 46 1.10.2. Представление записей 49 1.10.3. Представление множеств 50

1.11. Последовательности 51 1.11.1. Элементарные операции с последовательностями 54 1.11.2. Буферизованные последовательности 58 1.11.3. Стандартные ввод и вывод 64

1.12. Поиск 67 1.12.1. Линейный поиск 68 1.12.2. Поиск делением пополам (двоичный поиск) 70 1.12.3. Поиск в.таблице 72 1.12.4. Прямой поиск строки 74 1.12.5. Поиск в строке. Алгоритм Кнута, Мориса и Пратта 76

12.6. Поиск в строке. Алгоритм Боуера и Мура 83 Упражнения 87 2. Сортировка 90 2.1. Введение 90 2.2. Сортировка массивов 93

2.2.1. Сортировка с помощью прямого включения 95 2.2.2. Сортировка с помощью прямого выбора 99 2.2.3. Сортировка с помощью прямого обмена 101

2.3. Улучшенные методы сортировки 105 2.3.1. Сортировка с помощью включений с уменьшающимися расстояниями

105

2.3.2. Сортировка с помощью дерева 108

2.3.3. Сортировка с помощью разделения 114 2.3.4. Нахождение медианы 121 2.3.5. Сравнение методов сортировки массивов 124

2.4. Сортировка последовательностей 126 2.4.1. Прямое слияние 126 2.4.2. Естественное слияние 133 2.4.3. Сбалансированное многопутевое слияние 142 2.4.4. Многофазная сортировка 148 2.4.5. Распределение начальных серий 161

Упражнения 168 3. Рекурсивные алгоритмы 171 3.1. Введение 171 3.2. Когда рекурсию использовать не нужно 174 3.3. Два примера рекурсивных программ 178 3.4. Алгоритмы с возвратом 185 3.5. Задача о восьми ферзях 191 3.6. Задача о стабильных браках 197 3.7. Задача оптимального выбора 203 Упражнения 210 4. Данные с динамической структурой 213 4.1. Типы рекурсивных данных 213 4.2. Ссылки 217 4.3. Линейные списки 224

4.3.1. Основные операции 224 4.3.2. Упорядоченные списки и перестройка списков 229 4.3.3. Приложение: топологическая сортировка 237

4.4. Деревья 245 4.4.1. Основные понятия и определения 245 4.4.2. Основные операции с двоичными деревьями 254 4.4.3. Поиск и включение для деревьев 258 4.4.4. Исключение из деревьев 267 4.4.5. Анализ поиска по дереву с включениями 269

4.5. Сбалансированные деревья 272 4.5.1. Включение в сбалансированное дерево 275 4.5.2. Исключение из сбалансированного дерева 281

4.6. Деревья оптимального поиска 286 4.7. Б-деревья 300

4.7.1. Сильно ветвящиеся Б-деревья 303 4.7.2. Двоичные Б-деревья 316

4.8. Деревья приоритетного пояска 325 Упражнения 331 5. Преобразования ключей (расстановка) 336 5.1. Введение 336 5.2. Выбор функции преобразования 337

5.3. Разрешение конфликтов 339 5.4. Анализ метода преобразования ключей 345 Упражнения 349 Приложения 351 1. Множество символов ASCII 351 2. Синтаксис Модулы-2 352 Предметный указатель 357

Предметный указатель Адрес 46 Активный вход 145 Алгоритм ветвей и границ 210 Алфавитный частотный словарь 229 Балансировка страниц 310 Б-дерево 304 - симметричное двоичное (СДБ-

дерево) 320 Блок 58 Буфер 53 Буферизация 58 Быстрая сортировка 115 Вариант записи 41 Вариантная часть 42 Вес дерева 289 Включение в список 226 Внешняя сортировка 91 Внутренняя вершина 248 - сортировка 91 Возврат 190 Выравнивание 47 Вырожденное дерево 247 Высота дерева 248 Глубина дерева 248 Горизонтальное распределение 154 ДБ-дерево 317 Двоичное (бинарное) дерево 249 Двухфазная сортировка 128 Декартово дерево 326 - произведение 37 Дерево 247 - поиска 256 - - приоритетного 326 - с приоритетом 326 Деревья Фибоначчи 274

Динамическая структура памяти 213 Динамическое распределение памяти

217 Дискриминант типа 41 Длина последовательности 51 - пути 248 - - взвешенная 286 - - - общая 288 - - внешнего 248 - - внутреннего 248 Естественное слияние 134 Запись 38 Идеально сбалансированное дерево

252 Идентификатор поля 39 Извлечение 60 Инфиксная запись 256 Исключение из дерева 267 - - списка 227 Квадратичные пробы 341 Ключ 92 Конфликт 337 Корневое дерево поиска с

приоритетом 328 Косвенная рекурсия 172 Коэффициент заполнения 347 Кривая Гильберта 178 Кривая Серпинского 182 Линейные пробы 340 Линейный поиск 68 Лист 248 Максимальная серия 134 Матрица 35 Медиана 121

Метод сортировки с двойным включением 97

- - прямым выбором 99 Мешающее ожидание 61 Многофазная сортировка 148 Множество 44 - единичное (синглетон) 43 Множество-степень 44 Монитор 62 Область переполнения 339 Объединение множеств 45 Однофазная сортировка 128 Оператор варианта 43 - присоединения 40 Определяющий модуль 55 Оптимальное дерево 288 - решение 205 Откат 190 Открытая адресация 339 Переменная с индексами 34 Пересечение множеств 45 Пирамида 326 Повторная расстановка 349 Поддерево 247 Позиция 54 Поиск в списке 228 - - таблице 72 - - упорядоченном списке 231 - делением пополам 70 - по дереву с включением 259 - строки 74 Поле 38 - признака 41 Последовательность 51 Последовательный доступ 52 - файл 53 Постфиксная запись 256 Потомок 247 Потребитель 59 Правило стабильных браков 197 Предок 248 Предтрансляция образа 79 Преобразование ключей 336 Префиксная запись 256

Производитель 59 Простое слияние 127 Проход 128 - по списку 228 Процедура-функция 175 Прямая рекурсия 172 Прямое связывание 339 Прямой поиск строки 75 Прямые методы сортировки 94 Пузырьковая сортировка 102 Пустые серии 152 Разделение страницы 305 Размер блока 58 Размещение 60 Разрешение конфликта 337 Расстановка 338 Рекурсивность 214 Рекурсивный объект 171 Сбалансированное дерево 273 - - поиска с приоритетом 327 Связанность типов 219 Серия 134 Сигнал 61 Сильно ветвящиеся деревья 250, 300 Слияние 127 - страниц 310 Слово 46 Смещение 49 Сопрограмма 164 Сортировка массивов 91 - файлов 91 Состояние последовательности 55 Статические переменные 213 Степень вершины 248 Строка (серия) 134 Строковый тип 72 Терминальная вершина 248 Топологическая сортировка 237 Трансформация представления 64 Трехленточное слияние 128 Упаковка 48 Упорядоченное дерево 247 Уровень строки 153 Устойчивость метода сортировки 93

Фаза 128 - ввода 240 Форматирование 64 Формирование списка 225 Характеристическая функция 50 Ход коня (задача) 186 Цена дерева поиска 288

Центроид 296 Циклический буфер 59 Числа Фибоначчи 151 - - порядка р 152 Шейкерная сортировка 103 Этап 128 N-путевое слияние 142