Когда Алан Тьюринг обнаружил компьютер, предлагалось несколько моделей для этого компьютера. Тьюринг доказал, что некоторые (3) из этих моделей могут моделировать друг друга и вычислять функцию Аккермана, тогда как другие модели могут моделировать друг друга, но не функцию Аккермана (поэтому они не могли моделировать 3). Поэтому эти 3 модели (машина Тьюринга, фон Нейман и одна, которую я не знаю) были выбраны в качестве архитектуры для компьютера. Это не означает, что функция Аккермана - это предел компьютера, но я полагаю, что это сложная наука. Мне неизвестны какие-либо вычислимые функции, которые растут быстрее, чем функция Аккермана.
Я не думаю, что есть практическая проблема, которая соответствует вашему вопросу, но, возможно, мы сможем ее решить. Мы должны наложить ограничения на вход, хотя. Поскольку мы не можем использовать O (n), мы не можем проверить весь ввод. На самом деле, мы даже не можем проверить длину ввода, так как это будет O (log n). Итак, нам нужно в качестве первого параметра представить длину остальной части входных данных, например, c, так что Ackermann (c) - это длина входных данных. Поскольку это также не подходит, мы требуем в качестве первого значения на нашем входе параметр c, так что bb (c) примерно равна длине входа, где bb - функция занятого бобра. Эта функция не вычислима, но bb (c), безусловно, существует. Затем алгоритм выглядит так:
for (int i=0; i<c; i++) {
if (input[i] == null) {
return false;
}
}
return true;
Цель алгоритма состоит в том, чтобы проверить, что если c является обратным к bb, то если входная длина больше, чем bb (c).
Если есть вычислимая функция, которая растет быстрее, чем функция Аккермана, я думаю, что мы можем использовать ее обратно, чтобы создать алгоритм, который отвечает на ваш вопрос на любом входе.