Книга Алгоритмы: построение и анализ удачно объединяет в себе полноту охвата и строгость изложения материала. Много книг, посвященных алгоритмам, отличается строгостью изложения материала, но страдает определенной неполнотой; другие книги охватывают огромный объем материала, но недостаточно строго излагают его. В книге Алгоритмы: построение и анализ описаны самые разнообразные алгоритмы, сочетается широкий диапазон тем с глубиной и полнотой изложения; при этом изложение доступно для читателей самого разного уровня подготовки. Каждая глава книги относительно самодостаточна и может использоваться в качестве отдельной темы для изучения. Алгоритмы в книге Алгоритмы: построение и анализ описаны простым человеческим языком и с применением псевдокода, который понятен любому, кто хоть в небольшой степени знаком с программированием, а пояснения принципов их работы даны без излишней математической строгости и требуют лишь элементарных знаний.
Первое издание книги Алгоритмы: построение и анализ давно стало стандартным справочным руководством для профессионалов и учебным пособием для университетов. Второе издание было дополнено новыми главами, раскрывающими такие темы, как вероятностный анализ и рандомизированные алгоритмы, линейное программирование. Третье издание также существенно дополнено и пересмотрено. В него вошли две совершенно новые главы, посвященные деревьям ван Эмде Боаса и многопоточным алгоритмам, а глава, посвященная рекуррентности, существенно расширена.
В новом издании изменена подача такого материала, как динамическое программирование и жадные алгоритмы, и введено новое понятие потока, основанного на ребрах, в материале о транспортных сетях. В третье издание книги Алгоритмы: построение и анализ также было добавлено множество новых упражнений и задач.
Фундаментальный труд Алгоритмы: построение и анализ известных специалистов в области информатики достоин занять место на полке любого человека, чья деятельность так или иначе связана с вычислительной техникой и алгоритмами:
- для профессионала эта книга может служить настольным справочником,
- для преподавателя - пособием для подготовки к лекциям и источником интересных нетривиальных задач,
- для студентов и аспирантов - отличным учебником.
Каждый может найти в ней именно тот материал, который касается интересующей его темы и представлен именно с тем уровнем сложности и строгости, который требуется читателю.
Описание алгоритмов на естественном языке дополняется псевдокодом, который позволяет любому имеющему хотя бы начальные знания и опыт программирования, реализовать алгоритм на используемом им языке программирования. Строгий математический анализ и обилие теорем сопровождаются большим количеством иллюстраций, элементарными рассуждениями и простыми приближенными оценками. Широта охвата материала и степень строгости его изложения дают основания считать эту книгу одной из лучших книг, посвященных разработке и анализу алгоритмов.
Третье издание этого классического труда в большой степени доработано. В нем появились новые главы, в том числе посвященные такой важной в последнее время теме, как многопоточные алгоритмы, а старые подверглись переработке, местами весьма существенной, когда уже имевшийся во втором издании материал излагается с иных позиций, чем ранее.
Данная книга будет не лишней как на столе студента и аспиранта, так и на рабочей полке практикующего программиста.
Об авторах
Томас Кормен - профессор информатики в колледже Дартмута и бывший директор Института литературы и риторики Дартмутского колледжа. Чарльз Лейзерсон - профессор информатики и электротехники в Массачуссетском технологическом институте, где также работает и профессор Рональд Ривест. Клиффорд Штайн - профессор организации производства и исследования операций в Колумбийском университете.
Отзывы о книге:
"В свете взрывного роста количества данных и распространения вычислительных приложений эффективные алгоритмы востребованы в еще большей степени, чем ранее. Эта прекрасно написанная, тщательно продуманная и организованная книга является отличным введением в разработку и анализ алгоритмов. Первая ее половина представляет собой эффективный учебник теории алгоритмов, а вторая в большей степени предназначена для научных работников и любознательных студентов, которые хотели бы получить дополнительные знания об этой интересной науке."
Шан-Хуа Тенг, Университет Южной Каролины
"Это настоящая библия в указанной области, исчерпывающий учебник, охватывающий весь спектр современных алгоритмов: от быстрых алгоритмов и структур данных до алгоритмов с полиномиальным временем работы для решения очень сложных задач, от классических алгоритмов теории графов до специализированных алгоритмов поиска подстрок, вычислительной геометрии и теории чисел. Нельзя не упомянуть появившиеся в третьем издании деревья ван Эмде Боаса и многопоточные алгоритмы, важность которых постоянно увеличивается."
Дэниел Шпильман, факультет информатики Йельского университета
"Как преподаватель и исследователь в области алгоритмов с более чем двадцатилетним стажем, могу с уверенностью утверждать, что книга Кормена - лучший из встречавшихся мне учебников. Это умный, энциклопедичный и современный подход к изучению алгоритмов; наш факультет продолжит использовать эту книгу как в качестве учебника для студентов и аспирантов, так и в качестве рекомендуемого справочного пособия."
Габриэль Робинс, факультет информатики Университета Вирджинии
Оглавление
Предисловие 14 Часть I. Основы 23 Глава 1. Роль алгоритмов в вычислениях 26 Глава 2. Приступаем к изучению 38 Глава 3. Рост функций 67 Глава 4. Разделяй и властвуй 90 Глава 5. Вероятностный анализ и рандомизированные алгоритмы 140 Часть II. Сортировка и порядковая статистика 173 Глава 6. Пирамидальная сортировка 179 Глава 7. Быстрая сортировка 198 Глава 8. Сортировка за линейное время 220 Глава 9. Медианы и порядковые статистики 243 Часть III. Структуры данных 259 Глава 10. Элементарные структуры данных 264 Глава 11. Хеширование и хеш-таблицы 285 Глава 12. Бинарные деревья поиска 319 Глава 13. Красно-черные деревья 341 Глава 14. Расширение структур данных 372 Часть IV. Усовершенствованные методы разработки и анализа 389 Глава 15. Динамическое программирование 392 Глава 16. Жадные алгоритмы 448 Глава 17. Амортизационный анализ 487 Часть V. Сложные структуры данных 517 Глава 18. B-деревья 521 Глава 19. Фибоначчиевы пирамиды 542 Глава 20. Деревья ван Эмде Боаса 568 Глава 21. Структуры данных для непересекающихся множеств 597 Часть VI. Алгоритмы для работы с графами 623 Глава 22. Элементарные алгоритмы для работы с графами 626 Глава 23. Минимальные остовные деревья 661 Глава 24. Кратчайшие пути из одной вершины 680 Глава 25. Кратчайшие пути между всеми парами вершин 722 Глава 26. Задача о максимальном потоке 747 Часть VII. Избранные темы 807 Глава 27. Многопоточные алгоритмы 811 Глава 28. Работа с матрицами 852 Глава 29. Линейное программирование 883 Глава 30. Полиномы и быстрое преобразование Фурье 940 Глава 31. Теоретико-числовые алгоритмы 968 Глава 32. Поиск подстрок 1031 Глава 33. Вычислительная геометрия 1060 Глава 34. NP-полнота 1096 Глава 35. Приближенные алгоритмы 1157 Часть VIII. Приложения: математические основы 1195 Приложение А. Суммы и ряды 1198 Приложение Б. Множества и прочие художества 1210 Приложение В. Комбинаторика и теория вероятности 1235 Приложение Г. Матрицы 1269 Литература 1282 Предметный указатель 1299