Чи є енциклопедія алгоритмів? [зачинено]


34

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

Примітка модератора

Ми шукаємо довгі відповіді, які дають певні пояснення та контекст. Не просто перераховуйте книгу: поясніть, чому ви рекомендуєте книгу чи ресурс. Відповіді, які нічого не пояснюють, буде видалено. Додаткову інформацію див. У розділі Добрий суб’єктив, поганий суб’єктив .



Трохи Гуглінг пройшов би довгий шлях до відповіді на це питання. По крайней мере, він подає список хороших кандидатів, які ви могли б потім використати, щоб задати більш сфокусований питання.
Калеб

Відповіді:


41

Я не впевнений, що це те, що ви шукаєте, але NIST має Словник алгоритмів та структур даних . Це досить вичерпний словник для структур даних і алгоритмів (дох), і, як правило, добре розмістити його, коли я знайду щось, про що раніше не чув.


Ваша відповідь майже точно те, що я шукаю. Додаткові бали за безкоштовно.
Світовий інженер

Найсмішніше , що за останні кілька днів NIST DADS закрито до подальшого повідомлення через відключення уряду США! І тоді, коли почули тисячі розробників криком одразу ...
haylem

11

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

Книга охоплює все, починаючи від фону, через різні проблемні області (структури даних, пошук / сортування, проблеми з графіком, комбінації / перестановки / евристики) і навіть проблеми, пов'язані з P проти NP-повних.

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


Це найближче до енциклопедії алгоритму, про який я можу придумати. Відмінна книга!
Charalambos Paschalides

8

Структура та інтерпретація комп’ютерних програм та мистецтво комп’ютерного програмування - це найближче, що я бачив, до чого ви прагнете.

SICP проходить через загальні структури даних та алгоритми. Хоча це не енциклопедично, воно досить добре охоплює широку територію з обмеженою кількістю простору.

Що можна сказати про мистецтво комп'ютерного програмування, яке ще не було. Будьте обережні, коли ви підбираєте його, ви можете перейти до нього на певну тему і через години зрозумієте, що ви прочитали томи від обкладинки до обкладинки. Це прекрасний спосіб по-справжньому підняти програмування на наступний рівень.


5
SICP - це чудова книга, але я не думаю, що це розумна пропозиція для того, хто шукає "енциклопедію алгоритмів". SICP не намагається бути подібним. Крім того, ОП написала, що АКТ "не здається настільки енциклопедичним, як повчальним", тому повинно бути зрозуміло, що SICP - це не те, чого він або вона шукає.
Калеб

Чудова книга, але не енциклопедична.
haylem

Досить впевнений, я сказав, що це не енциклопедично, але дає гарну екскурсію алгоритмів. "Хоча це не енциклопедично, це досить добре, що охоплює широку територію з обмеженою кількістю простору". Так, це я сказав.
Майкл Браун

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

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

http://www.nr.com/

Книга висвітлює, як вирішити:

Лінійні рівняння

  1. Лінійні рівняння
  2. Інтерполяція та екстраполяція
  3. Інтеграція функцій
  4. Оцінка функції
  5. Спеціальні функції, включаючи гамма-функції, бета-функції, фабрики
  6. Випадкові числа - включаючи добре пояснення того, що це означає
  7. Алгоритми сортування
  8. Знаходження коренів та нелінійних рівнянь
  9. Мінімізація та максимізація функцій
  10. Власні системи
  11. Швидкі перетворення Фур'є
  12. FFT та спектральний аналіз
  13. Статистичний опис даних
  14. Моделювання даних
  15. Інтегральне значення звичайних диференціальних рівнянь
  16. Дві точки крайових задач
  17. Інтегральні рівняння та зворотна гранична торія
  18. Часткові диференціальні рівняння
  19. "Інші" алгоритми, такі як перевірка CRC та стиснення даних

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

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


1
Чи можете ви розширити свою відповідь, щоб включити, що про цю книгу відповідає цілі цього питання?

4

Якщо ви шукаєте "енциклопедію алгоритмів", було б важко помилитися з " Енциклопедією алгоритмів" . Я не можу сказати, що я прочитав це (за 399 доларів, це дешево для енциклопедії ), але розмиття виглядає багатообіцяючим:

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

Хтось уже цитував посібник з дизайну алгоритму Стівена Скіени , але я не думаю, що ще ніхто не згадував про асоційований веб-сайт Скіни - сховище алгоритмів «Стоні Брук» . З веб-сайту:

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

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


2

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

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

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

Основна його перевага перед іншими ресурсами (на зразок Словника алгоритмів та структур даних NIST ) полягає в тому, що він дозволяє переглядати кілька реалізацій для різних мов. Що може бути корисним для різних цілей (порівняння виразності, перевірка доцільності в тій чи іншій мові тощо).

Наприклад, сторінка QuickSort містить (станом на 10.10.2013) щонайменше 89 реалізацій.


Ви б не хотіли пояснити детальніше про те, що це робить, і чому ви рекомендуєте це відповісти на поставлене запитання? "Відповіді лише на посилання" не дуже вітаються на Stack Exchange
gnat

@gnat: Зазвичай погоджуюся, але чим це відрізняється від відповіді "лише для перегляду книг"? Крім того, я думаю, що "колекція реалізацій загальних алгоритмів на декількох мовах" охоплює майже все, що вона робить. Це також настільки ж (або настільки ж мало) детально, як прийнята відповідь, якщо ви будете виглядати досить близько :)
haylem

@gnat: все одно, додав ще трохи.
haylem

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

0

Поки є чудові та позачасові повчальні книги на цю тему, я навряд чи думаю, ви знайдете таку енциклопедію.

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

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

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

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


0

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

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

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