Структуры данных и алгоритмы
Архив
Структуры данных и алгоритмы
Альфред В. Ахо, Джон Э. Хопкрофт, Джеффри Д. Ульман
М.: Издательский дом «Вильямс», 2000. - 384 с. ISBN 5-8459-0122-7 (рус.)
В основу книги легли первые шесть глав труда тех же авторов «The Design and Analysis of Computer Algorithms» (1974) (в русском переводе «Построение и анализ вычислительных алгоритмов». - М.: «Мир», 1979.), переработанные и дополненные материалом об алгоритмах внешнего хранения и управления памятью («Data structures and algorithms»). Хотя издательство «Вильямс» скромно умолчало о годе написания материала, но покопавшись в других книгах я его нашел - 1984. И авторы, и издания в представлении и рекомендациях не нуждаются, ссылки на них стоят почти в любой книге о программировании. Это классика (наряду с вышедшей в том же издательстве знаменитой трилогией Дональда Кнута), а потому на этом можно было бы и закончить. Но я посмотрел на годы издания, и пришла мысль: а ведь программисты, набиравшиеся мастерства на этих книгах, обзавелись уже приличными лысинами, и появилось уже новое поколение, наслышанное об объектно-ориентированном подходе, которое, прочитав название и увидев, что основной язык примеров этой книги - Pascal, наверняка спросит: «Ну и что?».
Дело в том, что формула Никлауса Вирта «алгоритмы + структуры данных = программы» (книга с тем же названием, кстати, вышла аж в 1976 году) вовсе не потеряла актуальности. Ведь объектно-ориентированное программирование - всего лишь стратегия реализации программ. И если при процедурном подходе данные и процедуры лежат россыпью, то в ООП классы наводят порядок и инкапсулируют (прячут) их, трансформируя в свойства (атрибуты) и методы. А понимание основ, правильный выбор и оценка алгоритмов вовсе не стали менее важными («В этом отражается наша надежда на то, что программисты осознают, что при решении задач прогрессирующе больших размеров особое значение имеет временная сложность выбранного алгоритма, а не возможности новых поколений вычислительных средств»). Начав с задачи, построения модели, авторы переходят к понятию абстрактных типов данных, а затем рассматривают, как строятся алгоритмы в зависимости от выбранных для реализации этих абстрактных типов структур данных (списков, стеков, очередей, отображений, деревьев, графов, множеств). Главы «Методы анализа алгоритмов», «Методы разработки алгоритмов», «Структуры данных и алгоритмы для внешней памяти» и «Управление памятью» не менее актуальны и в наше время.
Чем же ценна книга Ахо, Хопкрофта и Ульмана? Эта классический прекрасно написанный (и при том достаточно компактный) труд, позволяющий получить общий взгляд на алгоритмы и структуры данных, увидеть, как изменились подходы к программированию с момента выхода оригинала, подготовить к чтению других книг - например, «Структуры данных с C++» Уильяма Топпа и Уильяма Форда (М. «Бином», 2000). Безусловно, издательство «Вильямс» делает доброе дело, выпуская классику, чтобы мы не стали «Иванами, не помнящими родства».
[i37643]