Есть ли энциклопедия алгоритмов? [закрыто]

34

Существует ли энциклопедия алгоритмов, похожих по стилю на « Справочник по математике»? Кажется полезным иметь их в одном месте. Я знаю, что искусство компьютерного программирования считается хорошим источником, но оно кажется не столько энциклопедическим, сколько поучительным.

Примечание модератора

Мы ищем длинные ответы, которые дают некоторое объяснение и контекст. Не просто перечислите книгу: объясните, почему вы рекомендуете книгу или ресурс. Ответы, которые ничего не объясняют, будут удалены. См. Хорошее Субъективное, Плохое Субъективное для получения дополнительной информации.

Мировой инженер
источник
3
stackoverflow.com/questions/6781096/…
Джерри Коффин
Немного погуглил бы долгий путь, чтобы ответить на этот вопрос. По крайней мере, он предоставит список хороших кандидатов, которые вы затем сможете использовать, чтобы задать более сфокусированный вопрос.
Калеб

Ответы:

41

Я не уверен, что это то, что вы ищете, но в NIST есть словарь алгоритмов и структур данных . Это довольно полный словарь для структур данных и алгоритмов (doh), и его обычно удобно искать, когда я нахожу что-то, о чем я никогда раньше не слышал.

Vitor Py
источник
Ваш ответ в значительной степени именно то, что я ищу. Дополнительные очки за то, что бесплатно.
Мировой инженер
Забавно, что за последние несколько дней NIST DADS закрыли до дальнейшего уведомления из-за закрытия правительства США! А потом, когда услышали крики тысяч разработчиков сразу ...
Хайлем
11

Книга Скиена также является хорошим справочником: http://www.algorist.com/

Книга охватывает все, от фона до различных проблемных областей (структуры данных, поиск / сортировка, проблемы с графами, комбинации / перестановки / эвристики), и даже проблемы P против NP-полных проблем.

Особо актуальным разделом книги к этому вопросу является каталог из ~ 70-75 различных алгоритмов, типов входных данных, которые они обычно требуют, общее описание проблемы, которую решает конкретный алгоритм, и конкретные примеры приложений (например, В разделе о деревьях суффиксов обсуждается использование попыток и его применимость к подстроке и поиску). Там, где это возможно, автор также идентифицирует существующие реализации для различных распространенных языков (c, c ++, Java и некоторые другие.)

Джо
источник
Это самая близкая к энциклопедии алгоритмов, которую я могу придумать. Отличная книга!
Хараламбос Пасхалидес
8

Структура и интерпретация компьютерных программ и искусство компьютерного программирования - самые близкие из того, что я ищу.

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

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

Майкл Браун
источник
5
SICP - замечательная книга, но я не думаю, что это разумное предложение для тех, кто ищет «энциклопедию алгоритмов». SICP не пытается быть чем-то подобным. Кроме того, ОП пишет, что ACP «не кажется энциклопедическим, а скорее поучительным», поэтому должно быть ясно, что SICP - это не то, что он или она ищут.
Калеб
Отличная книга, но не энциклопедическая.
Хайлем
Я уверен, что я сказал, что это не энциклопедия, а хороший обзор алгоритмов. «Несмотря на то, что это не энциклопедия, это довольно хорошее покрытие большой территории в ограниченном пространстве». Да, это то, что я сказал.
Майкл Браун
8

Cormen, Leiserson, Rivest, Stein - «Введение в алгоритмы»

Введение в алгоритмы, более известное как CLRS, является стандартным учебником по алгоритмам во многих университетах. Он охватывает ряд алгоритмов для различных приложений, включая сортировку, поиск, теорию графов и базовые численные вычисления. Он также включает в себя подробное обсуждение обозначений Big O, Big Omega и Big Theta. Распространенная критика заключается в том, что он на самом деле не готовит человека для разработки новых алгоритмов, но как энциклопедия или словарь алгоритмов, его более чем достаточно.

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

- из комментариев @quanticle, ниже

Дмитрий Матвеев
источник
4
Можете ли вы расширить свой ответ, включив в него то, что в этой книге соответствует цели этого вопроса?
2
Введение в алгоритмы , более известное как CLRS, является стандартным учебником по алгоритмам во многих университетах. Он охватывает ряд алгоритмов для различных приложений, включая сортировку, поиск, теорию графов и базовые численные вычисления. Он также включает в себя подробное обсуждение обозначений Big O, Big Omega и Big Theta. Распространенная критика заключается в том, что он на самом деле не готовит человека для разработки новых алгоритмов, но как энциклопедия или словарь алгоритмов, его более чем достаточно.
квитанция
1
Я должен также отметить, что CLRS также дает советы о том, какой алгоритм использовать, а не просто представляет общий индекс алгоритмов и структур данных. Это полезно, когда у вас есть задача, которую вы хотите выполнить, и вам нужны советы о том, как лучше всего ее выполнить. Есть лучшие ресурсы, когда вы знаете, как вы хотите делать то, что вы делаете, и вам просто нужен псевдокод.
кв.
Совет Дмитрию: просто скопируйте комментарии @ Quanticle в текст ответа, чтобы сделать ваш ответ на 1000% более интересным.
nohat
5

В аспирантуре по физике мне очень понравились Numeric Recipes in C. Конечно, она не охватывает все алгоритмы, но дает отличные объяснения многим, которые невероятно полезны в науке:

http://www.nr.com/

В книге рассказывается, как решить:

