Обычно мы называем алгоритм «хорошим алгоритмом», если его время выполнения является полиномиальным в худшем случае. Но в некоторых случаях (например, алгоритм Simplex), даже если наихудший случай алгоритма экспоненциальный, он может очень хорошо работать на практике.
Существуют ли (детерминированные) примеры для этой ситуации, кроме алгоритма Симплекс?
ds.algorithms
Arman
источник
источник
Ответы:
Современные алгоритмы SAT-решения способны решать большинство случаев достаточно быстро, хотя время наихудшего случая, разумеется, экспоненциальное. В этом случае, однако, практическая скорость является скорее результатом многолетней разработки алгоритма, а не одного элегантного алгоритма. Хотя я понял, что изучение предложений, основанное на конфликтах, вызвало значительный скачок производительности решателей SAT, более поздние улучшения часто достигаются благодаря умному использованию различных эвристик в алгоритмах.
источник
источник
Вывод типа Хиндли-Милнера является EXPTIME-полным, но в программах, которые обычно пишут люди, он довольно близок к линейному.
источник
let z = (let y = e in e') in e''
в противоположность чемlet y = e in let z = e' in e''
.Программа Брендана Маккея « Красавица» («Нет АВТОМорфизмов, да?») Решает проблему канонической маркировки графов (одновременно решая проблемы изоморфизма графов и автоморфизмов графов) и имеет экспоненциальную производительность в худшем случае (Миядзаки, 1996). Тем не менее, он работает очень быстро для большинства графов, особенно с несколькими автоморфизмами.
В частности, алгоритм начинается с разделения вершин по степени, а затем по степени между каждой частью. Когда этот процесс стабилизируется, необходимо сделать выбор, чтобы различить вершину в нетривиальной части, и это приводит к экспоненциальному поведению. В большинстве графиков глубина этой процедуры ветвления мала.
источник
Несколько алгоритмов для простых стохастических игр хорошо работают на практике, хотя они имеют экспоненциальное время выполнения в худшем случае. Конечно, эта проблема в некотором смысле связана с линейным программированием, хотя неизвестно, что это происходит за полиномиальное время.
источник
Есть алгоритм для нахождения смешанных равновесий Нэша, который похож на симплексный алгоритм для LP. (Я забыл название.) Это имеет экспоненциальную сложность наихудшего случая, но у меня есть смутное воспоминание, что он часто ведет себя хорошо на практике.
источник
Упаковка в бункер (много вариантов) - это проблема, сложность которой, как известно, NP-трудна:
http://en.wikipedia.org/wiki/Bin_packing_problem
Однако многие эвристики применительно к «практическим» версиям работают очень хорошо. Для одномерной упаковки в мусорное ведро некоторые из этих эвристик, например, в первую очередь; уменьшение первой подгонки; наиболее подходящий; наиболее подходящие убытки очень привлекательны для показа студентам. Студенты часто могут открыть для себя некоторые базовые эвристики.
источник
Алгоритм персистентности (происхождение от Edelsbrunner-Letscher-Zomorodian, с множеством изменений с тех пор) является наихудшим кубическим случаем, но, похоже, из экспериментов обычно работает в линейном времени.
источник