www.wikidata.de-de.nina.az
Die Ackermannfunktion ist eine 1926 von Wilhelm Ackermann gefundene extrem schnell wachsende mathematische Funktion mit deren Hilfe in der theoretischen Informatik Grenzen von Computer und Berechnungsmodellen aufgezeigt werden konnen Heute gibt es eine ganze Reihe von Funktionen die als Ackermannfunktion bezeichnet werden Diese weisen alle ein ahnliches Bildungsgesetz wie die ursprungliche Ackermannfunktion auf und haben auch ein ahnliches Wachstumsverhalten Inhaltsverzeichnis 1 Entstehungsgeschichte 2 Idee 3 Definition und Varianten 3 1 Definition von Ackermann 3 2 Definition von Peter 3 3 Modifizierte Ackermannfunktion 4 Bedeutung in der theoretischen Informatik 4 1 Beweis 5 Anwendungen 5 1 Benchmark fur rekursive Aufrufe 5 2 Laufzeitabschatzungen mit der Umkehrfunktion 6 Implementierung 7 Wertetabelle 8 Genauere Betrachtung 9 Literatur 10 Weblinks 11 EinzelnachweiseEntstehungsgeschichte Bearbeiten1926 vermutete David Hilbert dass jede berechenbare Funktion primitiv rekursiv sei Vereinfacht bedeutet dies dass sich jede durch einen Computer berechenbare Funktion aus einigen wenigen sehr einfachen Regeln zusammensetzen lasst und dass sich die Dauer der Berechnung im Voraus abschatzen lasst Dies trifft auf nahezu alle in der Praxis vorkommenden Funktionen zu Ebenfalls 1926 konstruierte Ackermann eine Funktion die diese Vermutung widerlegt und veroffentlichte sie 1928 Ihm zu Ehren wird diese Funktion heute Ackermannfunktion genannt Sie kann von einem Computer in endlicher Zeit ausgewertet werden ist aber nicht primitiv rekursiv 1935 konstruierte Rozsa Peter eine vereinfachte Version die die gleichen Eigenschaften besitzt Diese Funktion gelegentlich auch als Ackermann Peter Funktion bezeichnet wird heute vorwiegend benutzt Idee BearbeitenMan betrachtet die Folge a b a b a b displaystyle a b a cdot b a b ldots nbsp Hierbei wird bei jedem Folgenglied die Operation des vorigen Folgenglieds b 1 displaystyle b 1 nbsp mal auf a displaystyle a nbsp angewandt also a b displaystyle a cdot b nbsp ist gerade a a a displaystyle a a dotsb a nbsp wobei die Variable a displaystyle a nbsp b displaystyle b nbsp mal vorkommt und so weiter Die Idee hinter der Ackermannfunktion ist es diese Folge als Funktion aufzufassen Beispiel Setzt man in obiger Folge a 2 displaystyle a 2 nbsp und b 4 displaystyle b 4 nbsp so erhalt man die Folge 6 8 16 65536 2 2 2 65536 m a l displaystyle 6 8 16 65536 underbrace 2 2 2 65536 mathrm mal ldots nbsp dd die man auch die Ackermannfunktion zu a 2 displaystyle a 2 nbsp und b 4 displaystyle b 4 nbsp nennt Die letztgenannte Zahl liegt bereits weit jenseits von allem Vorstellbaren Die Ackermannfunktion notiert als f displaystyle varphi nbsp ist also eine Funktion die die folgenden Gleichungen erfullt f a b 0 a b displaystyle varphi a b 0 a b nbsp f a b 1 a b displaystyle varphi a b 1 a cdot b nbsp f a b 2 a b displaystyle varphi a b 2 a b nbsp displaystyle ldots nbsp Ab der vierten Zeile konnen die Funktionswerte nicht mehr mit herkommlichen Operatoren formuliert werden man braucht erweiterte Notationen wie beispielsweise den Hyper Operator Definition und Varianten BearbeitenDie Ackermannfunktion definiert man ublicherweise rekursiv d h man macht fur einige Anfangswerte explizite Angaben und gibt eine Anleitung das Rekursionsschema wie man weitere Funktionswerte aus den bereits berechneten erhalt Definition von Ackermann Bearbeiten Ackermann selbst definierte die Funktion auf recht umstandliche Weise gab aber kurz darauf die folgende aquivalente Definition an f a b 0 a b displaystyle varphi a b 0 a b nbsp f a 0 n 1 a a n displaystyle varphi a 0 n 1 alpha a n nbsp f a b 1 n 1 f a f a b n 1 n displaystyle varphi a b 1 n 1 varphi a varphi a b n 1 n nbsp Dabei ist a a n displaystyle alpha left a n right nbsp eine weitere Funktion die Ackermann nicht weiter beschrieb Sie liefert die Startwerte a 0 a 0 displaystyle a cdot 0 a 0 ldots nbsp a a n 0 wenn n 0 1 wenn n 1 a wenn n gt 1 displaystyle alpha a n begin cases 0 amp text wenn n 0 1 amp text wenn n 1 a amp text wenn n gt 1 end cases nbsp Beispiele Mochte man f 4 3 0 displaystyle varphi 4 3 0 nbsp berechnen so kann man die erste Zeile der Definition anwenden und erhalt direkt f 4 3 0 4 3 7 displaystyle varphi 4 3 0 4 3 7 nbsp Mochte man f 4 0 2 displaystyle varphi 4 0 2 nbsp berechnen so kann man die zweite Zeile anwenden und erhalt f 4 0 2 a 4 1 1 displaystyle varphi 4 0 2 alpha 4 1 1 nbsp Wenn weder das zweite noch das dritte Argument 0 ist verwendet man die dritte Zeile der Definition Beispielsweise f 4 1 2 f 4 f 4 0 2 1 displaystyle varphi 4 1 2 varphi 4 varphi 4 0 2 1 nbsp Setzt man f 4 0 2 1 displaystyle varphi 4 0 2 1 nbsp aus dem vorigen Beispiel ein erhalt man f 4 1 1 displaystyle varphi 4 1 1 nbsp Jetzt kann man wieder die dritte Zeile anwenden und dann zweimal die zweite Alles zusammen ergibt f 4 1 2 f 4 f 4 0 2 1 f 4 1 1 f 4 f 4 0 1 0 f 4 0 0 4 displaystyle begin aligned varphi 4 1 2 amp varphi 4 varphi 4 0 2 1 amp varphi 4 1 1 amp varphi 4 varphi 4 0 1 0 amp varphi 4 0 0 amp 4 end aligned nbsp dd Wenn man vom Wachstum der Ackermannfunktion spricht meint man oftmals die Funktion f n f n n n displaystyle f left n right varphi n n n nbsp Definition von Peter Bearbeiten Rozsa Peter definierte 1935 eine einfachere Version der Ackermannfunktion die nur zwei Parameter besitzt und zudem ohne die Hilfsfunktion a displaystyle alpha nbsp auskommt 1 a 0 m m 1 a n 1 0 a n 1 a n 1 m 1 a n a n 1 m displaystyle begin array lcl operatorname a 0 m amp amp m 1 operatorname a n 1 0 amp amp operatorname a n 1 operatorname a n 1 m 1 amp amp operatorname a n operatorname a n 1 m end array nbsp Auch hier meint man im Zusammenhang mit Wachstumsuntersuchungen oftmals die Funktion f n a n n displaystyle f n operatorname a n n nbsp wenn man von der Ackermannfunktion spricht Aus dieser Definition ist nicht sofort ersichtlich dass die Funktion a n m displaystyle operatorname a n m nbsp fur alle nicht negativen ganzzahligen n displaystyle n nbsp und m displaystyle m nbsp definiert ist da m displaystyle m nbsp teilweise auch erhoht wird Man kann aber erkennen dass zum einen a n displaystyle operatorname a n cdot nbsp fur n 0 displaystyle n 0 nbsp wohldefiniert ist Zum anderen ist unter der Voraussetzung dass a n 0 displaystyle operatorname a n 0 cdot nbsp wohldefiniert ist auch a n 0 1 displaystyle operatorname a n 0 1 cdot nbsp wohldefiniert indem man die letzten beiden Rekursionsvorschriften iterativ benutzt Zu beachten ist allerdings dass es bei einer Verringerung von n displaystyle n nbsp keine obere Schranke fur das Wachstum von m displaystyle m nbsp in den folgenden Funktionsaufrufen gibt Modifizierte Ackermannfunktion Bearbeiten Haufig werden in der Komplexitatsanalyse leicht modifizierte Versionen der Ackermannfunktion verwendet die jedoch das gleiche asymptotische Laufzeitverhalten aufweisen Eine dieser Varianten die eine Interpretation als verallgemeinerte Exponentialfunktion erlaubt kann wie folgt angegeben werden 2 A 1 n 2 n wenn n 1 A k 1 2 wenn k 2 A k n A k 1 A k n 1 wenn n 2 k 2 displaystyle begin array lcl A 1 n amp amp 2n amp text wenn n geq 1 A k 1 amp amp 2 amp text wenn k geq 2 A k n amp amp A k 1 A k n 1 amp text wenn n geq 2 k geq 2 end array nbsp Die so definierte Folge von Funktionen A k displaystyle A k nbsp konnen nun zu der Definition der modifizierten Ackermannfunktion A displaystyle A nbsp verwendet werden indem man A n A n n displaystyle A n A n n nbsp setzt Die Funktionen A k displaystyle A k nbsp konnen nun als naturliche Fortsetzung der Addition Multiplikation und Potenzierung interpretiert werden So reprasentiert beispielsweise A 1 n displaystyle A 1 n nbsp die n displaystyle n nbsp fache Addition der Zahl 2 displaystyle 2 nbsp A 2 n displaystyle A 2 n nbsp die n displaystyle n nbsp fache Multiplikation der Zahl 2 displaystyle 2 nbsp usw Es gilt A 1 k 2 2 2 2 2 k displaystyle A 1 k 2 2 2 dotsb 2 2 cdot k nbsp A 2 k 2 2 2 2 2 k displaystyle A 2 k 2 cdot 2 cdot 2 dotsm 2 2 k nbsp A 3 k 2 2 2 2 displaystyle A 3 k 2 2 2 2 nbsp Bedeutung in der theoretischen Informatik BearbeitenWie eingangs schon erwahnt erfand Ackermann diese Funktion als Beispiel einer Funktion die nicht primitiv rekursiv aber berechenbar ist Auf der Suche nach den Grenzen von Computern stosst man sehr schnell auf den Begriff der berechenbaren Funktionen Das sind all die Funktionen fur deren Auswertung man einen Algorithmus angeben kann also alle Funktionen die ein Computer insbesondere eine Turingmaschine berechnen kann Diese Definition stellt einen sehr schnell vor ein Problem wenn man von einer konkreten Funktion entscheiden mochte ob sie berechenbar ist Findet man einen Algorithmus der die Funktion berechnet so ist sie offensichtlich berechenbar Andernfalls ist ungewiss ob die Funktion wirklich nicht berechenbar ist oder ob es zwar einen Algorithmus gibt man ihn aber nicht gefunden hat Aus diesem Grund sucht man nach alternativen Definitionen mit denen man einen solchen Nachweis einfacher fuhren kann Ein erster Ansatz hierfur waren die primitiv rekursiven Funktionen Dies sind Funktionen die sich durch einige wenige Regeln aus sehr einfachen Funktionen zusammensetzen lassen Einige Zeit vermutete man dass alle berechenbaren Funktionen primitiv rekursiv sind mit den primitiv rekursiven Funktionen also ein Werkzeug zur Losung des oben geschilderten Problems gefunden sei Diese Hoffnung zerstorte jedoch die Ackermannfunktion von der man nachweisen kann dass sie berechenbar aber nicht primitiv rekursiv ist Siehe nachfolgender Beweis Fuhrt man auf der Klasse der primitiv rekursiven Funktionen eine weitere Konstruktionsregel die sogenannte µ Rekursion ein erhalt man eine grossere Klasse ebenfalls berechenbarer Funktionen die die Ackermannfunktion enthalt Man nimmt an dass diese Klasse der µ rekursiven Funktionen der Klasse der intuitiv berechenbaren Funktionen entspricht Church sche These Beweis Bearbeiten Der Beweis dass die Ackermannfunktion berechenbar ist aber nicht primitiv rekursiv nutzt im Wesentlichen aus dass die Ackermannfunktion starker wachst als jede primitiv rekursive Funktion 3 Beweisskizze zur Behauptung dass die Ackermannfunktion nicht primitiv rekursiv ist Als erstes definiert man zu jeder primitiv rekursiven Funktion g displaystyle g nbsp eine Funktion f g n max g n 1 n k i 1 k n i n displaystyle f g n max left g n 1 ldots n k sum i 1 k n i leq n right nbsp Diese Funktion gibt das Maximum an das man mit g displaystyle g nbsp erreichen kann wenn die Summe der Argumente n displaystyle n nbsp nicht uberschreitet Sodann zeigt man durch strukturelle Induktion uber den induktiven Aufbau der primitiv rekursiven Funktionen dass es zu jeder primitiv rekursiven Funktion g displaystyle g nbsp eine naturliche Zahl k displaystyle k nbsp gibt sodass fur alle n k displaystyle n geq k nbsp gilt f g n lt a k n displaystyle f g n lt a k n nbsp Anschaulich zeigt dies dass die Ackermannfunktion starker wachst als jede primitiv rekursive Funktion Damit beweist man dann wie folgt dass die Ackermannfunktion nicht primitiv rekursiv ist Angenommen a k n displaystyle a k n nbsp sei primitiv rekursiv dann auch g n a n n displaystyle g n a n n nbsp Nach der Vorbemerkung gibt es aber ein k displaystyle k nbsp sodass fur alle n k displaystyle n geq k nbsp gilt g n lt a k n displaystyle g n lt a k n nbsp Setzt man hier n k displaystyle n k nbsp so erhalt man den Widerspruch g k f g k lt a k k g k displaystyle g k leq f g k lt a k k g k nbsp dd Anwendungen BearbeitenFur die Ackermannfunktion gibt es nur sehr wenige Anwendungen Die zwei wichtigsten sind Benchmarktests fur rekursive Aufrufe in Programmiersprachen und Laufzeitabschatzungen der gewichteten Vereinigung und Pfadkompression bei der Union Find Struktur Benchmark fur rekursive Aufrufe Bearbeiten Bei der Einfuhrung von neuen Programmiersprachen Compilern und Computern mochte man deren Leistungsfahigkeit untersuchen Dazu werden u a mittels Benchmarking durch spezielle Programme festgelegte Eigenschaften uberpruft In diesem Zusammenhang wird die Ackermannfunktion gerne als Benchmark zur Uberprufung von rekursiven Prozedur Aufrufen benutzt da ein Programm zur Berechnung der Ackermannfunktion im Wesentlichen nur aus solchen Prozeduraufrufen besteht In der Definition von Peter wird ja nur a 0 m displaystyle a 0 m nbsp direkt berechnet Die Schwierigkeit bei der Berechnung der Funktionswerte sind also nicht allein deren Grosse sondern die tiefe Verschachtelung der Funktionsaufrufe die leicht zu einem Stapeluberlauf engl Stack Overflow fuhrt also dazu dass dem System der Speicher ausgeht Die Ackermann Funktion ist daher eine einfache und sichere Methode einen Stapeluberlauf zu provozieren beispielsweise um zu testen ob dieser Fehlerfall bearbeitet wird und ggf wie dies erfolgt Die Ackermann Funktion hat dabei den Vorteil dass sie immun gegen Compiler Optimierungen ist und auch statische Quellcode Analysen den moglichen Stapeluberlauf praktisch nicht detektieren konnen Diese Idee geht zuruck auf Yngve Sundblad der 1971 die Funktion f n a 3 n displaystyle f n a 3 n nbsp benutzte um diverse Programmiersprachen zu vergleichen Um a 3 n displaystyle a 3 n nbsp zu berechnen werden a 3 n 12 n 2 displaystyle a 3 n 12 n 2 nbsp Aufrufe getatigt Sundblad testete unter anderem wie gross n displaystyle n nbsp gewahlt werden kann damit der Computer noch in der Lage ist diese Zahl zu berechnen Damals erreichte er n 1 displaystyle n 1 nbsp Zum Vergleich hierzu Mit Java 1 4 2 und den Standardspeichereinstellungen erreicht man heutzutage n 13 displaystyle n 13 nbsp Im Laufe der Berechnung werden viele identische Aufrufe mehrfach ausgerechnet Ein intelligenter Compiler kann dies ausnutzen und die Ergebnisse zwischenspeichern um solche Aufrufe nur einmal durchfuhren zu mussen Damit waren schon 1971 Aufrufe bis n 20 displaystyle n 20 nbsp durchfuhrbar Einen bedeutenden Zeitvorteil erhalt man auch wenn man a 1 n displaystyle a 1 n nbsp direkt berechnet statt es rekursiv zu a 1 a 1 a 1 a 1 0 displaystyle a 1 a 1 a 1 dots a 1 0 dots nbsp zu expandieren Die direkte Berechnung von a 1 n displaystyle a 1 n nbsp erfordert lineare Zeit in n displaystyle n nbsp Die Berechnung von a 2 n displaystyle a 2 n nbsp erfordert quadratische Zeit denn sie fuhrt zu O n displaystyle mathcal O n nbsp also c n displaystyle c cdot n nbsp fur eine Konstante c displaystyle c nbsp siehe Landau Symbole verschachtelten Aufrufen von a 1 i displaystyle a 1 i nbsp fur verschiedene i displaystyle i nbsp Die Berechnung von a 3 n displaystyle a 3 n nbsp erfordert schliesslich eine zu 4 n 1 displaystyle 4 n 1 nbsp proportionale Zeit O 4 n 1 displaystyle mathcal O 4 n 1 nbsp Laufzeitabschatzungen mit der Umkehrfunktion Bearbeiten Da die Funktion f n a n n displaystyle f n a n n nbsp sehr schnell wachst wachst ihre Umkehrfunktion f 1 displaystyle f 1 nbsp sehr langsam Sie ist fur jede praktisch vorstellbare Eingabegrosse kleiner als 5 weil der Funktionswert f 4 a 4 4 displaystyle f 4 a 4 4 nbsp grosser als die Anzahl der Atome im Universum ist wie die Berechnung von a 4 3 displaystyle a 4 3 nbsp weiter unten zeigt In der praktischen Analyse von Algorithmen kann sie also als konstant betrachtet werden Diese Umkehrfunktion taucht in der Laufzeitanalyse bestimmter Algorithmen auf zum Beispiel beim Union Find Problem und in Chazelles Algorithmus fur minimale Spannbaume In diesem und anderen Zusammenhangen wird die ursprungliche Ackermannfunktion oft durch Weglassen additiver Konstanten oder andere Modifikationen leicht umdefiniert zu einer Funktion mit ahnlichem asymptotischen Verhalten Diese modifizierten Funktionen sind nicht gleich der Ackermannfunktion aber nach den Massstaben der Laufzeitanalyse konnen sie als aquivalent betrachtet werden Implementierung BearbeitenDie rekursive Implementierung der Ackermannfunktion hier in Pseudocode entspricht direkt der Definition function ack n m if n 0 return m 1 else if m 0 return ack n 1 1 else return ack n 1 ack n m 1 Etwas effizienter ist die folgende teilweise iterative Implementierung function ack n m while n 0 if m 0 m 1 else m ack n m 1 n n 1 return m 1 Noch effizientere Implementierungen verwenden Arrays zur Zwischenspeicherung bereits berechneter Werte siehe auch Dynamische Programmierung Grossman amp Zeitman publizierten einen Algorithmus der a n m displaystyle operatorname a n m nbsp ohne Zwischenspeicherung berechnet in Laufzeit O n a n m displaystyle mathcal O n operatorname a n m nbsp mit einem Speicherbedarf von O n displaystyle mathcal O n nbsp 4 In Haskell einer funktionalen Programmiersprache spiegelt die Implementierung direkt die Definition wider ack 0 m m 1 ack n 0 ack n 1 1 ack n m ack n 1 ack n m 1 In Prolog sieht die Implementierung so aus ackermann 0 X Y X gt 0 Y is X 1 ackermann X 0 Z X gt 0 X1 is X 1 ackermann X1 1 Z ackermann X Y Z X gt 0 Y gt 0 X1 is X 1 Y1 is Y 1 ackermann X Y1 W ackermann X1 W Z Im Lambda Kalkul ist sogar eine rein iterative Implementierung moglich 1 und succ verwenden die Church Numerale zur Darstellung der naturlichen Zahlen Die Gleichungen der Definition von Peter lassen sich direkt durch b Konversion zeigen ack ln n lf lm m f f 1 succWertetabelle BearbeitenDie folgende Tabelle zeigt einige Funktionswerte fur kleine Werte von n displaystyle n nbsp und m displaystyle m nbsp Die nicht vollstandig ausgerechneten Werte sind zu gross um sie dezimal darzustellen Werte von a n m displaystyle a n m nbsp n m 0 1 2 3 4 m displaystyle m nbsp 0 1 2 3 4 5 m 1 displaystyle m 1 nbsp 1 2 3 4 5 6 m 2 displaystyle m 2 nbsp 2 3 5 7 9 11 2 m 3 displaystyle 2m 3 nbsp 3 5 13 29 61 125 8 2 m 3 displaystyle 8 cdot 2 m 3 nbsp 4 13 65533 2 65536 3 2 10 19728 displaystyle 2 65536 3 approx 2 cdot 10 19728 nbsp Zahl mit 19729 Dezimalstellen a 3 2 65536 3 displaystyle a 3 2 65536 3 nbsp a 3 a 4 3 displaystyle a 3 a 4 3 nbsp 2 2 2 3 displaystyle begin matrix underbrace 2 2 cdot cdot cdot 2 3 end matrix nbsp Potenzturm mit m 3 Zahlen 5 65533 a 4 65533 displaystyle a 4 65533 nbsp a 4 a 5 1 displaystyle a 4 a 5 1 nbsp a 4 a 5 2 displaystyle a 4 a 5 2 nbsp a 4 a 5 3 displaystyle a 4 a 5 3 nbsp 6 a 5 1 displaystyle a 5 1 nbsp a 5 a 5 1 displaystyle a 5 a 5 1 nbsp a 5 a 6 1 displaystyle a 5 a 6 1 nbsp a 5 a 6 2 displaystyle a 5 a 6 2 nbsp a 5 a 6 3 displaystyle a 5 a 6 3 nbsp Trotz der unvorstellbar grossen Zahlen die schon in dieser Tabelle auftauchen wurden rekursive Verfahren definiert die noch schneller wachsende Werte liefern so zum Beispiel Grahams Zahl Benotigter Speicher fur a n m displaystyle a n m nbsp wenn als unsigned integer gespeichert m n 0 1 2 3 4 50 1 bit 2 bit 2 bit 3 bit 4 bit 16 bit1 2 bit 2 bit 3 bit 4 bit 16 bit 24 bit 2 2 bit 3 bit 3 bit 5 bit 8 KiB 216 bit 3 3 bit 3 bit 4 bit 6 bit 2 504412 1019727 Byte 265536 bit 265533 Byte 4 3 bit 3 bit 4 bit 7 bit5 3 bit 3 bit 4 bit 8 bit6 3 bit 4 bit 4 bit 9 bit7 4 bit 4 bit 5 bit 10 bit8 4 bit 4 bit 5 bit 11 bit9 4 bit 4 bit 5 bit 12 bit10 4 bit 4 bit 5 bit 13 bit100 7 bit 7 bit 8 bit 103 bit1 000 10 bit 10 bit 11 bit 125 Byte10 000 14 bit 14 bit 15 bit 1250 Byte100 000 17 bit 17 bit 18 bit 12 5 KB 105 bit 1 000 000 20 bit 20 bit 21 bit 125 KB 106 bit 10 000 000 24 bit 24 bit 25 bit 1 25 MB 107 bit 100 000 000 27 bit 27 bit 28 bit 12 5 MB 108 bit 232 1 33 bit 33 bit 34 bit 512 MiB 232 bit 264 1 65 bit 65 bit 66 bit 2 EiB 264 bit Genauere Betrachtung BearbeitenAnhand der Wertetabelle lasst sich ein Schema zur Berechnung der Funktionswerte herleiten das leichter zu verstehen ist als die formale rekursive Definition Es ist leicht zu erkennen dass die Werte der ersten Zeile einfach eine Liste aller naturlichen Zahlen sind Die jeweiligen Eintrage konnen mit der Formel a 0 m m 1 displaystyle a 0 m m 1 nbsp berechnet werden Alle folgenden Zeilen enthalten einfach Anweisungen in dieser Zeile einen Wert zu suchen Im Falle der Zeile n 1 displaystyle n 1 nbsp vereinfacht sich diese Anweisung dazu den Wert a 0 m 1 displaystyle a 0 m 1 nbsp in der Zeile n 0 displaystyle n 0 nbsp zu suchen aber diese Vereinfachung ist schon etwas schwieriger herzuleiten zum Beispiel a 1 2 a 0 a 1 1 a 0 a 0 a 1 0 a 0 a 0 2 a 0 3 4 Wir betrachten nun einen komplexeren Fall namlich a 4 3 displaystyle a 4 3 nbsp den ersten Funktionswert der so gross ist dass er praktisch nicht dezimal aufgeschrieben werden kann a 4 3 a 3 a 4 2 a 3 a 3 a 4 1 a 3 a 3 a 3 a 4 0 a 3 a 3 a 3 a 3 1 a 3 a 3 a 3 a 2 a 3 0 a 3 a 3 a 3 a 2 a 2 1 a 3 a 3 a 3 a 2 a 1 a 2 0 a 3 a 3 a 3 a 2 a 1 a 1 1 a 3 a 3 a 3 a 2 a 1 a 0 a 1 0 a 3 a 3 a 3 a 2 a 1 a 0 a 0 1 a 3 a 3 a 3 a 2 a 1 a 0 2 a 3 a 3 a 3 a 2 a 1 3 a 3 a 3 a 3 a 2 a 0 a 1 2 a 3 a 3 a 3 a 2 a 0 a 0 a 1 1 a 3 a 3 a 3 a 2 a 0 a 0 a 0 a 1 0 a 3 a 3 a 3 a 2 a 0 a 0 a 0 a 0 1 a 3 a 3 a 3 a 2 a 0 a 0 a 0 2 a 3 a 3 a 3 a 2 a 0 a 0 3 a 3 a 3 a 3 a 2 a 0 4 a 3 a 3 a 3 a 2 5 Das ist fur einige Zeit der einfachste Fall einer solchen Expansion und es ist anhand der Tabelle offensichtlich warum Funktionswerte wie dieser selten direkt berechnet werden Es ist auch interessant festzustellen wie viele Schritte notig sind um schon sehr einfach aussehende Ackermann Ausdrucke zu vereinfachen Jede Zeile im vorigen Beispiel ist eine einzige Anwendung eines der drei Teile der Definition der Ackermannfunktion a 3 a 3 a 3 13 a 3 a 3 65533 Wenn wir an dieser Stelle mehrere logische Schritte uberspringen konnten wir a 2 5 displaystyle a 2 5 nbsp zu 13 auswerten und dann versuchen a 3 13 displaystyle a 3 13 nbsp auszuwerten das ist 65533 Doch schon der nachste Funktionsaufruf liefert mit a 3 65533 displaystyle a 3 65533 nbsp eine Zahl die weit uber die geschatzte Anzahl der Atome im Universum hinausgeht Diese Zahl m displaystyle m nbsp wird schliesslich in die Berechnung a 3 m displaystyle a 3 m nbsp eingesetzt die irgendwann zu einem Ausdruck der Form a 2 a 2 a 2 a 2 0 displaystyle a 2 a 2 a 2 dots a 2 0 dots nbsp ausgeschrieben wurde die aber mit unseren Mitteln nicht mehr aufgeschrieben werden kann Ein weiterer interessanter Aspekt der Ackermann Funktion ist dass die einzige Berechnung die neben den rekursiven Aufrufen tatsachlich auftaucht die Berechnung von a 0 m displaystyle a 0 m nbsp ist die einfach m displaystyle m nbsp um 1 erhoht Literatur BearbeitenWilhelm Ackermann Zum Hilbertschen Aufbau der reellen Zahlen In Mathematische Annalen Band 99 1928 ISSN 0025 5831 S 118 133 doi 10 1007 BF01459088 uni goettingen de Jerrold W Grossman R Suzanne Zeitman An inherently iterative computation of Ackermann s function In Theoretical Computer Science Band 57 Nr 2 3 Mai 1988 S 327 330 doi 10 1016 0304 3975 88 90046 1 Dexter C Kozen The Design and Analysis of Algorithms Springer Berlin 1992 ISBN 3 540 97687 6 Uwe Schoning Theoretische Informatik kurzgefasst Spektrum Akademischer Verlag Heidelberg 2001 ISBN 3 8274 1099 1 Yngve Sundblad The Ackermann Function A Theoretical Computational and Formula Manipulative Study In BIT numerical mathematics Springer Dordrecht 11 1971 S 107 119 ISSN 0006 3835 Weblinks BearbeitenErklarungsvideo zur Ackermannfunktion englisch Einzelnachweise Bearbeiten Peter Rozsa Konstruktion nichtrekursiver Funktionen In Mathematische Annalen 111 1935 S 42 60 P K Agarwal M Sharir Davenport Schinzel sequences and their geometric applications In Handbook of computational geometry 2000 S 1 47 Fur Details zum Beweis sehe man z B im Buch von Uwe Schoning nach siehe Literatur Jerrold W Grossman R Suzanne Zeitman An inherently iterative computation of ackermann s function In Theoretical Computer Science 57 Jahrgang Nr 2 3 Mai 1988 S 327 330 doi 10 1016 0304 3975 88 90046 1 nbsp Dieser Artikel wurde am 22 August 2004 in dieser Version in die Liste der exzellenten Artikel aufgenommen Abgerufen von https de wikipedia org w index php title Ackermannfunktion amp oldid 238902382