Привет!
Мы (ali_aliev и avenat) с удовольствием представляем вашему вниманию перевод интерактивного учебника «Problem Solving with Algorithms and Data Structures» от Брэда Миллера (Brad Miller) и Дэвида Ранума (David Ranum) из Luther College, что в Айове, США.
О чём?
В учебнике подробно рассматриваются, объясняются и анализируются наиболее часто используемые структуры данных и алгоритмы. Изложение идёт от простого (что такое алгоритм, как оценить его производительность) к сложному (деревья, графы) с живыми примерами и кодом. В качестве языка программирования выбран Python, а для тех, кто с ним плохо знаком, в первой главе есть большой раздел с его концентрированным описанием.
Авторы рассказывают о таких структурах данных, как стеки, очереди (в том числе с приоритетом), деки, хэш-таблицы, списки, деревья и графы. Последним двум вообще посвящены весьма не маленькие главы. Изложение не просто описательное: для каждой структуры предлагается вариант (а иногда и не один) её реализации на Python. Упор, естественно, делается на объектно-ориентированное программирование: создаётся класс, к нему пишутся методы, некоторые из которых авторы оставляют читателям для самостоятельной доработки. Затем идут примеры использования рассмотренной структуры и описание алгоритмов с её участием.
Одна из глав учебника посвящена рекурсии, в том числе её графическому представлению (фракталы). Разбирается несколько известных рекурсивных задач, а в конце наглядно демонстрируется, что эта методика, несмотря на её элегантность, отнюдь не «серебряная пуля».
Не обделены вниманием и классические алгоритмы для сортировки и поиска. И, естественно, для каждого из них анализируются производительность и «подводные камни», а так же даются рекомендации по применению. В последних главах, посвящённых деревьям и графам, даётся много материала об их разновидностях и связанных с ними алгоритмах. Изложение тут становится более сжатым, многие моменты просто описываются с тем, чтобы после прочтения главы читатель реализовал их самостоятельно.
Для кого?
Учебник предназначен в первую очередь для старшеклассников и студентов, а также «плавающих» в теории программистов-практиков. Кода много, и чем ближе к последним главам, тем меньше он разжёвывается. Поэтому стоит быть готовыми к вдумчивому чтению листингов. Однако, учебник не зря назван «интерактивным». В тексте содержатся вставки с так называемым ActiveCode, который можно запускать прямо на странице, чтобы в живую «пощупать» программу. Плюс для более сложного материала есть CodeLens — этакий отладчик, в котором можно просмотреть работу кода построчно. В большинстве разделов есть тесты для самопроверки, а в конце каждой главы идут два блока заданий для самостоятельной работы: по теории и по практике.
Технические подробности
Учебник реализован на sphinx с использованием расширений, которые добавляют в него интерактивность (например, расширение, позволяющее исполнять исходных код на Python в броузере). Как и оригинальный проект, перевод является open source. Все исходники книги выложены на github-е. Поэтому если вы нашли опечатку, смысловую или стилистическую ошибку, то присоединяйтесь! Так же вы можете сделать клон репозитория учебника и читать его локально. Инструкцию по сборке можно найти по тут.
И ещё раз ссылки
Оригинал: http://interactivepython.org/courselib/static/pythonds/index.html
Перевод: http://aliev.me/runestone/
Репозиторий перевода на github-е: https://github.com/aliev/runestone
Автор: AveNat