Как доказать, что заданный алгоритм делает то, что он должен делать?
Ключевые идеи индукции и инвариантности
Стандартные методы проектирования: жадные алгоритмы, динамическое программирование и парадигма «разделяй и властвуй»
Математическая основа алгоритмов
Расширенные алгоритмы
Задания с предельными сроками
Онлайновые алгоритмы
Шифрование с публичным ключом
Решение оптимизационных задач
Задача данной книги проста: разобрать «идеи», лежащие в основе программ, и показать, как доказывать их правильность.
Как математически доказать, что заданный алгоритм делает то, что он должен делать? И почему это так важно?
Доказывается правильность классических алгоритмов: целочисленного деления, алгоритм Евклида, ранжирования, др. Помимо традиционных алгоритмов, таких как жадные алгоритмы, алгоритмы динамического программирования и алгоритмы «разделяй и властвуй», книга исследует также рандомизированные и онлайновые алгоритмы. Первые стали повсеместными из-за появления криптографии, а вторые необходимы во многих областях, начиная с операционных систем и заканчивая фондовым рынком.
Книга усеяна задачами. Большинство задач теоретические, но многие требуют реализации алгоритма; для таких задач используется язык программирования Python 3. Несмотря на свою краткость, издание является математически строгим. Желательно предварительное знакомство с дискретной математикой.
Издание предназначено для студентов вузов, специалистов в области информатики и математики, а также широкого круга программистов и разработчиков.