Книги з алгоритму за різними темами


11

Мені було доручено побудувати бібліотеку книг за алгоритмами для нашої невеликої компанії (близько 15 осіб). Бюджет - понад 5 к., Але, звичайно, менше 10 к., Тому я можу придбати неабияку кількість книг. Усі люди мають принаймні ступінь бакалавра з КС або тісно пов’язаної галузі, тому, хоча я отримаю базовий підручник на зразок Кормен, мене більше цікавлять хороші книги на розширені теми. (Я отримаю 4 томи Кнута, BTW.)

Перелік тем буде:

  • Алгоритми сортування

  • Графічні алгоритми

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

  • Випадкові алгоритми

  • Розподілені алгоритми

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

  • тощо.

По суті, я шукаю хороших рекомендацій щодо книг про основні теми в КС, пов'язані з алгоритмами та структурами даних. Особливо те, що виходить за рамки, які зазвичай охоплені класами алгоритмів та структури даних, як частина бакалавра в хорошій школі. Я знаю, що питання досить нечітке, оскільки я шукаю корисно корисний матеріал. Програмне забезпечення, яке ми розробляємо, - це здебільшого на системному рівні, що обробляє велику кількість даних.

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


EDIT: Ось кілька попередніх книг, які, на мою, я повинен отримати:

  • Вступ до алгоритмів Cormen et al.

  • Дизайн алгоритму від Kleinberg, Tardos

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

  • Алгоритми наближення за Вазірані

  • Дизайн алгоритмів апроксимації Вільямсон, Шмойс

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

  • Вступ до теорії обчислення Шипсером

  • Комплексна обчислюваність від Arora, Barak

  • Комп'ютери та нездатність Гарі та Джонсона

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

Кілька інших книг, які хотіли мої колеги, що стосуються методів та алгоритмів мовного дизайну, компіляторів та формальних методів:

  • Типи та мови програмування від Пірса

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

  • Компілятори: Принципи, методики та інструменти від Ахо, Лама, Сеті, Уллмана

  • Посібник з проектування компілятора: оптимізація та генерація машинного коду, друге видання Srikant, Shankar

  • Посібник зі збирання сміття: Мистецтво автоматичного управління пам’яттю Джоуном, Хоскінг, Моссом


Книги , що кожна бібліотека повинна мати: * Алгоритм дизайну Джон Клейнберг і Ева Тардос * Введення в теорію обчислень з допомогою незговірливість Майкл Сіпзер * Комп'ютери та: Керівництво по теорії NP-повноти по MR Garey і DS Johnson
Pål GD

> * Вступ до теорії обчислень Майкла Шипсера Це чудова книга, але мова йде більше про автомати та мови, безтекстові мови, машини Тюрінга, теорію складності тощо. Не багато про алгоритми
Девід

1
Ого, це питання широке. Як ви очікуєте перевірити якість та покриття вибору? Який твій досвід? Над чим працює ваша компанія? Чи є у вас люди з магістерськими або докторськими ступенями?
Рафаель

1
Повідомлення модератора: будь ласка, не публікуйте однокнижних відповідей і поясніть, чому ви робите такий вибір. Тут є бюджет у 5 тисяч доларів: поясніть, як би ви витратили його! Розкажіть, які книги, на вашу думку, є обов'язковими, які теми слід досліджувати далі, як ви робите свій вибір ...
Жил 'ТАК - перестань бути злим'

Вас в основному цікавить дизайн, чи також аналіз алгоритмів? Якщо так, чи хочете ви, щоб ваші люди були компетентними в теоретичному аналізі, чи хотіли б, щоб вони мали досвід більш практичних засобів оцінювання ефективності?
Рафаель

Відповіді:


13

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

