WikiDer > Функция Аккермана

Ackermann function

В теория вычислимости, то Функция Аккермана, названный в честь Вильгельм Аккерманн, является одним из самых простых[1] и самые ранние обнаруженные примеры общий вычислимая функция это не примитивно рекурсивный. Все примитивные рекурсивные функции являются тотальными и вычислимыми, но функция Аккермана показывает, что не все итоговые вычислимые функции являются примитивно рекурсивными. После публикации Аккермана[2] его функции (которая имела три неотрицательных целочисленных аргумента) многие авторы модифицировали ее для различных целей, так что сегодня «функция Аккермана» может относиться к любому из многочисленных вариантов исходной функции. Одна распространенная версия, два аргумента Функция Аккермана – Петера, определяется следующим образом для неотрицательных целых чисел м и п:

Его ценность быстро растет даже при небольших затратах. Например, А(4, 2) является целым числом из 19729 десятичных цифр[3] (эквивалент 265536−3 или 22222−3).

История

В конце 1920-х годов математики Габриэль Судан и Вильгельм Аккерманн, студенты Дэвид Гильберт, изучали основы вычислений. И Судан, и Аккерман приписываются[4] с открытием общий вычислимые функции (называемые просто "рекурсивными" в некоторых ссылках), которые не являются примитивно рекурсивный. Судан опубликовал менее известные Функция Судана, а вскоре после этого и независимо, в 1928 году, Аккерман опубликовал свою функцию (греческая буква фи). Функция трех аргументов Аккермана, , определяется так, что при п = 0, 1, 2, он воспроизводит основные операции добавление, умножение, и возведение в степень в качестве

и для п > 2 он расширяет эти базовые операции таким образом, который можно сравнить с гипероперации:

(Помимо исторической роли полностью вычислимой, но не примитивно-рекурсивной функции, исходная функция Аккермана расширяет основные арифметические операции за пределы возведения в степень, хотя и не так легко, как варианты функции Аккермана, специально разработанные для эта цель - например, Гудштейна гипероперация последовательность.)

В На бесконечности,[5] Дэвид Гильберт предположил, что функция Аккермана не является примитивно рекурсивной, но именно Аккерман, личный секретарь Гильберта и бывший студент, фактически доказал эту гипотезу в своей статье О построении Гильберта действительных чисел.[2][6]

Рожа Петер[7] и Рафаэль Робинсон[8] позже разработал версию функции Аккермана с двумя переменными, которая стала предпочтительной для многих авторов.

Обобщенный последовательность гиперопераций, например , также является версией функции Аккермана.[9]

В 1963 г. R.C. Бак основанный на интуитивно понятном варианте с двумя переменными (F[10]) на последовательность гиперопераций:[11]

.

По сравнению с большинством других версий функция Бака не имеет несущественных смещений:

Определение и свойства

Первоначальная функция трех аргументов Аккермана определено рекурсивно следующим образом для неотрицательных целых чисел м, п, и п:

Из различных версий с двумя аргументами вариант, разработанный Петером и Робинсоном (называемый некоторыми авторами «функцией Аккермана»), определен для неотрицательных целых чисел. м и п следующее:

Может быть не сразу очевидно, что оценка всегда заканчивается. Однако рекурсия ограничена, потому что в каждом рекурсивном приложении либо м уменьшается, или м остается прежним и п уменьшается. Каждый раз, когда п достигает нуля, м уменьшается, поэтому м в конечном итоге тоже достигает нуля. (Выражаясь более технически, в каждом случае пара (м, п) уменьшается в лексикографический порядок на парах, что является хороший порядокточно так же, как упорядочивание одиночных неотрицательных целых чисел; это означает, что нельзя идти вниз по порядку бесконечно много раз подряд.) Однако, когда м уменьшается, нет верхней границы того, насколько п может увеличиваться - и часто значительно увеличивается.

Функция Петера-Аккермана также может быть выражена по отношению к различным другим версиям функции Аккермана:

за
следовательно
за .
(п = 1 и п = 2 будет соответствовать А(м, −2) = −1 и А(м, −1) = 1, которые логично можно было бы добавить.)

Для малых значений м как 1, 2 или 3, функция Аккермана растет относительно медленно относительно п (в большинстве экспоненциально). За м ≥ 4однако растет гораздо быстрее; четное А(4, 2) около 2×1019728, и десятичное разложение А(4, 3) очень велика по любым типичным меркам.

