Существует ли энциклопедия алгоритмов, похожих по стилю на « Справочник по математике»? Кажется полезным иметь их в одном месте. Я знаю, что искусство компьютерного программирования считается хорошим источником, но оно кажется не столько энциклопедическим, сколько поучительным.
Примечание модератора
Мы ищем длинные ответы, которые дают некоторое объяснение и контекст. Не просто перечислите книгу: объясните, почему вы рекомендуете книгу или ресурс. Ответы, которые ничего не объясняют, будут удалены. См. Хорошее Субъективное, Плохое Субъективное для получения дополнительной информации.
algorithms
Мировой инженер
источник
источник
Ответы:
Я не уверен, что это то, что вы ищете, но в NIST есть словарь алгоритмов и структур данных . Это довольно полный словарь для структур данных и алгоритмов (doh), и его обычно удобно искать, когда я нахожу что-то, о чем я никогда раньше не слышал.
источник
Книга Скиена также является хорошим справочником: http://www.algorist.com/
Книга охватывает все, от фона до различных проблемных областей (структуры данных, поиск / сортировка, проблемы с графами, комбинации / перестановки / эвристики), и даже проблемы P против NP-полных проблем.
Особо актуальным разделом книги к этому вопросу является каталог из ~ 70-75 различных алгоритмов, типов входных данных, которые они обычно требуют, общее описание проблемы, которую решает конкретный алгоритм, и конкретные примеры приложений (например, В разделе о деревьях суффиксов обсуждается использование попыток и его применимость к подстроке и поиску). Там, где это возможно, автор также идентифицирует существующие реализации для различных распространенных языков (c, c ++, Java и некоторые другие.)
источник
Структура и интерпретация компьютерных программ и искусство компьютерного программирования - самые близкие из того, что я ищу.
SICP проходит через общие структуры данных и алгоритмы. Хотя это и не энциклопедия, это довольно хороший способ охватить широкую полосу территории на ограниченном пространстве.
Что можно сказать об искусстве компьютерного программирования, чего еще не было. Будьте осторожны, когда поднимаете его, вы можете перейти к нему по определенной теме, и спустя часы вы поймете, что прочитали том от корки до корки. Это отличный способ действительно поднять ваше программирование на новый уровень.
источник
Cormen, Leiserson, Rivest, Stein - «Введение в алгоритмы»
источник
В аспирантуре по физике мне очень понравились Numeric Recipes in C. Конечно, она не охватывает все алгоритмы, но дает отличные объяснения многим, которые невероятно полезны в науке:
http://www.nr.com/
В книге рассказывается, как решить:
Линейные уравнения
Так что все это очень математично, хорошо для ученых, а также для людей, разрабатывающих физические движки для игр. И это не только дает алгоритмы, но и объясняет, почему за ними можно использовать их правильно. Не ваш типичный код, а именно то, что вам нужно, когда вам это нужно.
Я сильно полагался на это, когда использовал метод наклонного симплекса в многомерном измерении (обход амебы) для анализа данных. В нем все еще есть следы от карандаша. Ах, хорошие времена!
источник
Если вы ищете «энциклопедию алгоритмов», было бы трудно ошибиться с энциклопедией алгоритмов . Я не могу сказать, что я прочитал это (за 399 долларов, это дешево для энциклопедии ), но реклама выглядит многообещающе:
Кто-то уже процитировал Стивена Скиена « Руководство по разработке алгоритмов» , но я не думаю, что кто-то еще упомянул связанный с ним веб-сайт Скины « Хранилище алгоритмов Stony Brook» . С веб-сайта:
Книга - это больше, чем просто каталог известных алгоритмов; это также своего рода учебник (в лучшем смысле этого слова) о том, как решить, какой алгоритм использовать для наилучшего соответствия вашей проблеме и ситуации. Хранилище, с другой стороны, носит более энциклопедический характер. Он не обязательно содержит много подробностей о том, как реализовать каждый алгоритм самостоятельно, но он объясняет, что делает алгоритм и как он работает в целом, удобочитаемые термины, часто взятые из книги, и предоставляет ссылки на реальные реализации для каждого алгоритм.
источник
Rosetta Code Wiki большая коллекция реализаций общих алгоритмов на нескольких языках. Это не совсем академично, но довольно информативно и интересно пролистывать.
Своими словами:
Его главное преимущество перед другими ресурсами (такими как Словарь алгоритмов и структур данных NIST ) состоит в том, что он позволяет вам взглянуть на несколько реализаций для разных языков. Что может быть полезно для различных целей (сравнение выразительности, проверка осуществимости на каком-либо языке и т. Д. И т. Д.).
Например, страница быстрой сортировки предоставляет (по состоянию на 2013-10-07) не менее 89 реализаций.
источник
Хотя есть прекрасные и неподвластные времени учебные книги на эту тему, я не думаю, что вы найдете такую энциклопедию.
Энциклопедия по математике охватывает тысячелетия исследований. Алгоритмы, с другой стороны, почти не изучались в течение столетия (если говорить в более широком масштабе). Вся область компьютерных наук едва понятна всем, и большинство вещей все еще движется быстро. Если бы сейчас была энциклопедия, я думаю, вы могли бы выбросить 90% из окна через 10-20 лет. А из 10% стоимости хранения более половины было напечатано уже полвека назад. Обширные части справочника по математике будут обновлены через сто лет.
Математика чиста и самодостаточна. Это вряд ли относится к «области алгоритмов». На самом деле его вряд ли можно рассматривать как поле, потому что поле обычно работает в четко определенном проблемном пространстве, тогда как алгоритмы фактически работают только в более менее определенном пространстве решений.
Так что, если кто-то собирается составить энциклопедию по алгоритмам, не очень понятно, что включать, если вы действительно хотите, чтобы она была всеобъемлющей. Теория графов? Линейная алгебра? Численный анализ?
ИМХО, прямо сейчас лучшим ресурсом, который выполняет роль энциклопедии, является «интернет» (вот). Смысл энциклопедии заключается в том, чтобы иметь индексируемое, всеобъемлющее хранилище знаний для поиска (по какой-то теме). Лично я нахожу и этот список, и этот список довольно подавляющим. Также в других ответах были связаны многочисленные превосходные базы данных алгоритмов.
Поэтому, хотя вы не можете ожидать того же уровня качества, который вы ожидаете от энциклопедии, которая заполняет вашу книжную полку, вы получаете уровень своевременности, необходимый для компенсации молодости в той области, о которой вы хотите знать.
источник
Что касается существующих источников, я думаю, что Wikipedia - самая близкая вещь к тому, что вы ищете. Разумеется, для этой цели может быть полезно создать более определенный «шаблон алгоритма» в Википедии, но об этом стоит поговорить с редакторами Википедии, а не здесь.
Небольшое примечание об искусстве компьютерного программирования : когда оно будет завершено, оно должно включать «сводный» том, и хотя это не поможет вам сейчас, оно может быть примерно тем, что вы ищете. TAOCP энциклопедичен в том, что он охватывает, но он еще не завершен, и личность Кнута такова, что он не собирается включать вещи, если он не исследовал их всесторонне.
источник