Это зависит от контекста. В теоретической информатике обычно каждый алгоритм за полиномиальное время считается «эффективным». В алгоритмах аппроксимации, например, время выполнения будет считаться эффективным, даже если на практике его нельзя будет использовать при любом разумном значении . Алгоритм для SAT, который выполняется в был бы удивительным прорывом. ϵ n 2 100N1 / ϵ1 / ϵεN2100
В классической алгоритмике, т. Е. Алгоритмах 80-х и ранее, время выполнения ниже или около того (умножение матрицы, согласование минимальных затрат, потоки, линейное программирование) считается эффективным. Я бы сказал, что они все еще считаются эффективными. Конечно, алгоритм не считается эффективным, если известен алгоритм , как, например, для сортировки.n 2 n log nN3N2журнал nN
В настоящее время существует тенденция к сублинейным алгоритмам или потоковым алгоритмам, способным обрабатывать терабайты данных. Попробуйте использовать матричное умножение, чтобы вычислить рейтинг страниц всех страниц в индексе Google. Это не сработает.
Конечно, хотя это и полезно, асимптотическое время выполнения алгоритма не рассказывает всей истории. Существуют алгоритмы с хорошей асимптотической средой выполнения, но такие огромные константы, что их эффективно использовать нельзя. Когда-либо. Липтон называет их Галактическими Алгоритмами . Роберт Седжвик даже заявляет, что наихудшие границы «часто бесполезны для предсказания, часто бесполезны для гарантий» и «анализ наихудшего случая бесполезен для предсказания производительности» в своем выступлении «Возвращение науки в информатику» .