Интересным аспектом функции (Петера-) Аккермана является то, что единственная арифметическая операция, которую она когда-либо использует, - это сложение 1. Ее быстрорастущие возможности основаны исключительно на вложенной рекурсии. Это также означает, что время его работы, по крайней мере, пропорционально его производительности, и поэтому оно также чрезвычайно велико. На самом деле, в большинстве случаев время работы намного больше, чем результат; Смотри ниже.

Версия с одним аргументом ж(п) = А(п, п) что увеличивает оба м и п в то же время затмевает каждую примитивную рекурсивную функцию, включая очень быстрорастущие функции, такие как экспоненциальная функция, факториальная функция, много- и сверхфакторный функции и даже функции, определенные с использованием нотации Кнута со стрелкой вверх (кроме случаев, когда используется индексированная стрелка вверх). Видно, что ж(п) примерно сопоставимо с жω(п) в быстрорастущая иерархия. Этот экстремальный рост можно использовать, чтобы показать, что ж, который, очевидно, вычислим на машине с бесконечной памятью, такой как Машина Тьюринга и так вычислимая функция, растет быстрее, чем любая примитивно рекурсивная функция, и поэтому не является примитивно рекурсивной.

В категории с экспоненты, используя изоморфизм (в информатике это называется карри), функция Аккермана может быть определена посредством примитивной рекурсии по функционалам более высокого порядка следующим образом:

куда S (п) = п + 1 это обычный функция преемника а Iter обозначает функциональная сила оператор, также определяемый примитивной рекурсией:

Функция определенное таким образом согласуется с функцией Аккермана определено выше: .

Количество рекурсий до возвращения Аккермана (3,3)


Примеры расширений

Чтобы увидеть, как функция Аккермана так быстро растет, полезно расширить некоторые простые выражения, используя правила из исходного определения. Например, можно полностью оценить следующим образом:

Чтобы продемонстрировать, как Результат вычислений состоит из многих шагов и большого количества:

Таблица значений

Вычисление функции Аккермана можно переформулировать в терминах бесконечной таблицы. Сначала разместите натуральные числа в верхнем ряду. Чтобы определить число в таблице, возьмите число сразу слева. Затем используйте это число, чтобы найти необходимое число в столбце, заданном этим числом, и на одну строку вверх. Если слева от него нет числа, просто посмотрите на столбец с заголовком «1» в предыдущей строке. Вот небольшая верхняя левая часть таблицы:

Ценности А(мп)
п
м
01234п
012345
123456
2357911
35132961125
413


65533


265536 − 3










565533

6
м

Числа здесь, которые выражаются только с рекурсивным возведением в степень или Стрелы кнута очень большие и занимают слишком много места для записи в виде простых десятичных цифр.

Несмотря на большие значения, встречающиеся в этом раннем разделе таблицы, были определены некоторые даже большие числа, например Число Грэма, который нельзя записать каким-либо малым числом стрел Кнута. Это число создается с помощью техники, аналогичной рекурсивному применению функции Аккермана к самому себе.

Это повторение приведенной выше таблицы, но значения заменены соответствующим выражением из определения функции, чтобы четко показать шаблон:

Ценности А(мп)
п
м
01234п
00 + 11 + 12 + 13 + 14 + 1п + 1
1А(0, 1)А(0, А(1, 0))
= А(0, 2)
А(0, А(1, 1))
= А(0, 3)
А(0, А(1, 2))
= А(0, 4)
А(0, А(1, 3))
= А(0, 5)
А(0, А(1, п−1))
2А(1, 1)А(1, А(2, 0))
= А(1, 3)
А(1, А(2, 1))
= А(1, 5)
А(1, А(2, 2))
= А(1, 7)
А(1, А(2, 3))
= А(1, 9)
А(1, А(2, п−1))
3А(2, 1)А(2, А(3, 0))
= А(2, 5)
А(2, А(3, 1))
= А(2, 13)
А(2, А(3, 2))
= А(2, 29)
А(2, А(3, 3))
= А(2, 61)
А(2, А(3, п−1))
4А(3, 1)А(3, А(4, 0))
= А(3, 13)
А(3, А(4, 1))
= А(3, 65533)
А(3, А(4, 2))А(3, А(4, 3))А(3, А(4, п−1))
5А(4, 1)А(4, А(5, 0))А(4, А(5, 1))А(4, А(5, 2))А(4, А(5, 3))А(4, А(5, п−1))
6А(5, 1)А(5, А(6, 0))А(5, А(6, 1))А(5, А(6, 2))А(5, А(6, 3))А(5, А(6, п−1))

