Алгоритм книги по ряду тем


11

Мне было поручено создать библиотеку книг по алгоритмам для нашей небольшой компании (около 15 человек). Бюджет более чем 5k, но, конечно, меньше, чем 10k, так что я могу купить достаточное количество книг. Все люди здесь имеют, по крайней мере, степень бакалавра в области CS или тесно связанную с ней область, поэтому, хотя я получу некоторый базовый учебник, такой как Cormen, меня больше интересуют хорошие книги по продвинутым темам. (Я получу 4 тома Кнута, кстати)

Некоторый список тем будет:

  • Алгоритмы сортировки

  • Графовые алгоритмы

  • Строковые алгоритмы

  • Рандомизированные алгоритмы

  • Распределенные алгоритмы

  • Комбинаторные алгоритмы

  • и т.п.

По сути, я ищу хорошие рекомендации по книгам по основным темам в CS, связанным с алгоритмами и структурами данных. Особенно то, что выходит за рамки того, что обычно рассматривается в классах алгоритмов и структур данных, как часть степени бакалавра в хорошей школе. Я знаю, что вопрос довольно размыт, так как я ищу в общем полезный материал. Программное обеспечение, которое мы разрабатываем, в основном работает на уровне системы и обрабатывает большие объемы данных.

Идеальным также было бы найти что-нибудь, что охватывало бы довольно свежие классные структуры данных и алгоритмы, о которых большинство людей, возможно, не слышали.


РЕДАКТИРОВАТЬ: Вот несколько предварительных книг, которые я думаю, что я должен получить:

  • Введение в алгоритмы Cormen et al.

  • Разработка алгоритма Клейнбергом, Тардос

  • Искусство компьютерного программирования Том 1-4 от Кнута

  • Аппроксимационные алгоритмы Вазирани

  • Разработка алгоритмов аппроксимации Уильямсоном, Шмойс

  • Рандомизированные алгоритмы Мотвани, Рагхавана

  • Введение в теорию вычислений от Sipser

  • Вычислительная сложность Арора, Барак

  • Компьютеры и Непреодолимость Гэри и Джонсона

  • Комбинаторная оптимизация по Шрайверу

Несколько других книг, которые хотели найти мои коллеги, посвященные методам и алгоритмам языкового дизайна, компиляторам и формальным методам:

  • Типы и языки программирования от Pierce

  • Принципы проверки моделей Байером, Катоеном

  • Компиляторы: принципы, методы и инструменты Aho, Lam, Sethi, Ullman

  • Справочник по проектированию компиляторов: Оптимизация и генерация машинного кода, второе издание Srikant, Shankar

  • Справочник по сборке мусора: искусство автоматического управления памятью Джонс, Хоскинг, Мосс


Книги, которые должна иметь каждая библиотека: * Разработка алгоритма Джоном Кляйнбергом и Эвой Тардос * Введение в теорию вычислений Майкла Сипсера * Компьютеры и неразрешимость: Руководство по теории NP-полноты М. Р. Гэри и Д. С. Джонсона
Пол Г. Д.

> * Введение в теорию вычислений Майкла Сипсера. Это отличная книга, но она больше посвящена автоматам и языкам, языкам без контекста, машинам Тьюринга, теории сложности и так далее. Это не так много об алгоритмах
Devid

1
Вау, это широкий вопрос. Как вы ожидаете, чтобы проверить качество и охват выбора? Каков ваш фон? Над чем работает ваша компания? Есть ли у вас люди со степенью магистра или докторантуры?
Рафаэль

1
Уведомление модератора: пожалуйста, не публикуйте ответы из одной книги и объясните, почему вы делаете такой выбор. Здесь бюджет в 5 тысяч долларов: объясните, как бы вы его потратили! Скажите нам, какие книги, по вашему мнению, должны быть в наличии, какие темы следует изучить дальше, как вы делаете свой выбор ...
Жиль, ТАК, перестаньте быть злыми "

Вы в основном заинтересованы в дизайне, или также в анализе алгоритмов? Если да, то хотите ли вы, чтобы ваши люди приобрели компетентность в теоретическом анализе, или вы бы предпочли, чтобы они обладали более практичными средствами оценки эффективности?
Рафаэль