Линейные уравнения

  1. Линейные уравнения
  2. Интерполяция и экстраполяция
  3. Интеграция функций
  4. Оценка функции
  5. Специальные функции, включая гамма-функцию, бета-функцию, факториалы
  6. Случайные числа - в том числе хорошее объяснение того, что это значит
  7. Алгоритмы сортировки
  8. Нахождение корней и нелинейных уравнений
  9. Минимизация и максимизация функций
  10. Eigensystems
  11. Быстрые преобразования Фурье
  12. БПФ и спектральный анализ
  13. Статистическое описание данных
  14. Моделирование данных
  15. Интегрирование обыкновенных дифференциальных уравнений
  16. Двухточечные краевые задачи
  17. Интегральные уравнения и обратная граничная теория
  18. Дифференциальные уравнения с частными производными
  19. «Другие» алгоритмы, такие как проверки CRC и сжатие данных

Так что все это очень математично, хорошо для ученых, а также для людей, разрабатывающих физические движки для игр. И это не только дает алгоритмы, но и объясняет, почему за ними можно использовать их правильно. Не ваш типичный код, а именно то, что вам нужно, когда вам это нужно.

Я сильно полагался на это, когда использовал метод наклонного симплекса в многомерном измерении (обход амебы) для анализа данных. В нем все еще есть следы от карандаша. Ах, хорошие времена!

Даниэль Уильямс PhD
источник
1
Можете ли вы расширить свой ответ, включив в него то, что в этой книге соответствует цели этого вопроса?
4

Если вы ищете «энциклопедию алгоритмов», было бы трудно ошибиться с энциклопедией алгоритмов . Я не могу сказать, что я прочитал это (за 399 долларов, это дешево для энциклопедии ), но реклама выглядит многообещающе:

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

Кто-то уже процитировал Стивена Скиена « Руководство по разработке алгоритмов» , но я не думаю, что кто-то еще упомянул связанный с ним веб-сайт Скины « Хранилище алгоритмов Stony Brook» . С веб-сайта:

Эта WWW-страница предназначена для того, чтобы служить исчерпывающим набором реализаций алгоритмов для более чем семидесяти наиболее фундаментальных проблем комбинаторных алгоритмов.

Книга - это больше, чем просто каталог известных алгоритмов; это также своего рода учебник (в лучшем смысле этого слова) о том, как решить, какой алгоритм использовать для наилучшего соответствия вашей проблеме и ситуации. Хранилище, с другой стороны, носит более энциклопедический характер. Он не обязательно содержит много подробностей о том, как реализовать каждый алгоритм самостоятельно, но он объясняет, что делает алгоритм и как он работает в целом, удобочитаемые термины, часто взятые из книги, и предоставляет ссылки на реальные реализации для каждого алгоритм.

Калеб
источник
2

Rosetta Code Wiki большая коллекция реализаций общих алгоритмов на нескольких языках. Это не совсем академично, но довольно информативно и интересно пролистывать.

Своими словами:

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

Его главное преимущество перед другими ресурсами (такими как Словарь алгоритмов и структур данных NIST ) состоит в том, что он позволяет вам взглянуть на несколько реализаций для разных языков. Что может быть полезно для различных целей (сравнение выразительности, проверка осуществимости на каком-либо языке и т. Д. И т. Д.).

Например, страница быстрой сортировки предоставляет (по состоянию на 2013-10-07) не менее 89 реализаций.

haylem
источник
Вы не могли бы объяснить больше о том, что он делает, и почему вы рекомендуете ответить на заданный вопрос? «Ответы только на ссылки» не очень приветствуются на Stack Exchange
gnat
@gnat: Обычно соглашаются, но чем это отличается от ответа «только для рефери»? Кроме того, я думаю, что «коллекция реализаций общих алгоритмов на нескольких языках» в значительной степени охватывает то, что он делает. Это так же (или так мало) подробно, как принятый ответ, если вы посмотрите достаточно близко :)
Хайлем
@gnat: в любом случае, добавил еще.
Хайлем
@AnnaLear: извините, я думаю, что ваше редактирование было совершенно правильным, чтобы держать мой пост коротким и в нужном русле, но было бы уместно поставить сравнение обратно в отношении изменений по запросу gnat.
Хайлем
0

Хотя есть прекрасные и неподвластные времени учебные книги на эту тему, я не думаю, что вы найдете такую ​​энциклопедию.

  • Энциклопедия по математике охватывает тысячелетия исследований. Алгоритмы, с другой стороны, почти не изучались в течение столетия (если говорить в более широком масштабе). Вся область компьютерных наук едва понятна всем, и большинство вещей все еще движется быстро. Если бы сейчас была энциклопедия, я думаю, вы могли бы выбросить 90% из окна через 10-20 лет. А из 10% стоимости хранения более половины было напечатано уже полвека назад. Обширные части справочника по математике будут обновлены через сто лет.

  • Математика чиста и самодостаточна. Это вряд ли относится к «области алгоритмов». На самом деле его вряд ли можно рассматривать как поле, потому что поле обычно работает в четко определенном проблемном пространстве, тогда как алгоритмы фактически работают только в более менее определенном пространстве решений.
    Так что, если кто-то собирается составить энциклопедию по алгоритмам, не очень понятно, что включать, если вы действительно хотите, чтобы она была всеобъемлющей. Теория графов? Линейная алгебра? Численный анализ?

ИМХО, прямо сейчас лучшим ресурсом, который выполняет роль энциклопедии, является «интернет» (вот). Смысл энциклопедии заключается в том, чтобы иметь индексируемое, всеобъемлющее хранилище знаний для поиска (по какой-то теме). Лично я нахожу и этот список, и этот список довольно подавляющим. Также в других ответах были связаны многочисленные превосходные базы данных алгоритмов.

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

back2dos
источник
0

Что касается существующих источников, я думаю, что Wikipedia - самая близкая вещь к тому, что вы ищете. Разумеется, для этой цели может быть полезно создать более определенный «шаблон алгоритма» в Википедии, но об этом стоит поговорить с редакторами Википедии, а не здесь.

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

veryfoolish
источник