На ваш вопрос есть два основных ответа:
В теории сложности есть нечто большее, чем в языках, например, классы функций, арифметическая сложность, а также подрайоны алгоритмов аппроксимации и неприемлемости.
Исторические причины: одна из основных статей в теории вычислимости была посвящена проблеме Энтшайдунгса Гильберта (форма проблемы остановки).
К сожалению, я не знаю много о последнем, но позвольте мне остановиться на первом.
Сложность за пределами языков
Каждый класс сложности вычислений поставляется со связанным классом функций . Например, класс P всех задач, разрешимых за полиномиальное время, связан с FP, классом всех функций, вычислимых за полиномиальное время. FP имеет важное значение , так как он используется для определения NP-твердость: язык является NP-трудной , если для каждого языка в НП есть функция в FP , такие , что тогда и только тогда . Другой класс сложности функций, #P , связан с так называемой полиномиальной иерархией через теорему Тоды .M f M x ∈ M f M ( x ) ∈ LLMfMx∈MfM(x)∈L
Арифметическая сложность схемы (или теория алгебраической сложности ) имеет дело со сложностью вычисления различных многочленов. Важными классами сложности здесь являются VP и VNP, а геометрическая теория сложности является важным проектом, пытающимся разделить VP и VNP (а затем и P и NP) с использованием алгебраической геометрии и теории представлений.
Другим важным примером алгебраической сложности является быстрое умножение матриц. Здесь основной вопрос заключается в том, как быстро мы можем умножить две матрицы ? Подобные вопросы спрашивают, как быстро мы можем умножать целые числа, как быстро мы можем проверять целые числа на простоту (это проблема решения!) И как быстро мы можем вычислять целые числа.
Выпуклая оптимизация имеет дело с задачами оптимизации, которые могут быть решены (или почти решены) эффективно. Примерами являются линейное программирование и полуопределенное программирование, оба из которых имеют эффективные алгоритмы. Здесь нас интересует как оптимальное, так и само оптимальное решение. Поскольку часто существует более одного оптимального решения, вычисление оптимального решения не всегда представляется проблемой решения.
Аппроксимируемость - это область, которая изучает, насколько хорошее приближение можно получить для задачи оптимизации за полиномиальное время. Рассмотрим, к примеру, классическую проблему Set Cover: учитывая набор множеств, сколько из них нам нужно, чтобы охватить всю вселенную? Найти оптимальное число сложно с NP, но, возможно, можно вычислить приближение? Алгоритмы аппроксимации - это подрайон, изучающий алгоритмы для вычисления аппроксимаций, в то время как не приближаемость изучает пределы алгоритмов аппроксимации. В частном случае Set Cover у нас есть алгоритм, дающий аппроксимацию (жадный алгоритм), и NP-сложнее сделать что-то лучше.lnn