Вот кстати, хочется рассказать о неплохой книжке по алгоритмам и структурам данных — «Программирование: теоремы и задачи» А. Х. Шеня (свободно распространяется в электронном виде, на бумаге несколько раз издавалась МЦНМО). Вот все знают книжки, скажем, Кнута (но мало кто их читал), Кормена (тут ситуация немного получше), Дасгупты или Скиены — а я хочу сказать, что эта брошюрка (320 страниц, на фоне среднего «айтишного» учебника в тысячу-полторы — это ни о чем) по глубине изложенного материала не уступает как минимум двум последним.
Особенность книжки — в изложении материала. Это не столько учебник/справочник, сколько задачник, построенный по логике «системы задач на листочках». Эта система применяется, скажем, во многих московских матшколах и состоит примерно в следующем — на каждую тему выдается список задач («листочек» — обычно они помещаются на лист формата A4), часть задач может иметь и самостоятельную ценность (как полноценные теоремы; иногда содержательные утверждения разбиваются на несколько подряд идущих задач). Сложность задач возрастает, для перехода к последующим листочкам надо либо решить текущий целиком, либо решить большую часть задач (в этом случае листочки могут содержать и нерешаемые задачи). Часть задач может разбираться «у доски» (прежде всего что-то основополагающее), остальные предназначены для самостоятельного решения.
В общем, получился такой сборник задач по алгоритмам для старших школьников или студентов-младшекурсников, не отягощенный излишней сложностью (как тот же Кормен), но и не скатывающийся в сюсюкание, как Бхаргава. Использовать как справочник проблематично, а как набор задач для самостоятельного понимания этого всего — в самый раз. В непонятных местах можно дополнить книжкой Дасгупты или Скиены.
PS Издание 90-х годов сопровождалось совершенно шикарным текстом — «Не покупайте эту книгу!» (кликабельно):
