Есть ли хорошие методы для этого? Я могу найти статьи с алгоритмами, но они обычно не показывают свои результаты вычислений с одними и теми же наборами задач, и год публикации двух статей обычно разный, поэтому они, скорее всего, будут использовать разное оборудование для решения задач.
Редактировать: Под проблемой я подразумеваю также конкретный размер проблемы, использование памяти и другие характеристики проблемы.
Что касается разницы в настройке, обычно у «хорошо известных» документов SOTA таких проблем нет. По крайней мере, это то, что я заметил в основном в своей области.
Если это так, то я предлагаю провести небольшое исследование в рамках статьи, охватывающее все результаты в различных условиях. (Пожалуйста, поправьте меня, если я ошибаюсь здесь).
Я думаю, у вас неправильное представление об эффективности алгоритма и его изучении. Хороший курс по алгоритмам и структурам данных должен исправить это.
Я предполагаю, что вы на самом деле имеете в виду алгоритм , а не просто полезную компьютерную программу. Это не одно и то же. Некоторые полезные программы, хотя они и могут содержать алгоритмы, в своей производительности доминируют над другими неалгоритмическими проблемами. Производительность там действительно может быть привязана к определенному типу набора данных, для которого небольшие отклонения приводят к совершенно разной производительности.
Алгоритмы оцениваются как хорошие или плохие на основе теоретических соображений, а не на основе выборочных данных. Теоретические меры делают их независимыми от оборудования в определенных пределах. Быстрый алгоритм будет работать быстрее, чем медленный, на разных компьютерах с похожей архитектурой (см. предостережения ниже). Некоторые алгоритмы (пузырьковая сортировка) всегда плохи. Другие всегда лучше (сортировка выбором). Третьи «всегда» хороши (сортировка слиянием, но см. предостережения).
Таким образом, идея «другого оборудования» — отвлекающий маневр, при условии, что оборудование имеет схожую архитектуру.
Предостережения, и их довольно много.
Некоторым алгоритмам требуется много памяти (быстрая сортировка большого набора), поскольку они сильно рекурсивны. Если на машине недостаточно быстрой памяти, то быстрая сортировка большого набора данных будет ограничена независимой эффективностью системы памяти.
Некоторые «медленные» алгоритмы хорошо работают с небольшими наборами данных и могут быть предпочтительнее «быстрых» алгоритмов, если ожидается, что набор данных будет небольшим. Но эти вещи известны и обычно включаются в работающее программное обеспечение. Например, при быстрой сортировке после того, как «разделение» приведет к сегменту размером 10 или около того, для завершения сортировки вступит в действие квадратичный алгоритм. Но это всего лишь хорошая разработка программного обеспечения, и оно использует известные теоретические результаты для различных вариантов.
Однако, если архитектура машины резко изменится (как GPU отличается от CPU), то и игра изменится, и некоторые алгоритмы, быстрые на одном, будут медленнее на другом. Например, все еще сортируя вещи, если архитектура делает сравнения «бесплатными», тогда алгоритм, который использует множество сравнений, а не перестановок, будет предпочтительнее для этой архитектуры . Но, опять же, это основано на теоретических соображениях, которые измеряют различные виды операций, требуемых алгоритмом.
Итак, чтобы ответить на ваш вопрос, вам нужно взглянуть на теоретические меры, и они обычно предоставляются авторами.
Еще одно предостережение. Есть некоторые прикладные задачи, которые довольно плохо структурированы и (пока) не поддаются теоретическому анализу, принятому выше. Возможно, здесь присутствует некий хаос. Для них в настоящее время могут потребоваться некоторые эмпирические измерения. Но некоторые из этих проблем также могут побудить людей изобретать новые архитектуры, способные эффективно справляться с этими проблемами. Но такого же рода проблемы также побуждают теоретиков изобретать новые алгоритмы, поддающиеся общему анализу эффективности. Но результаты, скорее всего, будут представлены в теоретическом плане, а не в таймингах на конкретном железе. Вероятно, это то, что вы видите. И, надеюсь, часть их анализа включает ограничения на то, когда можно ожидать, что алгоритм будет вести себя хорошо.
СерыйЛитература
Джон Кастер
пользователь1271772
Давидбак