McCarthy-Funktion |
![]() |
![]() |
Letztmalig dran rumgefummelt: 30.05.12 16:45:25 |
![]() |
Amerikanischer Mathematiker, der in den 50er Jahren die Programmiersprache LISP implementiert hat. Diese Funktion ist neben einigen anderen bis heute unschlagbar als Anwendung zum Erlernen rekursiver Denkstrukturen. - und genau deshalb nehmen wir sie hier auseinander ;-) | ||||||
![]() |
1. Problembeschreibung 2. Hintergründe und Zusammenhänge - Einordnung in Klassen 3. Lösungsalgorithmen 4. Programmvorschläge 5. Zusammenfassung 6. Weiterführende Literatur 7. Linkliste zum Thema |
||||||
![]() |
|
||||||
![]() |
Beachte vor allem bei Problemlösungsalgorithmen: Murphys Gesetze sowie deren Optimierung durch Computer sowie deren Optimierung durch Computer |
1. Problembeschreibung |
![]() |
![]() |
![]() |
![]() |
Nach Durchlaufen endlich vieler Zwischenschritte wird 91 erreicht und ist nicht mehr weiter zu vereinfachen, da sich die Funktionen dann unendlich lange selbst gegenseitig aufrufen. McCarthy terminiert nicht! |
![]() |
![]() Die McCarthy-Funktion |
![]() |
mit 1 <= x <= 101 |
![]() |
2. Hintergründe, Zusammenhänge - Einordnung in Klassen |
![]() |
![]() |
![]() |
![]() |
Der Lösungsalgorithmus für die McCarthy-Funktion |
![]() |
effiziente Lösung nur als rekursiver Algorithmus |
![]() |
gegenseitige Rekursion - die Funktionen für größer 100 und kleiner 100 für die Zwischenwerte rufen sich gegenseitig auf |
![]() |
3. Lösungsalgotihmus |
![]() |
![]() |
![]() |
![]() |
Wenn es mindestens einen Lösungsansatz gibt, dann versuche, aus den gegebenen Wortpaaren identische Sätze auf beiden Seiten der Gleichung zu bilden. Wiederhole dies solange, bis keine weitere Möglichkeit mehr existiert. |
![]() |
McCarthy für x=1 f(1)=1+11=f(f(12)) f(12)=12+11=f(f(23)) f(23)=23+11=f(f(34)) f(34)=34+11=f(f(45)) f(45)=45+11=f(f(56)) f(56)=56+11=f(f(67)) f(67)=67+11=f(f(78)) f(78)=78+11=f(f(89)) f(89)=89+11=f(f(100)) f(100)=100+11=f(f(111)) f(111)=111-10=101 f(101)=101-10=91 |
![]() |
McCarthy für x=5 f(5)=5+11=f(f(16)) f(16)=16+11=f(f(27)) f(27)=27+11=f(f(38)) f(38)=38+11=f(f(49)) f(49)=49+11=f(f(60)) f(60)=60+11=f(f(71)) f(71)=71+11=f(f(82)) f(82)=80+11=f(f(93)) f(93)=93+11=f(f(104)) f(104)=104-10=94 f(94)=94+11=f(f(105)) f(105)=105-10=95 f(95)=95+11=f(f(106)) f(106)=106-10=96 f(96)=96+11=f(f(107)) f(107)=107-10=97 f(97)=97+11=f(f(108)) f(108)=108-10=98 f(98)=98+11=f(f(109)) f(109)=109-10=99 f(99)=95+11=f(f(110)) f(110)=110-10=100 f(100)=100+11=f(f(111)) f(111)=111-10=101 f(101)=101-10=91 |
4. Programmvorschläge |
![]() |
![]() |
![]() |
![]() |
Was auch immer ich tue, muss ich rekursiv lösen und die Mächtigkeit schon für kleine Argumente ist durch die Anzahl der Zwischenwerte enorm. Auch wird eine extreme Rekursionstiefe erreicht und somit der Speicher maximal ausgelastet. Effizient ist die Abarbeitung aber trotzdem noch, da keine weitere Lösungsmöglichkeit existiert. |
![]() |
Die nachfolgend beschriebene Lösung wurde mit Turbo-PASCAL 7.0 erstellt FUNCTION mc_carthy__kleiner_100 (up_zahl:BYTE):BYTE;
BEGIN{begin
mc_carthy__kleiner_100} FUNCTION mc_carthy__groesser_100 (up_zahl:BYTE):BYTE;
BEGIN{begin
mc_carthy__groesser_100} |
![]() |
|
![]() |
5. Zusammenfassung |
![]() |
![]() |
![]() |
![]() |
Hier greifen wir unter anderem die Argumente für einen Algorithmus auf und vergleichen, ob Übereinstimmung in allen Punkten gegeben ist. |
![]() |
Endlichkeit der Beschreibung ist gegeben |
![]() |
Eindeutigkeit ist gegeben - jeder Schritt ist für jede Bedingung eindeutig fest vorgegeben und lässt keine Abweichung zu |
![]() |
Effektivität ist gegeben - jeder Schritt ist ausführbar |
![]() |
Terminierung ist nicht gegeben - der Algorithmus läuft nach erreichen des Zwischenergebnisses 91 ewig und generiert einen Stapelüberlauf |
![]() |
Determiniertheit ist gegeben, der Folgeschritt nach einer Operation ist immer bekannt |
6. Weiterführende Literatur |
![]() |
![]() |
![]() |
![]() |
|
![]() |
der Lösungsalgorithmus der Türme von Hanoi ist nicht komplex, jedoch schon mit geringer Anzahl n mächtig |
![]() |
es muss also insgesamt hoher Lösungsaufwand betrieben werden - auch ein Computer wird für n=1000 in absehbarer Zeit keine Lösung bringen |
![]() |
7. Links zum Thema |
![]() |
![]() |
![]() |
![]() |
Viele gibt es - die meisten sind JAVA-basierte Spiele, um den erkannten Lösungsalgorithmus nach zu vollziehen. Wie gesagt, wenn Du vor hast, das Spiel noch am laufenden Tag zu beenden, verwnde keine Scheibenzahl größer 20 - das ist dann schon nicht mehr zu schaffen. |
![]() |
http://www.panix.com/~derwisch/hannes/elug/lisp/scheme.pdf |
![]() |
http://www-is.informatik.uni-oldenburg.de/~dibo/teaching/java9900/vorlesungen/vorlesung7/tsld031.htm |
![]() |
http://www.lexikon-definition.de/LISP.html |
![]() zur Hauptseite |
© Samuel-von-Pufendorf-Gymnasium Flöha | © Frank Rost im August 1995 |
... dieser Text wurde nach den Regeln irgendeiner Rechtschreibreform verfasst - ich hab' irgendwann einmal beschlossen, an diesem Zirkus nicht mehr teilzunehmen ;-) „Dieses Land braucht eine Steuerreform, dieses Land braucht eine Rentenreform - wir schreiben Schiffahrt mit drei „f“!“ Diddi Hallervorden, dt. Komiker und Kabarettist |
Diese Seite wurde ohne Zusatz irgendwelcher Konversationsstoffe erstellt ;-) |