Funkcja Ackermanna - Ackermann function
W teorii obliczalności The Funkcja Ackermanna , nazwany na cześć Wilhelma Ackermanna , jest jednym z najprostszych i najwcześniej odkrytych przykładów całkowitej funkcja obliczalna , który nie jest prymitywny rekurencyjny . Wszystkie pierwotne funkcje rekurencyjne są całkowite i obliczalne, ale funkcja Ackermanna ilustruje, że nie wszystkie funkcje całkowite obliczalne są prymitywne rekurencyjne. Po opublikowaniu przez Ackermanna jego funkcji (która miała trzy nieujemne liczby całkowite), wielu autorów zmodyfikowało ją do różnych celów, tak że dzisiaj „funkcja Ackermanna” może odnosić się do dowolnego z wielu wariantów pierwotnej funkcji. Jedna wspólna wersja, dwuargumentowa funkcja Pétera-Ackermanna jest zdefiniowana w następujący sposób dla nieujemnych liczb całkowitych m i n :
Jego wartość szybko rośnie, nawet przy niewielkich nakładach. Na przykład A (4, 2) jest liczbą całkowitą 19,729 cyfr dziesiętnych (odpowiednik 2 65536 -3 lub 2 2 2 2 2 -3).
Historia
Pod koniec lat dwudziestych matematycy Gabriel Sudan i Wilhelm Ackermann , uczniowie Davida Hilberta , studiowali podstawy obliczeń. Zarówno Sudanowi, jak i Ackermannowi przypisuje się odkrycie całkowicie obliczalnych funkcji (w niektórych odniesieniach określanych po prostu jako „rekurencyjne”), które nie są prymitywnymi funkcjami rekurencyjnymi . Sudan opublikował mniej znaną funkcję Sudanu , a wkrótce potem i niezależnie, w 1928 roku, Ackermann opublikował swoją funkcję (grecka litera phi ). Funkcja trójargumentowa Ackermanna , jest zdefiniowana w taki sposób, że dla , odtwarza podstawowe operacje dodawania , mnożenia i potęgowania jako
a dla p > 2 rozszerza te podstawowe operacje w sposób, który można porównać do hiperoperacji :
(Oprócz swojej historycznej roli jako całkowicie obliczalnej-ale-nie-prymitywnej-rekurencyjnej funkcji, oryginalna funkcja Ackermanna jest postrzegana jako rozszerzenie podstawowych operacji arytmetycznych poza potęgowanie, chociaż nie tak płynnie jak warianty funkcji Ackermanna, które są specjalnie zaprojektowane do w tym celu — na przykład sekwencja hiperoperacyjna Goodsteina .)
W dniu Nieskończonego , David Hilbert hipotezę, że funkcja Ackermann nie był prymitywny rekurencyjny, ale było Ackermann, Hilberta osobisty sekretarz i były student, który rzeczywiście okazał się hipotezę, w swoim referacie Na Hilberta konstrukcja zbioru liczb rzeczywistych .
Rózsa Péter i Raphael Robinson opracowali później wersję funkcji Ackermanna z dwiema zmiennymi, która stała się preferowana przez wielu autorów.
Uogólniona sekwencja hiperoperacji , np. , jest również wersją funkcji Ackermanna.
W 1963 roku RC Buck oparł intuicyjny wariant z dwiema zmiennymi ( ) na sekwencji hiperoperacji :
W porównaniu do większości innych wersji funkcja Bucka nie ma nieistotnych przesunięć:
Zbadano wiele innych wersji funkcji Ackermanna.
Definicja
Jako funkcja m-ary
Oryginalna trójargumentowa funkcja Ackermanna jest zdefiniowana rekurencyjnie w następujący sposób dla nieujemnych liczb całkowitych i :
Spośród różnych dwuargumentowych wersji, ta opracowana przez Pétera i Robinsona (zwana przez niektórych autorów „funkcją Ackermanna”) jest zdefiniowana dla nieujemnych liczb całkowitych i jest następująca:
Funkcję Pétera-Ackermanna można również wyrazić w odniesieniu do różnych innych wersji funkcji Ackermanna:
- hiperoperacja reprezentowana w notacji Knutha w górę (rozszerzona na indeksy całkowite ):
- hiperoperacja , reprezentowana w notacji Conway'a ze strzałką łańcuchową :
- Stąd
- ( i odpowiadałoby i , które logicznie można by dodać.)
Jako iterowana funkcja 1-arowa
Określić f n , gdy n -tej iteracji o f
gdzie id jest funkcją tożsamości, a f ○ g oznacza złożenie funkcji .
Rozpatrując funkcję Ackermanna jako ciąg funkcji jednoargumentowych, można ustawić .
Funkcja staje się wtedy ciągiem funkcji jednoargumentowych, zdefiniowanych z iteracji :
Ponieważ złożenie funkcji ( f ○ g )( x ) = f ( g ( x )) jest asocjacyjne , ostatnia linia może być również
Obliczenie
Rekurencyjną definicję funkcji Ackermanna można oczywiście przełożyć na system przepisywania terminów (TRS) .
TRS, oparty na funkcji 2-arowej
Definicja 2- arnej funkcji (Péter-)Ackermanna odpowiada regułom redukcji
Przykład
Obliczać
- W przypadku zastosowania strategii najbardziej wysuniętej na lewo i najbardziej zewnętrznej (jednoetapowej) , sekwencja redukcji jest
- W przypadku zastosowania strategii najbardziej od lewej do wewnętrznej (jednoetapowej) , sekwencja redukcji jest
Do obliczeń można użyć stosu , który początkowo zawiera elementy .
Następnie kilkakrotnie wymieniane są dwa górne elementy zgodnie z zasadami
Schematycznie, zaczynając od :
WHILE stackLength <> 1
{
POP 2 elements;
PUSH 1 to 3 elements in conformance with the rules r1, r2, r3
}
Pseudokod został opublikowany w Grossman & Zeitman (1988) .
Na przykład na wejściu kolejne konfiguracje stosu to
Odzwierciedla to sekwencję redukcji
Uwagi
- Strategia najbardziej od lewej do wewnętrznej jest zaimplementowana w 225 językach komputerowych w Rosetta Code .
- Grossman i Zeitman (1988) wskazali, że w obliczeniach maksymalna długość stosu wynosi , tak długo jak .
TRS, oparty na iterowanej funkcji 1-arnej
Definicja iterowanych 1-arnych funkcji Ackermanna prowadzi do różnych reguł redukcji
Ponieważ złożenie funkcji jest asocjacyjne, zamiast reguły r6 można zdefiniować
Podobnie jak w poprzedniej sekcji, obliczenie może być zaimplementowane za pomocą stosu, który utrzymuje bieżący termin.
Początkowo stos zawiera trzy elementy .
Następnie kilkakrotnie wymieniane są trzy górne elementy zgodnie z zasadami
Schematycznie, zaczynając od :
WHILE stackLength <> 1
{
POP 3 elements;
PUSH 1 or 3 or 5 elements in conformance with the rules r4, r5, r6;
}
Przykład
Na wejściu kolejne konfiguracje stosu są
Odpowiednie równości są
Gdy zamiast r6 stosuje się regułę redukcji r7, następują zamiany w stosie
Kolejne konfiguracje stosu będą wtedy:
Odpowiednie równości są
Uwagi
- Na dowolnym wejściu wszystkie przedstawione powyżej TRS zbiegają się w tej samej liczbie kroków. Używają również tych samych reguł redukcji (w tym porównaniu reguły r1, r2, r3 są uważane za „takie same” jak reguły r4, r5, r6/7). Na przykład redukcja zbieżności w 14 krokach: 6 X r1, 3 X r2, 5 X r3. Redukcja również zbiega się w 14 krokach: 6 X r4, 3 X r5, 5 X r6/7. TRS różnią się kolejnością stosowania zasad redukcji.
- Gdy jest obliczana zgodnie z regułami r4, r5, r6, maksymalna długość stosu pozostaje poniżej 2 * . Kiedy stosuje się regułę redukcji r7 zamiast reguły r6, maksymalna długość stosu spada poniżej 2(i+2). Długość stosu odzwierciedla głębokość rekurencji. Ponieważ obliczenie zgodnie z regułami r4, r5, r7 obejmuje najmniejszą zaobserwowaną do tej pory maksymalną głębokość rekurencji, jest pod tym względem efektywne.
- Grossman i Zeitman (1988) opublikowali z natury iteracyjny algorytm, który jest szybszy.
Ogromne liczby
Aby zademonstrować, jak obliczanie wyników w wielu krokach i w dużej liczbie:
Tabela wartości
Obliczenie funkcji Ackermanna można przełożyć na nieskończoną tablicę. Najpierw umieść liczby naturalne w górnym rzędzie. Aby określić liczbę w tabeli, przenieś liczbę bezpośrednio po lewej stronie. Następnie użyj tej liczby, aby wyszukać wymaganą liczbę w kolumnie podanej przez tę liczbę i jeden wiersz w górę. Jeśli po lewej stronie nie ma żadnej liczby, po prostu spójrz na kolumnę z nagłówkiem „1” w poprzednim wierszu. Oto mała lewa górna część tabeli:
|
n
m
|
0 | 1 | 2 | 3 | 4 | n |
|---|---|---|---|---|---|---|
| 0 | 1 | 2 | 3 | 4 | 5 | |
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 2 | 3 | 5 | 7 | 9 | 11 | |
| 3 | 5 | 13 | 29 | 61 | 125 | |
| 4 | 13 |
65533 |
2 65536 − 3 |
|
|
|
| 5 | 65533 |
|||||
| 6 | ||||||
| m |
Liczby tutaj, które są wyrażone tylko za pomocą potęgowania rekurencyjnego lub strzałek Knutha, są bardzo duże i zajęłyby zbyt dużo miejsca, aby zapisać je w postaci zwykłych cyfr dziesiętnych.
Pomimo dużych wartości występujących w tej wczesnej części tabeli, niektóre jeszcze większe liczby zostały zdefiniowane, takie jak liczba Grahama , której nie można zapisać za pomocą małej liczby strzałek Knutha. Liczba ta jest konstruowana za pomocą techniki podobnej do rekurencyjnego stosowania do siebie funkcji Ackermanna.
Jest to powtórzenie powyższej tabeli, ale z wartościami zastąpionymi odpowiednim wyrażeniem z definicji funkcji, aby wyraźnie pokazać wzorzec:
|
n
m
|
0 | 1 | 2 | 3 | 4 | n |
|---|---|---|---|---|---|---|
| 0 | 0+1 | 1+1 | 2+1 | 3+1 | 4+1 | n + 1 |
| 1 | A (0, 1) |
A (0, A (1, 0)) = A (0, 2) |
A (0, A (1, 1)) = A (0, 3) |
A (0, A (1, 2)) = A (0, 4) |
A (0, A (1, 3)) = A (0, 5) |
A (0, A (1, n −1)) |
| 2 | A (1, 1) |
A (1, A (2, 0)) = A (1, 3) |
A (1, A (2, 1)) = A (1, 5) |
A (1, A (2, 2)) = A (1, 7) |
A (1, A (2, 3)) = A (1, 9) |
A (1, A (2, n −1)) |
| 3 | (2, 1) |
A (2, A (3, 0)) = A (2, 5) |
A (2, A (3, 1)) = A (2, 13) |
A (2, A (3, 2)) = A (2, 29) |
A (2, A (3, 3)) = A (2, 61) |
A (2, A (3, n −1)) |
| 4 | A (3, 1) |
A (3, A (4, 0)) = A (3, 13) |
A (3, A (4, 1)) = A (3, 65533) |
A (3, A (4, 2)) | A (3, A (4, 3)) | A (3, A (4, n −1)) |
| 5 | A (4, 1) | A (4, A (5, 0)) | A (4, A (5, 1)) | A (4, A (5, 2)) | A (4, A (5, 3)) | A (4, A (5, n −1)) |
| 6 | A (5, 1) | (5, (6, 0)) | (5, (6, 1)) | (5, (6, 2)) | (5, (6, 3)) | (5, (6, n -1)), |
Nieruchomości
Uwagi ogólne
- Może nie być od razu oczywiste, że ocena zawsze się kończy. Jednak rekursja jest ograniczona, ponieważ w każdej aplikacji rekurencyjnej albo maleje, albo pozostaje taka sama i maleje. Za każdym razem, gdy osiągnie zero, maleje, więc w końcu również osiąga zero. (Mówiąc bardziej technicznie, w każdym przypadku para zmniejsza się w porządku leksykograficznym na parach, co jest dobrym uporządkowaniem , podobnie jak uporządkowanie pojedynczych nieujemnych liczb całkowitych; oznacza to, że nie można zejść w kolejności nieskończenie wiele razy z rzędu .) Jednakże, gdy maleje, nie ma górnej granicy tego, jak bardzo może wzrosnąć — i często znacznie wzrośnie.
- Dla małych wartości m, takich jak 1, 2 lub 3, funkcja Ackermanna rośnie stosunkowo wolno względem n (co najwyżej wykładniczo ). Bo rośnie jednak znacznie szybciej; parzysty wynosi około 2 × 10 19 728 , a rozszerzenie dziesiętne A (4, 3) jest bardzo duże według każdej typowej miary.
- Ciekawym aspektem jest to, że jedyną operacją arytmetyczną, jaką kiedykolwiek używa, jest dodanie 1. Jego szybko rosnąca moc opiera się wyłącznie na rekurencji zagnieżdżonej. Oznacza to również, że jego czas działania jest co najmniej proporcjonalny do jego wydajności, a więc jest również niezwykle duży. W rzeczywistości w większości przypadków czas działania jest znacznie większy niż wydajność; patrz poniżej.
- Wersja jednoargumentowa, która zwiększa oba i jednocześnie przyćmiewa każdą prymitywną funkcję rekurencyjną, w tym bardzo szybko rosnące funkcje, takie jak funkcja wykładnicza , funkcja silnia, funkcje wielo- i superczynnikowe , a nawet funkcje zdefiniowane za pomocą strzałki w górę Knutha notacja (z wyjątkiem przypadku użycia indeksowanej strzałki w górę). Widać, że jest to z grubsza porównywalne z szybko rozwijającą się hierarchią . Ten ekstremalny wzrost można wykorzystać do pokazania tego, co jest oczywiście obliczalne na maszynie z nieskończoną pamięcią, takiej jak maszyna Turinga, a więc jest funkcją obliczalną , rośnie szybciej niż jakakolwiek prymitywna funkcja rekurencyjna i dlatego nie jest pierwotną funkcją rekurencyjną.
Nie prymitywny rekurencyjny
Funkcja Ackermanna rośnie szybciej niż jakakolwiek prymitywna funkcja rekurencyjna i dlatego sama nie jest pierwotną funkcją rekurencyjną.
W szczególności pokazujemy, że dla każdej pierwotnej funkcji rekurencyjnej istnieje nieujemna liczba całkowita taka, że dla wszystkich nieujemnych liczb całkowitych ,
Po ustaleniu tego wynika, że samo w sobie nie jest prymitywne, rekurencyjne, ponieważ w przeciwnym razie wprowadzenie doprowadziłoby do sprzeczności
Dowód przebiega następująco: zdefiniuj klasę wszystkich funkcji, które rosną wolniej niż funkcja Ackermanna
i pokaż, że zawiera wszystkie prymitywne funkcje rekurencyjne. To ostatnie osiąga się przez pokazanie, że zawiera funkcje stałe, funkcję następnika, funkcje rzutowania oraz że jest ona zamknięta pod operacjami składania funkcji i rekurencji pierwotnej.
Odwrotność
Ponieważ funkcja f ( n ) = ( N , N ) za powyżej rośnie bardzo szybko, jego funkcję odwrotną , C -1 , rośnie bardzo wolno. Ta odwrotna funkcja Ackermanna f- 1 jest zwykle oznaczana przez α . W rzeczywistości α ( n ) jest mniejsze niż 5 dla każdego praktycznego rozmiaru wejściowego n , ponieważ A (4, 4) jest rzędu .
Ta odwrotność pojawia się w złożoności czasowej niektórych algorytmów , takich jak rozłączna struktura danych i algorytm Chazelle'a dla drzew o minimalnej rozpiętości . Czasami w tych ustawieniach stosuje się oryginalną funkcję Ackermanna lub inne odmiany, ale wszystkie one rosną w podobnym tempie. W szczególności niektóre zmodyfikowane funkcje upraszczają wyrażenie, eliminując -3 i podobne terminy.
Dwuparametrową odmianę odwrotnej funkcji Ackermanna można zdefiniować w następujący sposób, gdzie jest funkcją podłogi :
Funkcja ta pojawia się w dokładniejszych analizach wyżej wymienionych algorytmów i daje bardziej precyzyjne ograniczenie czasowe. W rozłącznej strukturze danych m reprezentuje liczbę operacji, podczas gdy n reprezentuje liczbę elementów; w algorytmie minimalnego drzewa opinającego m reprezentuje liczbę krawędzi, podczas gdy n reprezentuje liczbę wierzchołków. Istnieje kilka nieco odmiennych definicji α ( m , n ) ; na przykład log 2 n jest czasami zastępowany przez n , a funkcja podłogi jest czasami zastępowana przez sufit .
Inne badania mogą zdefiniować funkcję odwrotną jedności, w której m jest ustawione na stałą, tak że odwrotność dotyczy określonego wiersza.
Odwrotność funkcji Ackermanna jest pierwotną rekurencyjną.
Użyj jako punktu odniesienia
Funkcja Ackermanna, ze względu na swoją definicję w kategoriach ekstremalnie głębokiej rekurencji, może być wykorzystana jako wzorzec zdolności kompilatora do optymalizacji rekurencji. Pierwsze opublikowane użycie funkcji Ackermanna w ten sposób miało miejsce w 1970 r. przez Dragoș Vaidę i prawie jednocześnie w 1971 r. przez Yngve Sundblada.
Przełomowa praca Sundblada została podjęta przez Briana Wichmanna (współautora benchmarku Whetstone ) w trylogii artykułów napisanych w latach 1975-1982.
Zobacz też
- Teoria obliczalności
- Podwójna rekurencja
- Szybko rosnąca hierarchia
- Funkcja Goodsteina
- Prymitywna funkcja rekurencyjna
- Rekurencja (informatyka)
Uwagi
Bibliografia
Bibliografia
- Ackermann, Wilhelm (1928). "Zum Hilbertschen Aufbau der reellen Zahlen" . Matematyka Annalen . 99 : 118–133. doi : 10.1007/BF01459088 . S2CID 123431274 .
- Buck, RC (1963). „Indukcja matematyczna i definicje rekurencyjne” . Amerykański miesięcznik matematyczny . 70 (2): 128–135. doi : 10.2307/2312881 . JSTOR 2312881 .
- Calude, Cristian; Marek, Salomon ; Tevy, Ionel (listopad 1979). „Pierwszy przykład funkcji rekurencyjnej, która nie jest pierwotną rekurencyjną” . Historia Matematyka . 6 (4): 380–84. doi : 10.1016/0315-0860(79)90024-7 .
- Grossman, Jerrold W.; Zeitman, R. Suzanne (maj 1988). „Z natury iteracyjne obliczenie funkcji Ackermanna” . Informatyka teoretyczna . 57 (2-3): 327-330. doi : 10.1016/0304-3975(88)90046-1 .
- van Heijenoort, Jean (1967). Od Fregego do Gödla: książka źródłowa w logice matematycznej, 1879-1931 . Wydawnictwo Uniwersytetu Harvarda.
- Hilbert, Dawid (1926). „Uber das Unendliche”. Matematyka Annalen . 95 : 161-190. doi : 10.1007/BF01206605 . S2CID 121888793 .
- Koop, Tim (25 kwietnia 2021). "Funkcja Ackermanna zaimplementowana za pomocą pętli for" .
- Matos, Armando B (7 maja 2014). „Odwrotność funkcji Ackermanna jest prymitywną rekurencyjną” (PDF) .
- Monin, Jean-Francois; Hinchey, MG (2003). Zrozumienie metod formalnych . Skoczek. P. 61. Numer ISBN 9781852332471.
- Munafo, Robert (1999a). „Wersje funkcji Ackermanna” . Duże liczby w MROB . Pobrano 2021-08-30 .
- Munafo, Robert (1999b). „Wymyślanie nowych operatorów i funkcji” . Duże liczby w MROB . Pobrano 2021-08-30 .
- Piotr, Rózsa (1935). „Konstrukcja nichtrekursiver Funktionen”. Matematyka Annalen . 111 : 42–60. doi : 10.1007/BF01472200 . S2CID 121107217 .
- Pettie, S. (2002). „Dolna granica w stylu odwrotnego Ackermanna dla problemu weryfikacji minimalnego drzewa opinającego online”. 43rd Annual IEEE Symposium on Foundations of Computer Science, 2002. Proceedings : 155-163. doi : 10.1109/SFCS.2002.1181892 . Numer ISBN 0-7695-1822-2. S2CID 8636108 .
- Ritchie, Robert Wells (listopad 1965). "Klasy funkcji rekurencyjnych na podstawie funkcji Ackermanna" . Pacific Journal of Mathematics . 15 (3): 1027-1044. doi : 10.2140/pjm.1965.15.1027 .
- Robinson, Raphael M. (1948). „Rekurencja i podwójna rekurencja” . Biuletyn Amerykańskiego Towarzystwa Matematycznego . 54 (10): 987–93. doi : 10.1090/S0002-9904-1948-09121-2 .
- Sundblad, Yngve (marzec 1971). „Funkcja Ackermanna. Badanie teoretyczne, obliczeniowe i manipulacyjne formuły”. Matematyka numeryczna BIT . 11 (1): 107-119. doi : 10.1007/BF01935330 . S2CID 123416408 .
- Vaida, Dragoș (1970). „Walidacja kompilatora dla języka podobnego do Algola”. Biuletyn Matematyczny Towarzystwa Nauk Matematycznych Republiki Socjalistycznej Republiki Roumanie . Nowa seria. 14 (62) (4): 487–502. JSTOR 43679758 .
- Wichmann, Brian A. (marzec 1976). „Funkcja Ackermanna: Badanie efektywności wywoływania procedur”. Matematyka numeryczna BIT . 16 : 103–110. doi : 10.1007/BF01940783 . S2CID 16993343 .
- Wichmann, Brian A. (lipiec 1977). „Jak nazwać procedury, czyli przemyślenia na temat funkcji Ackermanna”. Matematyka numeryczna BIT . 16 (3): 103-110. doi : 10.1002/spe.4380070303 . S2CID 206507320 .
- Wichmann, Brian A. (lipiec 1982). "Najnowsze wyniki procedury wywołującej test, funkcja Ackermanna" (PDF) .
Zewnętrzne linki
- „Funkcja Ackermanna” . Encyklopedia Matematyki . EMS Naciśnij . 2001 [1994].
- Weisstein, Eric W. "Funkcja Ackermanna" . MatematykaŚwiat .
-
Ten artykuł zawiera materiał z domeny publicznej z dokumentu NIST : Black, Paul E. „Funkcja Ackermanna” . Słownik algorytmów i struktur danych .
- Animowany kalkulator funkcji Ackermanna
- Funkcja Ackermana zaimplementowana za pomocą pętli for
- Scott Aaronson , Kto może wymienić największą liczbę? (1999)
- Funkcje Ackermanna . Zawiera tabelę niektórych wartości.
- Hiperoperacje: funkcja Ackermanna i nowa operacja arytmetyczna
- Duże liczby Roberta Munafo opisuje kilka wariantów definicji A .
- Gabriel Nivasch, Odwrotność Ackermanna bez bólu na odwrotnej funkcji Ackermanna.
- Raimund Seidel, Zrozumienie odwrotnej funkcji Ackermanna (prezentacja PDF).
- Funkcja Ackermanna napisana w różnych językach programowania (na Rosetta Code )
- Funkcja Ackermanna ( zarchiwizowane 24.10.2009) — niektóre badania i programowanie autorstwa Harry'ego J. Smitha.