Доказательство того, что функция Аккермана не является примитивно рекурсивной

В некотором смысле функция Аккермана растет быстрее, чем любая другая. примитивная рекурсивная функция и поэтому сам по себе не является примитивно рекурсивным.

В частности, показано, что каждой примитивной рекурсивной функции существует неотрицательное целое число такой, что для всех неотрицательных целых чисел ,

Как только это установлено, следует, что сам по себе не является примитивно рекурсивным, поскольку в противном случае приведет к противоречию .

Доказательство[12] происходит следующим образом: определить класс всех функций, которые растут медленнее, чем функция Аккермана

и показать, что содержит все примитивные рекурсивные функции. Последнее достигается показом, что содержит константные функции, функцию-последователь, функции проекции и что он закрыт при операциях композиции функций и примитивной рекурсии.

Обратный

Поскольку функция  ж(п) = А(п, п) рассмотренный выше растет очень быстро, его обратная функция, ж−1, растет очень медленно. Этот обратная функция Аккермана ж−1 обычно обозначается α. Фактически, α(п) меньше 5 для любого практического размера ввода п, поскольку А(4, 4) находится в порядке .

Эта инверсия появляется во времени сложность некоторых алгоритмы, такой как непересекающаяся структура данных и Chazelleалгоритм для минимальные остовные деревья. Иногда в этих параметрах используются исходная функция Аккермана или другие варианты, но все они растут с одинаковой скоростью. В частности, некоторые модифицированные функции упрощают выражение, удаляя −3 и аналогичные члены.

Двухпараметрическая вариация обратной функции Аккермана может быть определена следующим образом, где это функция пола:

Эта функция возникает в результате более точного анализа упомянутых выше алгоритмов и дает более точные временные рамки. В структуре данных с непересекающимся набором, м представляет количество операций, в то время как п представляет количество элементов; в алгоритме минимального остовного дерева, м представляет количество ребер, а п представляет количество вершин. Несколько разных определений α(м, п) существовать; Например, бревно2 п иногда заменяется на п, а функцию пола иногда заменяют потолок.

В других исследованиях может быть определена функция, обратная той, где m установлено на константу, так что обратная функция применяется к конкретной строке. [13]

Функция, обратная функции Аккермана, является примитивно рекурсивной.[14]

Использовать как эталон

Функция Аккермана, благодаря своему определению в терминах чрезвычайно глубокой рекурсии, может использоваться в качестве эталона компиляторвозможность оптимизировать рекурсию. Первое опубликованное использование функции Акермана таким образом было в 1970 году Драгоу Вайда.[15] и почти одновременно в 1971 году Ингве Сундблад.[16]

Основополагающую статью Сундблада подхватил Брайан Вичманн (соавтор Тест точильного камня) в трилогии статей, написанных между 1975 и 1982 годами.[17][18][19]

Смотрите также

Рекомендации

  1. ^ Монин и Хинчи 2003, п. 61.
  2. ^ а б Акерманн 1928 г..
  3. ^ "Десятичное разложение A (4,2)". kosara.net. 27 августа 2000 г. Архивировано с оригинал 20 января 2010 г.
  4. ^ Калуд, Маркус и Теви, 1979.
  5. ^ Гильберт 1926, п. 185.
  6. ^ ван Хейеноорт 1967.
  7. ^ Петер 1935.
  8. ^ Робинсон 1948.
  9. ^ Ричи 1965, п. 1028.
  10. ^ с обратным порядком параметров
  11. ^ Бак 1963.
  12. ^ Ву, Чи (17 декабря 2009 г.). «Функция Аккермана не является примитивно рекурсивной | planetmath.org». planetmath.org. Архивировано из оригинал на 2013-05-09.
  13. ^ Петти 2002.
  14. ^ Матос 2014.
  15. ^ Вайда 1970.
  16. ^ Сундблад 1971.
  17. ^ Wichmann 1976.
  18. ^ Wichmann 1977.
  19. ^ Wichmann 1982.

Библиография

внешняя ссылка