- •Глава 1. Основные понятия 14
- •Глава 2. Списки 30
- •Глава 3. Стеки и очереди 59
- •Глава 4. Массивы 74
- •Глава 5. Рекурсия 86
- •Глава 6. Деревья 121
- •Глава 7. Сбалансированные деревья 153
- •Глава 8. Деревья решений 180
- •Глава 9. Сортировка 213
- •Введение
- •Целевая аудитория
- •Глава 1. Основные понятия
- •Что такое алгоритмы?
- •Анализ скорости выполнения алгоритмов
- •Пространство — время
- •Оценка с точностью до порядка
- •Поиск сложных частей алгоритма
- •Сложность рекурсивных алгоритмов
- •Многократная рекурсия
- •Косвенная рекурсия
- •Требования рекурсивных алгоритмов к объему памяти
- •Наихудший и усредненный случай
- •Часто встречающиеся функции оценки порядка сложности
- •Логарифмы
- •Реальные условия — насколько быстро?
- •Обращение к файлу подкачки
- •Псевдоуказатели, ссылки на объекты и коллекции
- •Коллекции
- •Вопросы производительности
- •Глава 2. Списки
- •Знакомство со списками
- •Простые списки
- •Коллекции
- •Список переменного размера
- •Класс SimpleList
- •Неупорядоченные списки
- •Связные списки
- •Добавление элементов к связному списку
- •Удаление элементов из связного списка
- •Уничтожение связного списка
- •Сигнальные метки
- •Инкапсуляция связных списков
- •Доступ к ячейкам
- •Разновидности связных списков
- •Циклические связные списки
- •Проблема циклических ссылок
- •Двусвязные списки
- •Другие связные структуры
- •Псевдоуказатели
- •Глава 3. Стеки и очереди
- •Множественные стеки
- •Очереди
- •Циклические очереди
- •Очереди на основе связных списков
- •Применение коллекций в качестве очередей
- •Приоритетные очереди
- •Многопоточные очереди
- •Модель очереди
- •Глава 4. Массивы
- •Треугольные массивы
- •Диагональные элементы
- •Нерегулярные массивы
- •Прямая звезда
- •Нерегулярные связные списки
- •Разреженные массивы
- •Индексирование массива
- •Очень разреженные массивы
- •Глава 5. Рекурсия
- •Что такое рекурсия?
- •Рекурсивное вычисление факториалов
- •Анализ времени выполнения программы
- •Рекурсивное вычисление наибольшего общего делителя
- •Анализ времени выполнения программы
- •Рекурсивное вычисление чисел Фибоначчи
- •Анализ времени выполнения программы
- •Рекурсивное построение кривых Гильберта
- •Анализ времени выполнения программы
- •Рекурсивное построение кривых Серпинского
- •Анализ времени выполнения программы
- •Опасности рекурсии
- •Бесконечная рекурсия
- •Потери памяти
- •Необоснованное применение рекурсии
- •Когда нужно использовать рекурсию
- •Хвостовая рекурсия
- •Нерекурсивное вычисление чисел Фибоначчи
- •Устранение рекурсии в общем случае
- •Нерекурсивное построение кривых Гильберта
- •Нерекурсивное построение кривых Серпинского
- •Глава 6. Деревья
- •Определения
- •Представления деревьев
- •Полные узлы
- •Списки потомков
- •Представление нумерацией связей
- •Полные деревья
- •Обход дерева
- •Упорядоченные деревья
- •Добавление элементов
- •Удаление элементов
- •Обход упорядоченных деревьев
- •Деревья со ссылками
- •Работа с деревьями со ссылками
- •Квадродеревья
- •Изменение max_per_node
- •Использование псевдоуказателей в квадродеревьях
- •Восьмеричные деревья
- •Глава 7. Сбалансированные деревья
- •Сбалансированность дерева
- •Авл‑деревья
- •Вращения авл‑деревьев
- •Правое вращение
- •Левое вращение
- •Вращение влево‑вправо
- •Вращение вправо‑влево
- •Вставка узлов на языке Visual Basic
- •Удаление узла из авл‑дерева
- •Левое вращение
- •Вращение вправо‑влево
- •Другие вращения
- •Реализация удаления узлов на языке Visual Basic
- •Б‑деревья
- •Производительность б‑деревьев
- •Вставка элементов в б‑дерево
- •Удаление элементов из б‑дерева
- •Разновидности б‑деревьев
- •Нисходящие б‑деревья
- •Улучшение производительности б‑деревьев
- •Балансировка для устранения разбиения блоков
- •Добавление свободного пространства
- •Вопросы, связанные с обращением к диску
- •Псевдоуказатели
- •Выбор размера блока
- •Кэширование узлов
- •Глава 8. Деревья решений
- •Поиск в деревьях игры
- •Минимаксный поиск
- •Улучшение поиска в дереве игры
- •Предварительное вычисление начальных ходов
- •Определение важных позиций
- •Эвристики
- •Поиск в других деревьях решений
- •Метод ветвей и границ
- •Эвристики
- •Восхождение на холм
- •Метод наименьшей стоимости
- •Сбалансированная прибыль
- •Случайный поиск
- •Последовательное приближение
- •Момент остановки
- •Локальные оптимумы
- •Алгоритм «отжига»
- •Сравнение эвристик
- •Другие сложные задачи
- •Задача о выполнимости
- •Задача о разбиении
- •Задача поиска Гамильтонова пути
- •Задача коммивояжера
- •Задача о пожарных депо
- •Краткая характеристика сложных задач
- •Глава 9. Сортировка
- •Общие соображения
- •Объединение и сжатие ключей
- •Примеры программ
- •Сортировка выбором
- •Рандомизация
- •Сортировка вставкой
- •Вставка в связных списках
- •Пузырьковая сортировка
- •Быстрая сортировка
- •Сортировка слиянием
- •Пирамидальная сортировка
- •Пирамиды
- •Приоритетные очереди
- •Анализ пирамид
- •Алгоритм пирамидальной сортировки
- •Сортировка подсчетом
- •Блочная сортировка
- •Блочная сортировка с применением связного списка
- •Блочная сортировка на основе массива
- •Глава 10. Поиск
- •Примеры программ
- •Поиск методом полного перебора
- •Поиск в упорядоченных списках
- •Поиск в связных списках
- •Двоичный поиск
- •Интерполяционный поиск
- •Строковые данные
- •Следящий поиск
- •Интерполяционный следящий поиск
- •Глава 11. Хеширование
- •Связывание
- •Преимущества и недостатки связывания
- •Хранение хеш‑таблиц на диске
- •Связывание блоков
- •Удаление элементов
- •Преимущества и недостатки применения блоков
- •Открытая адресация
- •Линейная проверка
- •Первичная кластеризация
- •Упорядоченная линейная проверка
- •Квадратичная проверка
- •Псевдослучайная проверка
- •Удаление элементов
- •Рехеширование
- •Изменение размера хеш‑таблиц
- •Глава 12. Сетевые алгоритмы
- •Определения
- •Представления сети
- •Оперирование узлами и связями
- •Обходы сети
- •Наименьшие остовные деревья
- •Кратчайший маршрут
- •Установка меток
- •Варианты метода установки меток
- •Коррекция меток
- •Варианты метода коррекции меток
- •Другие задачи поиска кратчайшего маршрута
- •Двухточечный кратчайший маршрут
- •Вычисление кратчайшего маршрута для всех пар
- •Штрафы за повороты
- •Небольшое число штрафов за повороты
- •Большое число штрафов за повороты
- •Применения метода поиска кратчайшего маршрута
- •Разбиение на районы
- •Составление плана работ с использованием метода критического пути
- •Планирование коллективной работы
- •Максимальный поток
- •Приложения максимального потока
- •Непересекающиеся пути
- •Распределение работы
- •Глава 13. Объектно‑ориентированные методы
- •Преимущества ооп
- •Инкапсуляция
- •Обеспечение инкапсуляции
- •Полиморфизм
- •Зарезервированное слово Implements
- •Наследование и повторное использование
- •Парадигмы ооп
- •Управляющие объекты
- •Контролирующий объект
- •Итератор
- •Дружественный класс
- •Интерфейс
- •Порождающий объект
- •Единственный объект
- •Преобразование в последовательную форму
- •Парадигма Модель/Вид/Контроллер.
- •Контроллеры
- •Виды/Контроллеры
- •Требования к аппаратному обеспечению
- •Выполнение программ примеров
Требования к аппаратному обеспечению
Для запуска и изменения примеров приложений вам понадобится компьютер, который удовлетворяет требованиям Visual Basic к аппаратному обеспечению.
Алгоритм выполняются с различной скоростью на компьютерах разных конфигураций. Компьютер с процессором Pentium Pro и 64 Мбайт памяти будет быстрее компьютера с 386 процессором и 4 Мбайт памяти. Вы быстро узнаете ограничения вашего оборудования.
Выполнение программ примеров
Один из наиболее полезных способов выполнения программ примеров — запускать их при помощи встроенных средств отладки Visual Basic. Используя точки останова, просмотр значений переменных и другие свойства отладчика, вы можете наблюдать алгоритмы в действии. Это может быть особенно полезно для понимания наиболее сложных алгоритмов, таких как алгоритмы работы со сбалансированными деревьями и сетевые алгоритмы, представленные в 7 и 12 главах соответственно.
Некоторые и программ примеров создают файлы данных или временные файлы. Эти программы помещают такие файлы в соответствующие директории. Например, некоторые из программ сортировки, представленные в 9 главе, создают файлы данных в директории Src\Ch9/. Все эти файлы имеют расширение “.DAT”, поэтому вы можете найти и удалить их в случае необходимости.
Программы примеров предназначены только для демонстрационных целей, чтобы помочь вам понять определенные концепции алгоритмов, и в них не почти не реализована обработка ошибок или проверка данных. Если вы введете неправильное решение, программа может аварийно завершить работу. Если вы не знаете, какие данные допустимы, воспользуйтесь для получения инструкций меню Help (Помощь) программы.
========374
A
addressing
indirect 42
open 278
adjacency matrix 75
aggregate object 337
ancestor 122
array
triangular 75
augmenting path 320
B
B+Tree 11
balanced profit 196
base case 88
best case 23
binary hunt and search 260
binary search 254
branch 122
branchandbound technique 180
bubblesort 224
bucketsort 243
C
cells 40
child 122
circular referencing problem 50
collision resolution policy 265
command 336
complexity theory 14
controller 345
countingsort 242
critical path 317
cycle 293
D
data abstraction 329
decision tree 180
delegation 334
descendant 122
E
edge 293
encapsulation 328
exhaustive search 180, 250
expected case 23
F
facade 341
factorial 87
factory 341
fake pointer 27, 56
fat node 11, 123
Fibonacci numbers 92
firehouse problem 211
FirstInFirstOut 63
forward star 11, 79, 126
friend class 339
functors 336
G
game tree 180
garbage collection 37
garbage value 37
generic 331
graph 121, 293
greatest common divisor 90
greedy algorithms 300
H
Hamiltonian path 210
hashing 264
heap 235
heapsort 235
heuristic 180
Hilbert curves 94
hillclimbing 193
I
implements 332
incremental improvements 199
inheritance 334
insertionsort 222
interface 340
interpolation search 255
interpolative hunt and search 262
K
knapsack problem 188
L
label correcting 303
label setting 303
LastInFirstOut list 60
leastcost 195
linear probing 278
link 293
list
circular 49
doubly linked 50
linked 31
threaded 53
unordered 31, 36
M
mergesort 233
minimal spanning tree 299
minimax 182
model 345
Model/View/Controller 345
Monte Carlo search 197
N
network 293
capacitated 319
capacity 319
connected 293
directed 293
flow 319
residual 320
node 122, 293
degree 122
internal 122
sibling 122
O
octtree 152
optimum
global 203
local 203
P
page file 26
parent 122
partition problem 209
path 293
pointers 27
pointtopoint shortest path 312
polymorphism 328, 331
primary clustering 280
priority queue 238
probe sequence 265
pruning 187
pseudorandom probing). 287
Q
quadratic probing 285
quadtree 122, 145
queue 63
circular 65
multi-headed 72
priority 70
quicksort 228
R
random search 197
recursion
direct 86
indirect 87
multiple 21
tail recursion 105
recursive procedure 20
redundancy 325
reference counter 28
rehashing 290
relatively prime 90
residual capacity 320
reuse 328, 334
S
satisfiability problem 208
secondary clustering 286
selectionsort 219
sentinel 45
serialization 342
shortest path 302
Sierpinski curves 98
simulated annealing 204
singleton object 341
sink 319
source 319
spanning tree 298
stack 60
subtree 122
T
tail recursion removal 106
thrashing 26
thread 53
traveling salesman problem 211
traversal
breadth-first 131
depth-first 131
inorder 130
postorder 130
preorder 130
tree 122
AVL tree 154
B-tree 166
B+tree 170
binary 123
bottom-up B-trees 170
complete 129
depth 123
left rotation 156
left-right rotation 157
right rotation 156
right-left rotation 157
symmetrically threaded 141
ternary 123
threaded 122
top-down B-tree 170
traversing 130
tries 122
turn penalties 314
U
unsorting 221
V
view 345
virtual memory 26
visitor object 337
W
work assignment 327
worst case 23
Дружественный класс 339
А
Абстракция данных 329
Адресация
косвенная 42
открытая 278
Алгоритм
поглощающий 300
Г
Гамильтонов путь 210
Граф 121, 293
Д
Делегирование 334
Деревья 122
АВЛ-деревья 154
Б-деревья 166
Б+деревья 11, 170, 171
ветвь 122
внутренний узел 122
восьмеричные 152
вращения 155
двоичные 123
дочерний узел 122
игры 180
квадродеревья 145
корень 122
лист 122
нисходящие Б-деревья 170
обратный обход 130
обход 130
обход в глубину 131
обход в ширину 131
поддерево 122
полные 129
порядок 122
потомок 122
предок 122
представление нумерацией связей 11, 126
прямой обход 130
решений 180
родитель 122
с полными узлами 11
с симметричными ссылками 141
симметричный обход 130
троичные 123
узел 122
упорядоченные 135
З
Задача
коммивояжера 211
о выполнимости 208
о пожарных депо 211
о разбиении 209
поиска Гамильтонова пути 210
распределения работы 327
формирования портфеля 188
Значение
\ 37
И
Инкапсуляция 328
К
Ключи
объединение 216
сжатие 216
Коллекция 31
Кратчайший маршрут
двухточечный 312
дерево кратчайшего маршрута 302
для всех пар 312, 313
коррекция меток 303, 308
со штрафами за повороты 312, 314
установка меток 303, 304
Кривые
Гильберта 94
Серпинского 98
М
Массив
нерегулярный 78
представление в виде прямой звезды 79
разреженный 80
треугольный 75
Матрица смежности 75
Метод
ветвей и границ 180, 187
восхождения на холм 193
минимаксный 182
Монте-Карло 197
наименьшей стоимости 195
отжига 204
полного перебора 180
последовательных приближений 199
сбалансированной прибыли 196
случайного поиска 197
эвристический 180
Модель/Вид/Контроллер 345
Н
Наибольший общий делитель 90
Наследование 334
О
Объект
вид 345
единственный 341
интерфейс 340
итератор 338
контролирующий 337
контроллер 345
модель 345
порождающий 341
преобразование в последовательную форму 342
составной 337
управляющий 336
фасад 341
Ограничение 334
Оптимум
глобальный 203
локальный 203
Очередь 63
многопоточная 72
приоритетная 70, 238
циклическая 65
П
Память
виртуальная 26
пробуксовка 26
чистка 37
Пирамида 235
Повторное использование 334
Поиск
двоичный 254
интерполяционный 255
методом полного перебора 250
следящий 260
Полиморфизм 331
Потоки 53
Проблема циклических ссылок 50
Процедура
очистки памяти 38
рекурсивная 20
Псевдоуказатели 27, 56
Р
Разрешение конфликтов 265
Рекурсия
восходящая 154
косвенная 21, 87
многократная 21
прямая 86
условие остановки 88
хвостовая 105
С
Сеть 293
избыточность 325
источник 319
кратчайший маршрут 302
критический путь 317
нагруженная 319
наименьшее остовное дерево 299
ориентированная 293
остаточная 320
остаточная пропускная способность 320
остовное дерево 297
поток 319
пропускная способность 319
простой путь 293
путь 293
расширяющий путь 320
ребро 293
связная 293
связь 293
сток 319
узел 293
цена связи 293
цикл 293
Сигнальная метка 45
Системный стек 22
Случай
наилучший 23
наихудший 23
ожидаемый 23
Сортировка
блочная 243
быстрая 228
вставкой 222
выбором 219
пирамидальная 235
подсчетом 242
пузырьковая 224
рандомизация 221
слиянием 233
Список
двусвязный 50
многопоточный 53
неупорядоченный 31, 36
первый вошел-первый вышел 63
первый вошел-последний вышел 60
связный 31
циклический 49
Стек 60
Странный аттрактор 150
Счетчик ссылок 28
Т
Теория
сложности алгоритмов 14
хаоса 151
Тестовая последовательность
вторичная кластеризация 286
квадратичная проверка 284
линейная проверка 278
первичная кластеризация 280
псевдослучайная проверка 287
У
Указатели 27, 31
Ф
Файл подкачки 26
Факториал 87
Х
Хеширование 264
блоки 269
открытая адресация 278
разрешение конфликтов 265
рехеширование 290
связывание 266
тестовая последовательность 265
хеш-таблица 264
Ч
Числа
взаимно простые 90
Фибоначчи 92
Я
Ячейка 40