Я заметил, что не все учебники по алгоритмам структурированы одинаково. Кажется, они подразделяются на две разные категории, и одна из них лучше, чем другая, помогая читателю понять, какое решение использовать для конкретной проблемы:
- «что нужно сделать в этой проблеме»:то есть глава о сортировке, глава о поиске, деревья, кучи. Например, "Алгоритмы" Роберта Седжвика, "Введение в алгоритмы" Томаса Кормена.
и
«как спроектировать алгоритм для решения этой проблемы»: то есть «разделяй и властвуй», «ветвь и связывай», жадный подход. Например,
«Основы алгоритмов» Ричарда Э. Неаполитана и в определенной степени
«Алгоритмы с подсветкой» Тима Рафгардена Первым способомалгоритмы преподаются как изолированные методы, которые применяются к некоторому случайному набору данных («здесь мы покажем вам, как сортировать его, здесь мы покажем, как его искать»), и это приводит меня в замешательство относительно того, какое решение выбрать.
Но во втором случае алгоритмы представлены тем, как они разработаны (а не тем, что они делают). Например, сортировка слиянием и бинарный поиск могут быть представлены вместе как алгоритмы «разделяй и властвуй» в одной главе. Алгоритмы для нахождения минимально охватывающих деревьев могут быть связаны с алгоритмами планирования, так как они оба являются жадными подходами. Для меня этот тип книги (второй тип) является наиболее полезным и помогает мне сохранять информацию в более долгосрочной перспективе.
Еще одна хорошая книга, которая может оказаться полезной, - "Руководство по разработке алгоритмовСтивен Скиена . Это гибрид двух подходов, но он содержит множество реальных анекдотов и «военных историй».