Ответы:


13

Я не прочитал (почти) достаточно книг, чтобы назвать их на сумму 5000 долларов. Поэтому я предлагаю некоторые группы литературы, которые вы должны охватить, а также указать на выбранных представителей. Я не могу утверждать, что прочитал большинство книг полностью сам, поэтому я должен полагаться в основном на описания, поверхностное впечатление и репутацию. Я изучал или работал с большинством из них в некоторой степени, или рекомендовал их экспертам.

Я предполагаю, что вы хотите, чтобы ваши люди узнали, что можно сделать и как это сделать, а не узнавали, что они не могут сделать. В частности, я опущу книги о теории вычислимости и сложности как таковой; Я ожидаю, что ваши люди забрали соответствующие сообщения из их бакалавриата.

  • Основы
    Даже если ваши люди узнали их в какой-то момент, ожидайте, что они найдут основы. Так как источники, такие как Википедия, часто некачественны или прямо неверны, вы хотите получить для них надлежащие справочные тексты.

    Популярные варианты включают в себя

    • Введение в алгоритмы Cormen, Leiserson et al.
      Очень широкое введение, которое охватывает многие элементарные алгоритмы и структуры данных, а также основные методы анализа. Стандартный текст, часто используемый в учебных целях и доступный в его 3-м издании (поэтому большинство ошибок уже должно быть устранено). Много упражнений.
    • Алгоритмы Седжвика и Уэйна
      Еще один стандартный текст в его четвертом издании. Менее широкий, чем Cormen, но с большим вниманием к деталям реализации. Много материалов онлайн, в том числе бесплатный курс Coursera . Много упражнений.
    • Введение в алгоритмы - творческий подход Уди Манбера.
      Также довольно узкий выбор тем, но с вниманием к дидактике. Основное внимание уделяется индуктивным стратегиям. Содержит множество упражнений и решений (или хотя бы подсказок) для некоторых. Хороший вторичный справочник, если вам не нравится рекомендуемый учебник из-за его необычного стиля.
    • Конкретная математика Грэма, Кнута и Паташника
      Охватывает дискретную математику как актуальную для анализа алгоритмов. Редкий в его фокусе на потребностях информатики и строгости. Очень высокое качество Много упражнений с решениями.
  • Анализ алгоритмов В большинстве стандартных учебников анализ алгоритмов обычно останавливается на уровне асимптотики и модели RAM. Чтобы оценить реальную эффективность более надежно, может потребоваться более точное исследование времени выполнения и рассмотрение таких эффектов, как иерархия памяти и связь.O

  • Расширенные опросы

    • Чисто функциональные структуры данных, разработанные Okasaki
      Classic и базовой литературой, часто фокусируются на процедурной парадигме. Если вы хотите работать в функциональной парадигме, необходимы новые методы для эффективных структур данных. Эта книга представляет собой подробный обзор области.
    • Усовершенствованные структуры данных от Brass
      Иногда базовых методов недостаточно. Это обзор более сложных структур данных, с кодом и множеством ссылок.
    • Алгоритмика для сложных задач по теории
      сложности Хромковича говорит нам (как практикам), что не стоит искать точные, но эффективные алгоритмы для многих естественных задач. Есть много методов для практического решения этих проблем; этот текст показывает вам, как.
  • Специализированная литература

    • Составители: принципы, методы и инструменты ака The Dragon Book по Ахо и др ,
      если вы когда - нибудь понадобится , чтобы построить или возиться с компилятором, это стандартный текст на площади.
    • Сеть потоки: теория, алгоритмы и приложение от Ахадж
      Многих проблем может быть смоделирована как проблемы сетей потоков; эта книга дает вам полное освещение области.
    • Вероятностные Графические модели по Коллеру и Фридман
      моделей графических являются основным инструментом при моделировании сценариев для машинного обучения ( в том числе) вероятностно. Это полный обзор комплекса. Существует родственный бесплатный онлайн курс .
    • Справочник по точной строке Matching Алгоритмов по Charras и Lecrog
      Строка соответствия является постоянно важной задачей при работе с данными. В этой книге перечислены большинство (если не все) соответствующие алгоритмы для работы, включая описания высокого уровня, а также реализации.
    • Аналитическая комбинаторика Седжвика и Флажолета
      Глубокое математическое погружение после «Введение в анализ алгоритмов» тех же авторов. Не для всех, но золото для заинтересованных.
    • Алгоритмы по строкам, деревьям и последовательностям Гусфилда.
      Если вам когда-нибудь придется иметь дело с огромными объемами строковых данных (в частности, в контексте биологии), это руководство для краткого обзора соответствующих структур данных и алгоритмов.
  • Для практикующего

    • Шаблоны для параллельного программирования Mattson et al.
      На практике вы можете использовать несколько машин для решения больших проблем. Эта книга представляет собой высокоуровневый пример на основе примеров того, как это можно сделать, а именно, как организовать и переместить агентов обработки данных и данных. Также рассматриваются способы их реализации с помощью существующих инструментов.
    • Руководство по экспериментальной Algorithmics по McGeoch
      Когда теоретический анализ слишком сложно или слишком грубой, вы должны выполнить эксперименты. Это введение в том , как правильно проектировать эксперименты по алгоритмам.
    • The Definitive ANTLR 4 Справочник Parr
      Вам часто требуются доменные языки и инструменты для их анализа. ANTLR - это зрелый и удобный генератор компиляторов, и эта книга лучше всего подходит для обучения его использованию. У Парра также есть несколько других книг по DSL, которые стоит посмотреть.