Я припускаю, що ви хочете, щоб ваші люди дізналися, що можна зробити, і як це зробити, на відміну від вивчення того, чого вони не можуть зробити. Зокрема, я залишу книги про теорію обчислюваності та складності як такої; Я очікую, що ваші люди відібрали відповідні повідомлення зі своєї бакалаврської освіти.

  • Основи
    Незважаючи на те, що ваші люди навчились їх у якийсь момент, очікуйте, що вони знайдуть основи. Оскільки такі джерела, як Вікіпедія, часто є нестандартними або відвертими помилками, ви хочете отримати належні довідкові тексти.

    Популярні варіанти включають

    • Вступ до алгоритмів Cormen, Leiserson et al.
      Дуже широке вступ, що охоплює багато елементарних алгоритмів та структур даних, а також основні методи аналізу. Стандартний текст, який часто використовується в навчальних цілях і доступний у його третьому виданні (тому більшість помилок уже слід було очистити). Багато вправ.
    • Алгоритми Седжевіка та Уейна
      Ще один стандартний текст у його четвертому виданні. Менш широкий, ніж Кормен, але з більшою увагою до деталей реалізації. Багато матеріалів в Інтернеті, включаючи безкоштовний курс на курсі . Багато вправ.
    • Вступ до алгоритмів - творчий підхід Уді Манбера
      Також досить тонкий вибір тем, але приділений увагою дидактиці. Основна увага приділяється індуктивним стратегіям. Містить безліч вправ і рішень (або, принаймні, підказки) для деяких. Хороша вторинна довідка, якщо вам не подобається рекомендований підручник через його незвичний стиль.
    • Конкретна математика Грема, Кнута та Паташника Покриває
      дискретну математику, що стосується аналізу алгоритму. Рідкісний у своїй зосередженості на потребах та суворості інформатики . Дуже висока якість. Багато вправ з розчинами.
  • O

  • Розширені опитування

    • Суто функціональні структури даних Okasaki
      Classic та основної літератури часто зосереджуються на процедурній парадигмі. Якщо ви хочете працювати у функціональній парадигмі, потрібні нові методи ефективної структури даних. Ця книга є детальним оглядом місцевості.
    • Розширені структури даних від Brass
      Іноді основних методів недостатньо. Це огляд передових структур даних з кодом та багатьма посиланнями.
    • Алгоритміка складних проблем
      теорії Громковича говорить нам (як практикам) не турбуватися шукати точні, але ефективні алгоритми для багатьох природних проблем. Існує безліч методик практично вирішити ці проблеми; Цей текст показує, як.
  • Спеціалізована література

    • Укладачі: принципи, методи та інструменти ака The Dragon Book по Ахо і ін ,
      якщо ви коли - небудь знадобиться , щоб побудувати або возитися з компілятором, це стандартний текст на площі.
    • Мережеві потоки: теорія, алгоритми та програми Ahuja
      Багато проблем можна моделювати як проблеми мережевого потоку; ця книга дає повне висвітлення поля.
    • Імовірнісні графічні моделі Коллера та Фрідмана
      Графічні моделі є головним інструментом моделювання сценаріїв машинного навчання (серед інших) імовірнісно. Це вичерпний огляд комплексу. Є відповідний безкоштовний онлайн-курс .
    • Довідник точних рядків, що відповідають алгоритмам Чарраса та Lecrog
      String зіставлення, - це завжди важливе завдання при роботі з даними. У цій книзі перераховано більшість (якщо не всі) відповідних алгоритмів роботи, включаючи описи високого рівня, а також реалізацію.
    • Аналітична комбінаторика Седжевіком і Флайолетом
      Глибоке математичне занурення після "Вступу до аналізу алгоритмів" тих же авторів. Не для всіх, але золото для зацікавлених.
    • Алгоритми рядків, дерев та послідовностей Гусфілда
      Якщо вам коли-небудь доводиться стикатися з величезною кількістю рядкових даних (зокрема в контекстах біології), це справжня книга, оскільки вона дає огляд відповідних структур даних та алгоритмів.
  • Для Практикуючого

    • Шаблони паралельного програмування Mattson et al.
      На практиці ви можете використовувати кілька машин для вирішення великих проблем. Ця книга є високоефективним, орієнтованим на приклад оглядом способів цього зробити, тобто як організувати та перемістити дані та обчислювальні агенти. Тут також розглядаються способи їх реалізації за допомогою існуючих інструментів.
    • Посібник з експериментальної алгоритміки МакГеоха
      Коли теоретичний аналіз занадто жорсткий або занадто грубий, вам доведеться проводити експерименти. Це вступ до того, як правильно проектувати експерименти над алгоритмами.
    • Остаточний довідник ANTLR 4 від Parr
      Для аналізу їх часто потрібні конкретні доменні мови та інструменти. ANTLR - зрілий і зручний генератор компіляторів, і ця книга найкраще підходить для того, щоб навчитися ним користуватися. Парр також має деякі інші книги про DSL, які варто перевірити.

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

