Какие книги по алгоритмам ты читал
Что проверяют
Есть ли у вас системная база, а не только привычка решать задачи на платформах, и насколько вы честны. Названная книга почти всегда вызывает уточнение: что из неё вы запомнили и где применяли. Например, чем куча отличается от сбалансированного дерева или какая сложность у вашего решения.
Как отвечать
Называйте только то, что читали, и к каждой книге добавляйте, что вынесли:
- Бхаргава, «Грокаем алгоритмы»: хороший вход, бинарный поиск, графы, жадные алгоритмы, основы динамического программирования, примеры на Python;
- Кормен, Лейзерсон, Ривест, Штайн, «Алгоритмы: построение и анализ»: фундамент с доказательствами и анализом сложности. Честно говорите, какие главы прошли, целиком её читают немногие;
- Скиена, «Алгоритмы. Руководство по разработке»: как свести практическую задачу к известному алгоритму;
- Седжвик и Уэйн, «Алгоритмы на Java»: сортировки, деревья поиска и графы, примеры легко переносятся на Python;
- Лааксонен, «Олимпиадное программирование»: сжато и практично, удобно перед алгоритмическим этапом.
Затем свяжите с Python. Показательно, если вы знаете, что dict и set это хэш-таблицы с поиском за O(1) в среднем, а x in list проходит список за O(n); что heapq даёт минимальную кучу, bisect бинарный поиск по отсортированному списку, collections.deque вставку и удаление с обоих концов за O(1); что list.sort() устойчивая и основана на Timsort.
Если книг вы не читали, не придумывайте: скажите, что учились по курсу или задачам на LeetCode, и назовите темы, которые уверенно разбираете.
Где спотыкаются
Называют Кормена для солидности, а на вопрос о сложности поиска в красно-чёрном дереве или о худшем случае быстрой сортировки теряются. Одна честно прочитанная книга сильнее трёх упомянутых.
Рассказывают, что знание алгоритмов «ускорило программу на 30%», но не могут назвать, какой алгоритм заменили каким и почему.
Не связывают теорию с языком: знают сложность из книги, но пишут поиск по списку внутри цикла и получают O(n²) там, где множество дало бы O(n).