Во-вторых, ответ, данный Генри, алгоритм в исходном вопросе фактически имеет полиномиально ограниченное время выполнения - если унарное кодирование используется для ввода!
Точнее, границы времени выполнения зависят не только от самого алгоритма, но и от используемой схемы кодирования. Рассмотрим следующий алгоритм в C-подобном синтаксисе.
INPUT: integer n
for (int i = 0; i < n; i++)
{
wait one second
}
По-видимому, алгоритму требуется n
секунд для завершения; время линейно в n
. Если вход кодируется с использованием унарного кодирования , количество времени линейно масштабируется по длине кодирования n
. Однако, если n
закодировано с использованием двоичного кодирования , количество времени масштабируется экспоненциально при длине кодирования n
(поскольку длина кодирования n
логарифмически масштабируется при значении n
) .
Короче говоря, утверждение о том, что алгоритм, о котором идет речь, является не полиномиальным без какой-либо дополнительной информации, неверно. Однако очевидно, что существует соглашение, что двоичное кодирование (или любая другая позиционная запись) используется, если не указано иное.
При этом я утверждаю, что зависимость времени выполнения, привязанного к схеме кодирования, обычно преподается немного неточно. Термин псевдополином также плавает вокруг.