Також роздумайте просити своїх людей. Запропонуйте їм зробити власне дослідження (включаючи безкоштовні зразки чи копії в Інтернеті чи бібліотеках), і вони скажуть вам, які книги вони вважають релевантними для їхньої роботи. Немає користі в покупці речей, які ніхто не прочитає.


І, звичайно, надсилайте їх сюди зі своїми цікавими проблемами. :)
Рафаель


@Bartek: Ніколи про нього не чув, тому не можу рекомендувати.
Рафаель

4

Ось випадкова колекція книг про вдосконалені алгоритми на основі того, що я вважаю чудовою книгою про вдосконалені алгоритми. Звичайно, це лише моя особиста думка, і є багато інших хороших книг.

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

Ви обов'язково повинні розглянути книгу Кляйнберга / Тардоса, яка є просто чудовим підручником.

Також слід знати, що з певних тем є "підручники", які дають енциклопедичний огляд поля (наприклад, Довідник з обчислювальної геометрії). за редакцією JR Sack, J. Urrutia. Зауважте, що ці посібники - ціна. Тож придбання їх може допомогти вам витратити 5 к.


1
Ви кажете, що це "випадкова" колекція. Чи є у вас конкретні причини, щоб рекомендувати ці книги? Що повинен зробити ОП з рештою $ 4,5 тис.?
Рафаель

4

Ви не вказуєте, для чого спеціалізується ваша компанія, тому надати не більше ніж загальні рекомендації. В цілому, я думаю, що список, який ви склали, є досить хорошим, і я нічого з цього не видаляю. Кілька доповнень та коментарів:

1) Кормен - це стандартний текст. Sedgewick - це ще один стандартний текст. Я завжди отримував більше від Sedgewick, але YMMV. Здається, у вас є бюджет. Купуйте обидва.

2) У мене немає копії "Посібника зі збору сміття", але у мене є добре промаркована копія попереднього опитування Jones & Lin щодо збору сміття. Якщо ви маєте намір зробити будь-яке автоматизоване управління пам'яттю, вам обов'язково потрібно придбати цю.

3) Ви також отримали декілька корисних книг з розбору та теорії автоматів, але вам не вистачає двох книг (три томи), які я вважаю найбільш корисними: Теорія розбору Сіппу та Сойсалона-Сойсінена та методики розбору Діка Груна , практичний посібник . Перший - це великий огляд теорії, а другий - вичерпний огляд практики. (У будь-якому випадку, дістаньте і книгу-дракона. Але я буду обділятись, що ви в кінцевому підсумку скористаєтеся більше Груном.)

4) Кожна бібліотека на структурах даних вимагає копії "чисто функціональних структур даних" Окасакі. Я не думаю, що я ніколи не читав жодної книжки такої тонкої з такою кількістю цікавих ідей.

5) Я не є власником копії "Алгоритмів про струнні" Максима Крочемора, але я б хотів, щоб це зробив. Дуже практична, багато корисних ідей.

  • Алгоритми на C ++ / Java / C (виберіть один), Третє видання Роберта Седжевіка. Два томи. Аддісон-Веслі, 2001.

  • Посібник зі збору сміття Річард Джонс, Ентоні Хоскінг та Еліот Мосс.

  • Теорія розбору, від Seppo Sippu та Eljas Soisalon-Soininen. Два томи: Вип. 1 Мови та розбір; Вип. 2 LR (k) і LL (k) Парсинг. Спрингер, 1988.

  • Техніка розбору, практичний посібник, друге видання Діка Груна та Ceriel JH Jacobs. Спрингер, 2008.

  • Чітко функціональні структури даних Кріса Окасакі. Кембридж, 1998.

  • Алгоритми на струнах Максима Крокемора, Крістофа Ханкарта, Тьєррі Лекрока. Кембридж, 2007.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.