Я не верю, что такой список существует.Огромное количество известных алгоритмов и структур данных ошеломляет, и все время разрабатываются новые.Более того, многие из этих алгоритмов и структур данных являются специализированными, что означает, что даже если бы у вас был список перед вами, было бы трудно узнать, какие из них применимы для конкретных проблем, которые вы пытались решить.
Другая проблема с таким списком заключается в том, как количественно оценить эффективность.Если бы вы должны были ранжировать алгоритмы с точки зрения асимптотической сложности (big-O), то вы могли бы в конечном итоге поставить некоторые алгоритмы и структуры данных, которые асимптотически оптимальны, но неосуществимо медленны на небольших входах, перед известными алгоритмамибыть быстрым для практических случаев, но не может быть теоретически совершенным.В качестве примера рассмотрим поиск алгоритма медианы медиан для линейной статистики временного порядка, который имеет такой огромный постоянный фактор, что другие алгоритмы имеют тенденцию быть намного лучше на практике.Или рассмотрим быструю сортировку, которая в худшем случае равна O (n 2 ), но на практике имеет среднюю сложность O (n lg n) и на намного быстрее, чем другие алгоритмы сортировки.
С другой стороны, если бы вы попытались перечислить алгоритмы по эффективности во время выполнения, этот список мог бы ввести в заблуждение.Эффективность во время выполнения зависит от ряда факторов, которые зависят от машины и ввода (таких как локальность, размер ввода, форма ввода, скорость машины, архитектура процессора и т. Д.). Как правило, это может быть полезно-просто, но во многих случаях вас могут ввести в заблуждение числами, чтобы выбрать один алгоритм, когда другой намного превосходит.
Существует также сложность реализации, которую следует учитывать.Многие алгоритмы существуют только в статьях или имеют справочные реализации, которые не оптимизированы или написаны на языке, который не является тем, что вы ищете.Если вы найдете алгоритм Святого Грааля, который делает именно то, что вы хотите, но не реализуете его, может быть невероятно сложно кодировать и отлаживать вашу собственную версию.Например, если бы не было преобладания реализаций красного / черного дерева, думаете ли вы, что сможете написать его самостоятельно?Как насчет кучи Фибоначчи?Или (из личного опыта) деревья Ван Эмде Боаса?Часто может быть хорошей идеей выбрать более простой алгоритм, который «достаточно хорош», но который легко реализовать в гораздо более сложном алгоритме.
Короче, я хотел бы, чтобы существовала такая таблица, которая действительно имела бы все этоинформация, но, практически говоря, я сомневаюсь, что это может быть построено таким образом, что это полезно.Ссылки на Википедию из комментариев @ hammar на самом деле довольно хороши, но лучший способ узнать, какие алгоритмы и структуры данных использовать на практике, - это попробовать их на практике.