М.: ДМК Пресс, 2011. — 320 с.
Введение.
Парадигма структурного программирования.
Зачем нужны общие принципы?
Нисходящее проектирование.
Три базовых элемента структурного программирования.
Пример разработки.
Вычислительные алгоритмы.
Моделирование непрерывных процессов дискретными.
Метод половинного деления. Общая задача поиска величины.
Метод касательных.
Метод хорд.
Метод итераций (последовательных приближений).
Обобщение метода половинного деления.
Метод наименьших квадратов.
Задача вычисления площадей криволинейных фигур.
Метод Симпсона.
Метод Монте-Карло.
Числовые алгоритмы.
Алгоритм Евклида.
Алгоритмы факторизации и поиска простых.
Выделение полного квадрата (алгоритм Ферма).
Квадратичное решето.
Алгоритм Полларда.
Алгоритмы поиска простых чисел.
Решето Аткина.
Решето Сундарама.
Тесты простоты.
Числа Мерсенна.
Тест Люка-Лемера.
Числа Ферма.
Тест Пепина.
Псевдослучайные числа.
Критерии правильности случайных чисел.
Критерий, основанный на квадратичном отклонении.
Линейный конгруэнтный метод.
Методы перемешивания.
Арифметика.
Представление числа в позиционной системе счисления.
Проблемы технической реализации арифметики.
Двоичный сумматор.
Ускорение операции сложения.
Представление чисел в форме с фиксированной и плавающей десятичной точкой.
Реализация арифметики на уровне алгоритмического языка.
Сложение двух чисел.
Вычитание из большего меньшего.
Умножение.
Деление.
Некоторые другие алгоритмы.
Алгоритм быстрого возведения в степень.
Быстрый перевод из десятичной в двоичную систему счисления.
Решение диофантовых уравнений.
Двоичная арифметика.
Сложение двоичных чисел.
Как преобразовать в двоичное число дробную часть.
Вычитание двоичных чисел.
Умножение в двоичной системе счисления.
Деление в двоичной системе счисления.
Рекурсия и динамическое программирование.
Общее определение.
Задача о ханойской башне.
Переход от рекурсивного к нерекурсивному решению.
Рекурсия как метод поиска.
Динамическое программирование.
Задача обхода конем шахматной доски.
Факторизация числа.
Сортировки.
Общая постановка задачи.
Обменные сортировки. Сортировка пузырьком.
Шейкерная сортировка.
Анализ качеств алгоритма.
Сортировка выбором.
Сортировка вставками.
Сортировка Шелла.
Быстрая сортировка.
Двоичная сортировка.
Сортировка слияниями.
Комбинаторные задачи.
Общая постановка задачи.
Оптимизация перебора.
Связь комбинаторики с алгоритмами на графах.
Основные комбинаторные задачи.
Задача получения перестановок на множестве из N элементов.
Построение сочетаний без повторений на множестве элементов.
Сочетания с повторениями.
Задача получения размещений.
Динамические структуры данных.
Понятие о динамической величине.
Линейный связный список.
Зачем рекурсивные структуры нужны?
Использование рекурсивных определений для создания деревьев данных.
Алгоритмы принятия решений.
Постановка задачи. Понятие эвристического алгоритма.
Оценочная функция.
Метод минимакса.
Альфа-бета алгоритм.
Алгоритмы на графах.
Стратегии обхода.
Обход графа в ширину.
Обход графа в глубину.
Построение основного дерева.
Алгоритм Прима.
Алгоритм Краскала.
Алгоритм поиска компонент связности.
Волновой алгоритм.
Алгоритм Дейкстры.
Алгоритм Флойда.
Нахождение максимального потока.
Приложения.
Приложение 1. Элементы комбинаторики.
Приложение 2. Теория графов.
Приложение 3. Элементы теории вероятности.
Приложение 4. Синтаксис языка Компонентный Паскаль.
Список литературы.