Если вам нужны самые свежие материалы, вам следует рассмотреть возможность предоставления вашим людям доступа к журналам и материалам конференций, возможно, сотрудничая с университетской библиотекой. Вы также можете позволить им посещать конференции на темы, относящиеся к ним, соответственно. Ваша компания.

Кроме того, рассмотрите возможность спросить своих людей. Пусть они проведут собственное исследование (включая бесплатные образцы или копии в Интернете или библиотеках), и они скажут вам, какие книги они считают относящимися к их работе. Нет смысла покупать вещи, которые никто не будет читать.


И, конечно, отправьте их сюда со своими интересными проблемами. :)
Рафаэль


@Bartek: Никогда не слышал об этом, поэтому я не могу рекомендовать это.
Рафаэль

4

Вот случайная коллекция книг по продвинутым алгоритмам, основанная на том, что я считаю отличной книгой о продвинутых алгоритмах. Конечно, это только мое личное мнение, и есть много других хороших книг.

  • Аппроксимационные алгоритмы. Виджей В. Вазирани
  • Разработка алгоритмов аппроксимации Дэвидом П. Уильямсоном, Дэвидом Б. Шмойсом
  • Вычислительная геометрия: введение через рандомизированные алгоритмы Кетан Малмулей
  • Рандомизированные алгоритмы Раджива Мотвани, Прабхакара Рагхавана
  • Алгоритмы на строках, деревьях и последовательностях Дэна Гасфилда
  • Комбинаторная оптимизация Уильяма Дж. Кука, Уильяма Х. Каннингема, Уильяма Р. Пуллейблана, Александра Шрайвера

Вы должны определенно рассмотреть книгу Кляйнберга / Тардоса, которая является просто отличным учебником.

Также вы должны знать, что по определенным темам есть «справочники», которые дают энциклопедический обзор по полю (например, «Справочник по вычислительной геометрии»). под редакцией JR Sack, J. Urrutia. Обратите внимание, что эти руководства дорогие. Так что покупка их может помочь вам потратить 5к.


1
Вы говорите, что это «случайная» коллекция. Есть ли у вас конкретные причины рекомендовать эти книги? Что ОП должен сделать с оставшимися 4,5 тыс. Долларов?
Рафаэль

4

Вы не указываете, на чем специализируется ваша компания, поэтому нелегко дать больше, чем общие рекомендации. В целом, я думаю, что список, который вы составили, довольно хорош, и я бы ничего не убрал из него. Просто пара дополнений и комментариев:

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.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.