Попросили инженеров YADRO поделиться избранными материалами про алгоритмы и структуры данных для «плюсовиков». Вспомнили и «классику» вроде книги Никлауса Вирта, и более современные источники, а также рассказали, почему стоит посвятить им время.
Статьи, лекции и курсы из подборки помогут опытным специалистам «вспомнить все» перед собеседованием или погрузиться в тему алгоритмов, если вы пока в ней не сильны.
Дисклеймер: некоторые ссылки открываются только с VPN.
![](https://habrastorage.org/getpro/habr/upload_files/14e/b26/ff0/14eb26ff027ed1a70d336d4b7f962aa8.png)
Кирилл Колодяжный
Ведущий инженер по разработке ПО в отделе оптимизации производительности СХД
Что рекомендует: Курс Algorithms от Стэнфордского университета
Почему стоит смотреть: На мой взгляд, автор курса Тим Роугарден — отличный лектор. В Algorithms он буквально на пальцах объясняет базовую теорию и дает практические задания, которые проверяются на платформе Coursera автоматически. На внутреннем форуме можно обсудить решения и ошибки с другими студентами или кураторами курса.
Новый поток стартовал 15 августа, поэтому вы еще успеваете присоединиться. Курс займет 2 месяца, если уделять учебе 10 часов в неделю.
![](https://habrastorage.org/getpro/habr/upload_files/59c/45f/714/59c45f7147159fe4d3a229cfe0d1cc72.png)
Анонимный инженер
Разработчик на С++ в YADRO
Что рекомендует: Лекции Павла Маврина
Почему стоит смотреть: Автор лекций преподает курс по алгоритмам и структурам данных в ИТМО. А еще он чемпион мира ACM ICPC 2004 и занимает высокие места в соревнованиях по спортивному программированию типа TopCoder и Google Code Jam, что говорит о его высокой компетенции в этой сфере. Я слушал его лекции во время учебы в ИТМО. Из личного опыта: после курсов Павла я наконец-то начал понимать, как работают алгоритмы на графах. В лекциях, как правило, используется псевдокод, но я не считаю это проблемой. Главное — понимать принципы работы алгоритмов, а умение реализовать их на определенном языке программирования вторично.
![](https://habrastorage.org/getpro/habr/upload_files/507/1c9/afd/5071c9afd8ec11ffb0e3eb1d5da44162.jpg)
Илья Казаков
Старший инженер по разработке ПО в группе разработки эмуляторов дисковой подсистемы
Что рекомендует: Выступление Романа Панова на C++ Russia «Дерево смещений: работаем с динамически изменяемыми сегментированными массивами»
Пока доступно только тем, у кого есть билет, но скоро все видео выложат на каналы конференции.
Почему стоит смотреть: В прошлом веке Николаус Вирт написал книгу с говорящим названием «Алгоритмы + Структуры данных = Программы». Кажется, что данное утверждение сохраняет истинность и сегодня.
Когда я пишу на С++, меня увлекают вещи вроде системного или библиотечного интерфейса, времени исполнения программы, асинхронности, многопоточности и синхронизации. В этих бесчисленных аспектах теряется фокус на том, какие структуры данных и алгоритмы я использую.
Если сравнивать с другими языками, стандартная библиотека С++ достаточно скудна относительно структур данных, которые она предоставляет. Хочешь использовать структуру данных, которой нет в стандартной библиотеке, — приходится обращаться за помощью к сторонним библиотекам или писать свою реализацию. А результат редко оправдывает усилия. Но каждый раз, когда возникает потребность в собственной реализации структуры данных, более того, когда задача требует ad hoc-структуры данных, становится невероятно интересно. Как раз под этот случай и попадает дерево смещений.
Елена Степанова, старший инженер: «Я училась программировать по книге «Алгоритмы + Структуры данных = Программы» Никлауса Вирта 20 лет назад, но информация в ней до сих пор актуальна — базовые принципы не изменились».
![](https://habrastorage.org/getpro/habr/upload_files/3d5/3ee/97c/3d53ee97cfad65f413a9478fc568da58.jpg)
Константин Владимиров
Руководитель отдела инструментов разработки и компиляторов
Что рекомендует: «Алгоритмы. Построение и анализ», Томас Кормен, Чарльз Эрик Лейзерсон, Рональд Линн Ривест, Клиффорд Штайн
Почему стоит читать: На вводном уровне Кормен — это непреходящая классика, даже лучшем, чем Вирт. В книге рассматривают множество алгоритмов и задач, как очень простых, чтобы не выпадать из материала, так и сложных, уровня исследовательских проектов. Работа «Алгоритмы. Построение и анализ» — хорошая ступенька к более серьезной литературе, например, «Искусству программирования» Кнута. Кроме того, у Кормена простой и понятный псевдокод, что позволяет одновременно изучать алгоритмы и прокачиваться в реализации на вашем любимом языке.
Что еще советуют разработчики на С++:
Курс Algorithms от Стэнфордского Университета
Сборник из 145 алгоритмов для самостоятельной практики
Книга «Диалекты Basic для ZX Spectrum» под редакцией Родионова Н. Ю., Ларченко А. А.
Выступление Джонатана Боккара на CppCon 2018 "105 STL algorithms in less than an hour"
Какими материалами об алгоритмах на С++ вы бы дополнили подборку? Пишите в комментариях.
ryba1967
Поделитесь, как пользоваться Coursera в 2024 году из России. Всё работает?
yadro_team Автор
Добрый день! Проверили: Coursera открывается с VPN.
ryba1967
По ссылке специализация из 6 курсов, Роугардена нет в списке инструкторов., там Куликов и Певзнер Остальное совпадает - 10 часов в неделю, 5 месяцев.
Курс, о котором вы говорили - бесплатный?
yadro_team Автор
Спасибо, что заметили! Теперь в публикации верная ссылка — на тот самый курс Роугардена, о котором рассказывает Кирилл Колодяжный. И курс как раз стартует сегодня. Дублируем ссылку: https://www.coursera.org/specializations/algorithms
ryba1967
Нашёл, 7 дней бесплатно, потом надо оплатить