Мы можем абсолютно доказать такие вещи.
Многие задачи имеют тривиальные нижние границы, например, нахождение минимума из набора из чисел (которые никоим образом не отсортированы / не структурированы) занимает не менее Ω ( n ) времени. Доказательство этого простое: гипотетический алгоритм, который выполняется за o ( n ) время, не может проверить все числа на входе. Таким образом, если мы запустили алгоритм на каком-либо входе, мы могли бы заметить, что он никогда не проверял определенный элемент ввода. Изменяя этот элемент до минимума, мы можем заставить алгоритм потерпеть неудачу.NΩ ( n )o ( n )
Менее тривиальной нижней границей является нижняя граница для сортировки в модели, основанной на сравнении. Доказательство этого заключается в следующем: с учетом ввода n чисел существует n ! возможные выходы (вход может быть любой перестановкой отсортированного списка, поэтому выход также может быть любой перестановкой ввода). Если мы ограничены только выполнением сравнений, то нашему алгоритму (в среднем) необходимо выполнить как минимум log 2 ( n ! ) = Ω ( n log n ) сравнений, чтобы иметь возможность дать nΩ ( n logн )Nн !журнал2( n ! ) = Ω ( n logн )разные выходы.н !
Нижние границы могут быть еще сильнее. Существует несколько проблем (в частности, трудные задачи), для которых существует экспоненциальная нижняя оценка. Проблемы в этом классе включают вычисление оптимальных стратегий для таких игр, как (обобщенные) шахматы, шашки и го. Доказательством этого является теорема об иерархии времени , в которой говорится (с некоторыми ограничениями на f ):ЕИкспTяMЕе
Для данной функции существует вычислительная задача, которая может быть решена за время O ( f ( n ) ), но не может быть решена за время o ( f ( n )еO ( f( н ) ).o ( f( н )журналN)
Таким образом, в принципе, если вы можете думать о функции существует проблема, которая требует столько времени для ее решения.е
Наконец, еще один способ не обязательно доказать нижнюю границу времени, но что-то еще более сильное, показывает неразрешимость проблемы (например, остановка, переписка).
С другой стороны, у Райана Уильямса есть хорошая статья (и речь, которую я слышал пару раз) под названием « Алгоритмы для схем и схемы для алгоритмов» , в которой он утверждает, что нахождение нижних границ и нахождение алгоритмов не являются принципиально что отличается. Например, он приводит доказательство неразрешимости проблемы остановки как пример алгоритма (универсальной машины Тьюринга), который используется именно для доказательства нижней границы (неразрешимости).
источник
Однако в этом вопросе есть пункт, который требует еще нескольких замечаний относительно нижней границы (или границ сложности в целом).
На самом деле выбор того, что является одним вычислительным шагом, не имеет значения, поскольку вычислительные шаги могут рассматриваться как имеющие постоянную верхнюю границу (и нижнюю границу). Результат сложности будет таким же, так как он определен с точностью до константы. Принятие 3 сравнений в качестве единичных операций или только одного, не имеет значения.
То же самое относится и к размеру данных, который служит ссылкой для оценки стоимости вычислений. Принимая одно целое или два целых в качестве единицы размера не имеет значения.
Тем не менее, два варианта должны быть связаны.
Вопрос о том, можно ли считать, что операция имеет единичную стоимость, тесно связан с тем, какие данные можно считать имеющими размер единицы. И это зависит от того, какой уровень абстракции вы выберете для своей модели вычислений.
источник