Чуть подробнее.
Сначала о полиномиальности - если время на некоторую обработку данных переменного размера зависит от этого размера, как полином какой-то степени - квадрат, или куб, например, то сложность этой обработки называют полиномиальной. Может быть и гораздо медленнее, например, экспоненциальное время, когда оно равно, к примеру -
, где
- размер данных. (Есть и ещё хуже варианты, но это уже детали.)
Так вот, все задачи, для решения которых есть полиномиальный алгоритм решения относятся к классу
- polynomial. Примеры таких задач - сортировка, решение системы линейных уравнений, умножение больших чисел.
Есть ещё класс задач, для которых такого алгоритма не известно, но есть хотя бы возможность за полиномиальное время проверить, что решение является именно решением, т.е. если мы каким либо образом быстро угадаем решение, то значит решим задачу за полиномиальное время, т.к. проверка полиномиальна. Такой класс задач назвали
- non-determenistic polynomial - негарантированно полиномиальные. Пример такой задачи привёл
Xaositect, ещё один пример - разложение на множители большого числа.
Итак, если для таких задач удастся придумать быстрый угадыватель, то эти задачи также окажутся полиномиальными, т.е. окажется
. А если не удастся, то
.
Вот это и есть главный вопрос теории алгоритмов.