Мне было поручено создать библиотеку книг по алгоритмам для нашей небольшой компании (около 15 человек). Бюджет более чем 5k, но, конечно, меньше, чем 10k, так что я могу купить достаточное количество книг. Все люди здесь имеют, по крайней мере, степень бакалавра в области CS или тесно связанную с ней область, поэтому, хотя я получу некоторый базовый учебник, такой как Cormen, меня больше интересуют хорошие книги по продвинутым темам. (Я получу 4 тома Кнута, кстати)
Некоторый список тем будет:
Алгоритмы сортировки
Графовые алгоритмы
Строковые алгоритмы
Рандомизированные алгоритмы
Распределенные алгоритмы
Комбинаторные алгоритмы
и т.п.
По сути, я ищу хорошие рекомендации по книгам по основным темам в CS, связанным с алгоритмами и структурами данных. Особенно то, что выходит за рамки того, что обычно рассматривается в классах алгоритмов и структур данных, как часть степени бакалавра в хорошей школе. Я знаю, что вопрос довольно размыт, так как я ищу в общем полезный материал. Программное обеспечение, которое мы разрабатываем, в основном работает на уровне системы и обрабатывает большие объемы данных.
Идеальным также было бы найти что-нибудь, что охватывало бы довольно свежие классные структуры данных и алгоритмы, о которых большинство людей, возможно, не слышали.
РЕДАКТИРОВАТЬ: Вот несколько предварительных книг, которые я думаю, что я должен получить:
Введение в алгоритмы Cormen et al.
Разработка алгоритма Клейнбергом, Тардос
Искусство компьютерного программирования Том 1-4 от Кнута
Аппроксимационные алгоритмы Вазирани
Разработка алгоритмов аппроксимации Уильямсоном, Шмойс
Рандомизированные алгоритмы Мотвани, Рагхавана
Введение в теорию вычислений от Sipser
Вычислительная сложность Арора, Барак
Компьютеры и Непреодолимость Гэри и Джонсона
Комбинаторная оптимизация по Шрайверу
Несколько других книг, которые хотели найти мои коллеги, посвященные методам и алгоритмам языкового дизайна, компиляторам и формальным методам:
Типы и языки программирования от Pierce
Принципы проверки моделей Байером, Катоеном
Компиляторы: принципы, методы и инструменты Aho, Lam, Sethi, Ullman
Справочник по проектированию компиляторов: Оптимизация и генерация машинного кода, второе издание Srikant, Shankar
Справочник по сборке мусора: искусство автоматического управления памятью Джонс, Хоскинг, Мосс
Ответы:
Я не прочитал (почти) достаточно книг, чтобы назвать их на сумму 5000 долларов. Поэтому я предлагаю некоторые группы литературы, которые вы должны охватить, а также указать на выбранных представителей. Я не могу утверждать, что прочитал большинство книг полностью сам, поэтому я должен полагаться в основном на описания, поверхностное впечатление и репутацию. Я изучал или работал с большинством из них в некоторой степени, или рекомендовал их экспертам.
Я предполагаю, что вы хотите, чтобы ваши люди узнали, что можно сделать и как это сделать, а не узнавали, что они не могут сделать. В частности, я опущу книги о теории вычислимости и сложности как таковой; Я ожидаю, что ваши люди забрали соответствующие сообщения из их бакалавриата.
Основы
Даже если ваши люди узнали их в какой-то момент, ожидайте, что они найдут основы. Так как источники, такие как Википедия, часто некачественны или прямо неверны, вы хотите получить для них надлежащие справочные тексты.
Популярные варианты включают в себя
Очень широкое введение, которое охватывает многие элементарные алгоритмы и структуры данных, а также основные методы анализа. Стандартный текст, часто используемый в учебных целях и доступный в его 3-м издании (поэтому большинство ошибок уже должно быть устранено). Много упражнений.
Еще один стандартный текст в его четвертом издании. Менее широкий, чем Cormen, но с большим вниманием к деталям реализации. Много материалов онлайн, в том числе бесплатный курс Coursera . Много упражнений.
Также довольно узкий выбор тем, но с вниманием к дидактике. Основное внимание уделяется индуктивным стратегиям. Содержит множество упражнений и решений (или хотя бы подсказок) для некоторых. Хороший вторичный справочник, если вам не нравится рекомендуемый учебник из-за его необычного стиля.
Охватывает дискретную математику как актуальную для анализа алгоритмов. Редкий в его фокусе на потребностях информатики и строгости. Очень высокое качество Много упражнений с решениями.
Анализ алгоритмов В большинстве стандартных учебников анализ алгоритмов обычно останавливается на уровне асимптотики и модели RAM. Чтобы оценить реальную эффективность более надежно, может потребоваться более точное исследование времени выполнения и рассмотрение таких эффектов, как иерархия памяти и связь.O
Основные методы для точного анализа алгоритмов. Написано пионерами поля. Также есть бесплатный онлайн-курс .
Расширенные опросы
Classic и базовой литературой, часто фокусируются на процедурной парадигме. Если вы хотите работать в функциональной парадигме, необходимы новые методы для эффективных структур данных. Эта книга представляет собой подробный обзор области.
Иногда базовых методов недостаточно. Это обзор более сложных структур данных, с кодом и множеством ссылок.
сложности Хромковича говорит нам (как практикам), что не стоит искать точные, но эффективные алгоритмы для многих естественных задач. Есть много методов для практического решения этих проблем; этот текст показывает вам, как.
Специализированная литература
если вы когда - нибудь понадобится , чтобы построить или возиться с компилятором, это стандартный текст на площади.
Многих проблем может быть смоделирована как проблемы сетей потоков; эта книга дает вам полное освещение области.
моделей графических являются основным инструментом при моделировании сценариев для машинного обучения ( в том числе) вероятностно. Это полный обзор комплекса. Существует родственный бесплатный онлайн курс .
Строка соответствия является постоянно важной задачей при работе с данными. В этой книге перечислены большинство (если не все) соответствующие алгоритмы для работы, включая описания высокого уровня, а также реализации.
Глубокое математическое погружение после «Введение в анализ алгоритмов» тех же авторов. Не для всех, но золото для заинтересованных.
Если вам когда-нибудь придется иметь дело с огромными объемами строковых данных (в частности, в контексте биологии), это руководство для краткого обзора соответствующих структур данных и алгоритмов.
Для практикующего
На практике вы можете использовать несколько машин для решения больших проблем. Эта книга представляет собой высокоуровневый пример на основе примеров того, как это можно сделать, а именно, как организовать и переместить агентов обработки данных и данных. Также рассматриваются способы их реализации с помощью существующих инструментов.
Когда теоретический анализ слишком сложно или слишком грубой, вы должны выполнить эксперименты. Это введение в том , как правильно проектировать эксперименты по алгоритмам.
Вам часто требуются доменные языки и инструменты для их анализа. ANTLR - это зрелый и удобный генератор компиляторов, и эта книга лучше всего подходит для обучения его использованию. У Парра также есть несколько других книг по DSL, которые стоит посмотреть.
Если вам нужны самые свежие материалы, вам следует рассмотреть возможность предоставления вашим людям доступа к журналам и материалам конференций, возможно, сотрудничая с университетской библиотекой. Вы также можете позволить им посещать конференции на темы, относящиеся к ним, соответственно. Ваша компания.
Кроме того, рассмотрите возможность спросить своих людей. Пусть они проведут собственное исследование (включая бесплатные образцы или копии в Интернете или библиотеках), и они скажут вам, какие книги они считают относящимися к их работе. Нет смысла покупать вещи, которые никто не будет читать.
источник
Вот случайная коллекция книг по продвинутым алгоритмам, основанная на том, что я считаю отличной книгой о продвинутых алгоритмах. Конечно, это только мое личное мнение, и есть много других хороших книг.
Вы должны определенно рассмотреть книгу Кляйнберга / Тардоса, которая является просто отличным учебником.
Также вы должны знать, что по определенным темам есть «справочники», которые дают энциклопедический обзор по полю (например, «Справочник по вычислительной геометрии»). под редакцией JR Sack, J. Urrutia. Обратите внимание, что эти руководства дорогие. Так что покупка их может помочь вам потратить 5к.
источник
Вы не указываете, на чем специализируется ваша компания, поэтому нелегко дать больше, чем общие рекомендации. В целом, я думаю, что список, который вы составили, довольно хорош, и я бы ничего не убрал из него. Просто пара дополнений и комментариев:
1) Кормен это стандартный текст. Седжвик это еще один стандартный текст. Я всегда получал больше от Седжвика, но от YMMV. Кажется, у вас есть бюджет. Купить оба.
2) У меня нет копии «Руководства по сбору мусора», но у меня есть копия предыдущего обзора Jones & Lin по сбору мусора. Если вы намереваетесь сделать какое-либо автоматическое управление памятью, вам обязательно стоит купить это.
3) Вы также получили несколько полезных книг по разбору и теории автоматов, но вам не хватает два книг (три тома) , которые я нашел наиболее полезным: Sippu и Soisalon-Soisinen в Теории Синтаксической и Dick Grune в Techniques Разбора, Практическое руководство . Первый - это большой обзор теории, а второй - исчерпывающий обзор практики. (Во что бы то ни стало, возьмите и книгу с драконами. Но держу пари, что вы в конечном итоге будете больше использовать Грюна.)
4) Для каждой библиотеки по структурам данных требуется копия «чисто функциональных структур данных» Окасаки. Я не думаю, что когда-либо читал какую-либо книгу, такую тонкую, с таким количеством интересных идей.
5) У меня нет копии «Алгоритмов на строках» Максима Крочемора, но мне бы хотелось, чтобы это было. Очень практично, много полезных идей.
Алгоритмы на C ++ / Java / C (выберите один), третье издание Роберта Седжвика. Два тома. Addison-Wesley, 2001.
Справочник по сбору мусора Ричарда Джонса, Энтони Хоскинга и Элиота Мосса.
Теория парсинга, Сеппо Сиппу и Эльяс Сойсалон-Сойнинен. Два тома: Том. 1 Языки и разбор; Том 2 LR (k) и LL (k) Парсинг. Springer, 1988.
Техника разбора, Практическое руководство, второе издание Дика Груна и Чериэля Дж. Х. Джейкобса. Springer, 2008.
Чисто функциональные структуры данных Крис Окасаки. Кембридж, 1998.
Алгоритмы на струнах Максима Крочемора, Кристофа Ханкара, Тьерри Лекрока. Кембридж, 2007.
источник