{"id":1261,"date":"2013-04-07T12:48:06","date_gmt":"2013-04-07T10:48:06","guid":{"rendered":"http:\/\/fernuni.digreb.net\/?p=1261"},"modified":"2025-11-25T23:10:53","modified_gmt":"2025-11-25T22:10:53","slug":"tib-maschinenmodelle-und-komplexitatsklassen-lernziele-ke1","status":"publish","type":"post","link":"https:\/\/fernuni.digreb.net\/?p=1261","title":{"rendered":"TIB: Maschinenmodelle und Komplexit\u00e4tsklassen (Lernziele KE1, Update 4)"},"content":{"rendered":"<p><strong>Update 6<\/strong>: Gro\u00dfe Fehlerkorrektur. Finde ich super, dass Ihr euch die M\u00fche macht, die Fehler aufzuschreiben. Das hilft dem nachfolgenden Leser ungemein! Danke Walter.<\/p>\n<p><strong>Update 5<\/strong>: Fehlende Marke 4 im Flussdiagramm hinzugef\u00fcgt. Die Berechnung musste daher geringf\u00fcgig ge\u00e4ndert werden (Danke, Alex).<\/p>\n<p><strong>Update 4<\/strong>: Tippfehler beseitigt in Lernziel 3 nach Kommentar von Carina.<\/p>\n<p><strong>Update 3<\/strong>: Nach dem Einwand von Philipp habe ich das Flussdiagramm abge\u00e4ndert. Im Skript wird als Ausgabeband 0 verwendet, Band 1 ist das Eingabeband und der Rest sind Arbeitsb\u00e4nder. Ich habe mich hier nicht so ganz daran gehalten, da es f\u00fcr das Beispiel unwesentlich ist.<\/p>\n<p>Ist aber nat\u00fcrlich nicht sch\u00f6n wenn ich mich nah am Skript bewegen und Details vernachl\u00e4ssige, die das Verst\u00e4ndnis erschweren. Daher: Danke f\u00fcr das aufmerksame Lesen \ud83d\ude09 <strong>Band 0<\/strong> ist nun das Ausgabeband.<\/p>\n<p><strong>Update<\/strong>: Mittlerweile ist <a title=\"TIA: Berechenbarkeit auf anderen Mengen (Lernziele KE7, 1\/2)\" href=\"https:\/\/fernuni.digreb.net\/?p=1321\">KE7 von TIA<\/a> bereits fertig.<\/p>\n<p><strong>Update:<\/strong>&nbsp;Hier habe ich bei der \u00dcberarbeitung einige Fehler entfernt, die evtl. zu Verst\u00e4ndnisproblemen gef\u00fchrt h\u00e4tten.<\/p>\n<h2>Lernziel 1<\/h2>\n<p style=\"padding-left: 30px;\"><em>Definition der Komplexit\u00e4tsma\u00dfe Zeit und Band f\u00fcr Turing-Maschinen<\/em><\/p>\n<p>Bevor wir die Komplexit\u00e4tsma\u00dfe definieren k\u00f6nnen, m\u00fcssen wir zun\u00e4chst wissen was Komplexit\u00e4t ist. Hierzu ist im Skript ein sch\u00f6nes Beispiel gegeben: mit der <a title=\"TI: Einzelschritt- und Schrittzahlfunktion sowie \u00dcbergangsrelationen (Update)\" href=\"https:\/\/fernuni.digreb.net\/?p=512\">Schrittzahlfunktion<\/a>&nbsp;haben wir die G\u00fcte einer Maschine, bzw. eines konkreten Programms. Wir haben jedoch ein gesteigertes Interesse an der Komplexit\u00e4t des <strong>effizientesten Programms<\/strong> f\u00fcr einen Algorithmus. D.h. wir suchen obere (jede Schranke, die \u00fcber der Schranke eines bereits bekannten Programms f\u00fcr unseren Algorithmus liegt) und untere Schranken (die minimalste Schranke f\u00fcr alle Programme zu unserem Algorithmus).<\/p>\n<p>Zus\u00e4tzlich dazu wird im Skript der Begriff Sprache definiert:<\/p>\n<blockquote><p>Sei \\(M\\) eine \\(TM\\) \u00fcber dem Ein-\/Ausgabealphaber \\(\\Sigma\\). Dann ist<\/p>\n<p>\\(L_M := \\{x\\in\\Sigma^{*}\\mid f_M(x) = \\varepsilon\\}\\) die von \\(M\\) erkannte Sprache.<\/p>\n<p>Ist \\(f_M\\) total, so sagen wir: \\(M\\) entscheidet die Sprache \\(L_M\\).<\/p><\/blockquote>\n<p>Wie wir wissen beinhaltet \\(\\Sigma^{*}\\) alle W\u00f6rter \u00fcber dem Eingabealphabet \\(\\Sigma\\). H\u00e4lt die Maschine \\(TM\\) in einem Endzustand wenn ein Wort \\(x\\) aus \\(\\Sigma^{*}\\) in diese eingegeben wird, so wird das Wort \\(x\\) von der Maschine \\(TM\\) akzeptiert. Alle von \\(TM\\) akzeptierten Worte aus&nbsp;\\(\\Sigma^{*}\\) werden die von \\(TM\\) akzeptierte Sprache \\(L_M\\) genannt.<\/p>\n<p>Erkannte\/Akzeptierte Sprachen sind die <a title=\"TI: Mengen (Lernziele KE6, 1\/2)\" href=\"https:\/\/fernuni.digreb.net\/?p=1117\">rekursiv aufz\u00e4hlbaren<\/a> Sprachen, d.h. sie terminieren ggf. nicht f\u00fcr jede aber in jedem Fall f\u00fcr jede akzeptierte Eingabe. Wir haben also eine Positiv- oder Negativentscheidung f\u00fcr eine akzeptierte Eingabe (aber nicht beides). D. h. die Maschine h\u00e4lt nur bei akzeptierten Eingaben. Bei anderen Eingaben l\u00e4uft sie ewig weiter. Das Problem dabei ist, dass wir letztendlich nicht wissen, ob eine Eingabe nun tats\u00e4chlich erkannt \/ akzeptiert wird. Evtl. rechnet die Maschine ja noch f\u00fcr die Eingabe&#8230;<\/p>\n<p>Die <a title=\"TI: Mengen (Lernziele KE6, 1\/2)\" href=\"https:\/\/fernuni.digreb.net\/?p=1117\">entscheidbaren<\/a> Sprachen &#8211; also bei den Eingaben, wo die Maschine in jedem Fall mit einer Positiv- oder Negativentscheidung terminiert, \\(f_M\\) ist als \u00fcberall definiert, d.h. total &#8211; nennen wir rekursiv. Hier haben wir f\u00fcr jede Eingabe (irgendwann) einen finalen Zustand der Maschine, der uns f\u00fcr eine EIngabe \\(X\\) die Entscheidung mitteilt.<\/p>\n<p>Was sind aber nun Komplexit\u00e4tsma\u00dfe Zeit\/Band f\u00fcr \\(TM\\)? Eine \\(TM\\) ist ein abstraktes Modell eines Rechners. Mit der Schrittzahlfunktion \\(t_M\\) haben wir unsere Rechenzeit f\u00fcr die Maschine \\(M\\), d.h. \\(t_M\\) ist unsere <strong>Zeitkomplexit\u00e4t<\/strong>. Der Bandbedarf ist unser \\(s_M\\), d.h. unsere <strong>Bandkomplexit\u00e4t.<\/strong>&nbsp;Sie gibt an wie viele der Felder beim erreichen der Endkonfiguration (d.h. das Ergebnis steht auf dem Ausgabeband) auf den Arbeitsb\u00e4ndern benutzt wurden. Durch die im Skript gemachten Einschr\u00e4nkungen des Befehlssatzes (Ein- und Ausgabeband kann nicht als Arbeitsband missbraucht werden) f\u00fcr die Maschine, brauchen Ein- und Ausgabeband nicht in die Berechnung einbezogen zu werden. Versuchen wir es an einem einfachen Beispiel zur Verdeutlichung.<\/p>\n<p><strong>Beispiel f\u00fcr Band- und Zeitkomplexit\u00e4t<\/strong><\/p>\n<p>Wir nehmen eine simple Maschine \\(M\\), die uns \\(f(n) := n+1\\) ausgibt.<\/p>\n<p style=\"text-align: center;\"><a href=\"https:\/\/fernuni.digreb.net\/wp-content\/uploads\/2013\/04\/k1_tm22.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-2746\" style=\"margin-left: 00px; margin-right: 100px;\" src=\"https:\/\/fernuni.digreb.net\/wp-content\/uploads\/2013\/04\/k1_tm22-300x140.png\" alt=\"\" width=\"400\" height=\"187\" srcset=\"https:\/\/fernuni.digreb.net\/wp-content\/uploads\/2013\/04\/k1_tm22-300x140.png 300w, https:\/\/fernuni.digreb.net\/wp-content\/uploads\/2013\/04\/k1_tm22.png 885w\" sizes=\"auto, (max-width: 400px) 100vw, 400px\" \/><\/a><\/p>\n<p>Funktionsweise: die Maschine tut nichts anderes als die Eingabe von Band 1 (Eingabeband) auf Band 2 (Arbeitsband) zu schreiben, eine 1 hinzuzuf\u00fcgen, dann den Lesekopf wieder an den Anfang von Band 2 zu setzen und seinen Inhalt auf Band 0 (Ausgabeband) zu schreiben. Beachtet: \\(c\\) ist das Anfangs- und \\(\\\\\\)$ das Endzeichen. So k\u00f6nnen wir auf den B\u00e4ndern von Wortanfang bis Wortende navigieren. Nachdem wir ein Zeichen auf ein Band geschrieben haben m\u00fcssen wir den Schreibkopf auf Band \\(0\\) auch nicht eine Stelle weiter r\u00fccken, da wir im Skript die \\(TM\\) dahingehend erweitert haben, dass das automatisch passiert.<\/p>\n<p>Analysieren wir zun\u00e4chst die Zeit und nehmen als Eingabe ein \\(n=2=11\\). Nehmt euch am besten Stift und Paper und spielt die Maschine nach. Wir gehen davon aus, dass sich der Lesekopf zu Beginn auf Band 0 bei \\(c\\) befindet, bei Band 1 und 2 jedoch direkt auf dem ersten leeren Feld nach dem Anfangszeichen \\(c\\). Am Ende sollten die Folge der besuchten Marken so aussehen:<\/p>\n<p style=\"padding-left: 30px;\">0,1,2,3,4,1,2,3,4,1,5,6,7,6,7,6,7,6,8,9,10,11,9,10,11,9,10,11,9,12.<\/p>\n<p>Wenn ich mich nicht verz\u00e4hlt habe sind es genau 30 besuchte Marken.<\/p>\n<p>Fangen wir also mit der Absch\u00e4tzung an:<\/p>\n<ul style=\"list-style-type: disc; padding-left: 30px;\">\n<li><span style=\"line-height: 13px;\">Marke 0 wird immer 1x besucht (1)<\/span><\/li>\n<li>Marken 1, 2, 3 und 4 werden genau \\(2\\) mal besucht und zum Abschluss noch einmal Marke 1 um dann zu Marke 5 zu kommen \\((4*2+1) = 9\\)<\/li>\n<li>Marke 5 wird immer 1x besucht (1)<\/li>\n<li>Marken 6 und 7 werden \\(2*(2+1) = 6\\) besucht. Wir haben am Ende unseren Lesekopf auf dem Anfangszeichen \\(c\\) bei Band \\(2\\), wo ja am Ende &#8222;\\(c111\\\\\\)$&#8220; steht. Also laufen wir insgesamt 3 Mal zur\u00fcck bis wir wieder auf dem Anfangsmarker &nbsp;\\(c\\) landen. Anschlie\u00dfend wird noch einmal Marke 6 abgefragt und wir kommen auf \\(7\\) Schritte<\/li>\n<li>Marke 8 wird immer 1x besucht (1)<\/li>\n<li>Marken 9, 10, und 11 werden \\(3*(2+1) = 9\\) Mal besucht, da wir uns ja auf dem Band 2 3 Mal nach vorne bewegen m\u00fcssen um den Endmarker \\(\\\\\\)$ zu erreichen. Dann wird Marke 9 noch einmal abgefragt und wir sind bei \\(10\\) Schritten<\/li>\n<li>Marke 12 ist die Abschlussmarke, welche nat\u00fcrlich nur \\(1\\) Mal besucht wird.<\/li>\n<\/ul>\n<p>Insgesamt sind wir dann also bei <strong>32<\/strong>&nbsp;Marken, was unserem manuellen Durchlauf entspricht. Hier sieht man direkt ein, dass die Schleifendurchl\u00e4ufe von der Eingabe \\(n\\) abh\u00e4ngen. Ersetzen wir unsere \\(2\\) nun mit \\(n\\), so kommen wir auf die Gleichung:<\/p>\n<p>\\(1+4n+1+1+2(n+1)+1+1+3(n+1)+1+1=9n+12\\).<\/p>\n<p>Das ist unsere &#8211; aufgrund der Einfachheit der Maschine ziemlich genaue &#8211; Absch\u00e4tzung der Zeitkomplexit\u00e4t: \\(t_M(n) = 9n+12\\).<\/p>\n<p>Da uns aber in der Laufzeitberechnung die Konstanten kaum interessieren (sie h\u00e4ngen nicht von der Eingabe, sondern nur von der Rechengeschwindigkeit ab), k\u00f6nnen wir sie streichen. F\u00fcr uns spielt nur die Komplexit\u00e4t eine Rolle, die von der Eingabe abh\u00e4ngt (zwar bei beliebigen Rechenleistungen vielleicht schneller ist, aber trotzdem gleiche von der Eingabe abh\u00e4ngige Wachstum hat), so dass die Laufzeit unseres einfachen Programmes in die Komplexit\u00e4tsklasse \\(O(n)\\) f\u00e4llt und damit ein lineares Wachstum aufweist.<\/p>\n<p>Was ist aber nun mit der <strong>Bandkomplexit\u00e4t<\/strong>? Die ist noch einfacher abzusch\u00e4tzen. Wie sieht denn die bei der Eingabe von \\(n\\) erreichte Endkonfiguration aus? Die Anfangskonfiguration w\u00e4re z. B. bei der Eingabe von \\(n = 2 = 11\\): \\((0,(c,c11\\$,c))\\). Die von da aus erreiche Endkonfiguration w\u00e4re: \\((12,(c111$,c11$,c111$))\\). Da wir uns um das Ein- und Ausgabeband nicht k\u00fcmmern, sondern nur die Arbeitsb\u00e4nder (davon haben wir nur eines: Band 2) z\u00e4hlen, landen wir bei einem Speicherplatzverbrauch von \\(n+1\\). \\(s_M(n) = n+1\\),&nbsp;was unsere Bandkomplexit\u00e4t in die selbe Komplexit\u00e4tsklasse bef\u00f6rdert wie unsere Laufzeit: \\(O(n)\\).<\/p>\n<p>Fertig!<\/p>\n<p><strong>Antwort zum Lernziel<\/strong>: bei den Komplexit\u00e4tsma\u00dfen f\u00fcr Turing-Maschinen unterscheiden wir zwischen Band- und Zeitkomplexit\u00e4t. Ersteres ist der Bandverbrauch, der mit \\(s_M(n)\\) bezeichnet wird und die Auslastung der Arbeitsb\u00e4nder (Eingabe- und Ausgabeband begutachten wir nicht) angibt. Letzteres ist \\(t_M(n)\\) und gibt die Anzahl der Schritte an, die bei der Eingabe von \\(n\\) zur Endkonfiguration f\u00fchrt.<\/p>\n<h2>Lernziel 2<\/h2>\n<p style=\"padding-left: 30px;\"><em>Definition der Komplxit\u00e4tsklassen<\/em><\/p>\n<p>Damit sind wir auch schon bei den Klassen angekommen. Oben haben wir die konkrete Komplexit\u00e4t einer Maschine berechnet. Aber was ist wenn wir noch ein paar unsinnige Schleifen in die obige Maschine einbauen, die von der Eingabe \\(n\\) abh\u00e4ngen ? Wir k\u00f6nnten die Berechnung der simplen Funktion \\(f(n) = n+1\\) durch diese Schleifen dann so verlangsamen, dass die Berechnung erst in exponentieller Zeit abgeschlossen w\u00e4re. Selbst wenn es totaler Unfug ist.<\/p>\n<p>Ihr ahnt es wahrscheinlich schon: wir haben keinerlei Interesse an der Komplexit\u00e4t einer konkreten Maschine, die unsere Funktion berechnet. Denn davon kann es viele geben. F\u00fcr uns ist diese Aussage nur in Bezug auf die Funktion selbst spannend: wie komplex (schnell) ist der schnellste Algorithmus, der unsere Funktion berechnet?<\/p>\n<p>Ein Beispiel gef\u00e4llig? Gerne: <a href=\"http:\/\/de.wikipedia.org\/wiki\/Rucksack-Problem\">Rucksack-Problem<\/a><a href=\"http:\/\/de.wikipedia.org\/wiki\/Rucksack-Problem\"><\/p>\n<p><\/a><\/p>\n<p>Eine rekursive Implementierung des Algorithmus hat eine Zeitkomplexit\u00e4t aus der Klasse \\(O(m^n)\\) (polynomielles Wachstum) und den Speicherplatzverbrauch von \\(O(n)\\) (lineares Wachstum). Mittels dynamische Programmierung ist es jedoch m\u00f6glich die Laufzeit auf \\(O(m*n)\\) zu dr\u00fccken (hierzu bitte den Wikipedia-Artikel studieren, ggf. schreibe ich sp\u00e4ter auch mal was dazu). Zun\u00e4chst hatte also unsere Funktion \\(f_{Rucksack}\\) die Komplexit\u00e4t \\(O(m^n)\\). Dann haben wir es geschafft einen Algorithmus (anhand einer Maschine) zu entwerfen, die unsere Funktion&nbsp;\\(f_{Rucksack}\\) in die Komplexit\u00e4tsklasse \\(O(m*n)\\) brachte. Und wenn wir keinen anderen, effizienteren Algorithmus finden, bleibt sie auch erstmal dort.<\/p>\n<p>Ist nun klar warum wir uns f\u00fcr die maximale\/minimale Komplexit\u00e4t der Algorithmen und nicht konkreter Maschinen interessieren?<\/p>\n<p><strong>Antwort zum Lernziel: <\/strong>die Komplexit\u00e4tsklassen geben an, welche obere Schranke f\u00fcr einen Algorithmus zu erwarten ist und nicht von der konkreten Maschine, vom der der Algorithmus umgesetzt wird. Es interessiert uns also nur der Worst Case. Dieser wird mittels <a href=\"http:\/\/de.wikipedia.org\/wiki\/Landau-Notation\">Landau-Notation<\/a>, auch O-Notation genannt ausgedr\u00fcckt. In den meisten F\u00e4llen ist die Zeit- von h\u00f6herem Interesse als die Bandkomplexit\u00e4t.<\/p>\n<p>Durch diese Abgrenzung k\u00f6nnen wir eine Hierarchie auf den Komplexit\u00e4tsklassen bilden.<\/p>\n<h2>Lernziel 3<\/h2>\n<p style=\"padding-left: 30px;\"><em>Zusammenhang zwischen Band- und Zeitkomplexit\u00e4t<\/em><\/p>\n<p>Das im Skript beschriebene Ph\u00e4nomen ist der <a href=\"http:\/\/en.wikipedia.org\/wiki\/Space%E2%80%93time_tradeoff\">Space Time Trade off<\/a>. In der technischen Informatik durften wir mit Assembler programmieren und konnten so den Speicher- und Rechenzeitverbrauch unserer Programme konkret nachvollziehen. Der Zusammenhang m\u00fcsste den meisten daher klar sein: um Speicherplatz zu sparen kann ich z. B. Schleifen ausschreiben. Der Code wird gr\u00f6\u00dfer aber das Sprungziel der Schleife muss nicht gespeichert werden. Ebenso ergeht es uns mit komprimierten Daten (angelehnt an den Artikel aus der Wikipedia): wir sparen Speicherplatz, vergeuden aber zum Packen und Entpacken Rechenzeit.<\/p>\n<p>Im Skript sind einige Zusammenh\u00e4nge zwischen Rechenzeit und Speicherbedarf aufgestellt. Es gibt ein Mindestma\u00df an Speicherplatz, was ein Algorithmus verbraucht und auch ein Maximum.<\/p>\n<ul>\n<li>\n<blockquote>\\(s_M(x) \\leq t_M(x) + k\\)<\/blockquote>\n<\/li>\n<\/ul>\n<p>Da wir Eingabe- und Ausgabeband nicht ber\u00fccksichtigen ist der Bandbedarf bei der Eingabecodierung festgelegt. Er betr\u00e4gt die Anzahl der B\u00e4nder \\(k\\). Damit ist der Speicherplatzbedarf \\(S(K_0)\\), der Anfangskonfiguration \\(K_0\\) genau gleich \\(k\\). Auch kann er sich in einem Schritt maximal um eines erh\u00f6hen, denn wir k\u00f6nnen ja nur etwas anf\u00fcgen. Damit sagt der obere Satz nichts weiter aus als: &#8222;Der Bandbedarf \\(s_M\\) bei der Eingabe von \\(x\\) ist \\({}\\leq{}\\) der Anzahl der Schritte \\(t_M\\) bei der Eingabe von \\(x\\) plus \\(k\\), eben der Anzahl der B\u00e4nder.<\/p>\n<ul>\n<li>\n<blockquote><p><span style=\"line-height: 13px;\">\\(t_M(x) \\leq (lg(x)+1)\\cdot {c^{s_M(x)+1}}\\)<\/span><\/p><\/blockquote>\n<\/li>\n<\/ul>\n<p>&#8222;Die Anzahl der Schritte bis zur Endkonfiguration bei der Eingabe von \\(x\\) ist \\({}\\leq{}\\) der L\u00e4nge der Eingabe + 1 \\(\\cdot {c^{s_M(x)+1}}\\)&#8222;. Wie kommen wir auf \\((lg(x)+1)\\cdot {c^{s_M(x)+1}}\\)? Hier m\u00fcssen wir etwas ausholen:<\/p>\n<p>&#8211; \\(q\\) ist die Anzahl der Zust\u00e4nde der Maschine, \\(g\\) die Gr\u00f6\u00dfe des Arbeitsalphabets + 1. Da wir \\(q\\) Marker haben, haben wir \\(q\\) Zust\u00e4nde.<\/p>\n<p>&#8211; Auf dem Eingabeband kann es \\(lg(x) +2\\) Werte f\u00fcr die Kopfposition haben (L\u00e4nge des Eingabewortes \\(x\\) plus Anfangs- und Endmarker \\(c\\) und \\(\\\\)$).<\/p>\n<p>&#8211; Auf einem Arbeitsband ist die L\u00e4nge des darauf stehenden Wortes sicher \\({}\\leq s_M(x)\\), d.h. definitiv kleiner\/gleich dem kompletten Speicherplatzbedarf am Ende der Berechnung. Damit kann es maximal \\(s\\) Felder auf dem Arbeitsband geben und damit auch \\(s\\) Kopfpositionen. Jedes der Felder kann entweder beschriftet sein oder nicht (wir schauen nach oben: \\(g\\) ist die Gr\u00f6\u00dfe des Arbeitsalphabets). Diese sind damit durch \\(s\\cdot g^s\\) beschr\u00e4nkt.<\/p>\n<p>&#8211; Die M\u00f6glichkeiten f\u00fcr die Belegung aller Arbeitsb\u00e4nder ist daher h\u00f6chstens: \\({(s\\cdot g^s)}^k\\).<\/p>\n<p>Und damit haben wir maximal \\(q\\cdot(lg(x)+2)\\cdot{(s\\cdot g^s)}^k\\) \u00c4quivalenzklassen, was uns zu der obigen Absch\u00e4tzung bringt: \\(c := 2q\\cdot(2g)^k\\).<\/p>\n<ul>\n<li>\n<blockquote>\\(t_M(x) \\leq c^{s_M(lg(x))}\\)<\/blockquote>\n<\/li>\n<\/ul>\n<p>Hier muss ich erstmal passen. Der Beweis erschlie\u00dft sich mir nicht auf Anhieb. Sobald ich die Zusammenfassung von TIA, KE7 fertig habe werde ich hier nochmal reinschauen. Wer jedoch bis dahin den 3. Teil des Zusammenhangs in klaren Worten ausdr\u00fccken kann, kann es bitte in die Kommentare schreiben. Ich pflege das dann sofort ein.<\/p>\n<p><strong>Antwort zum Lernziel:&nbsp;<\/strong>der Zusammenhang zwischen Zweit- und Bandkomplexit\u00e4t begr\u00fcndet sich in dem sog. Time-Space-Tradeoff. H\u00e4ufig gelingt es uns einen Algorithmus schneller ausf\u00fchren zu k\u00f6nnen, was jedoch oft zum Nachteil des Speicherplatzverbrauchs geschieht. Anders herum k\u00f6nnen wir mit einen h\u00f6heren Speicherplatzverbrauch durchaus Geschwindigkeitsvorteile erzielen.<\/p>\n<p>Ein prominentes Beispiel ist z.B. der Einsatz von Packern, die Daten komprimieren um Speicherplatz zu sparen, aber Rechenzeit aufwenden, da diese Daten wieder entkomprimiert werden m\u00fcssen.<\/p>\n<p>Auch gibt es Untergrenzen, z.B. f\u00fcr die Geschwindigkeit: um eine Eingabe der L\u00e4nge \\(n\\) zu lesen, brauchen wir mindestens \\(n\\) Rechenschritte. Ebenso ergeht es uns mit dem Speicherplatz, denn wir k\u00f6nnen in jedem Schritt nur ein Feld auf dem Band schreiben. D.h. wir k\u00f6nnen bei \\(m\\) Schritten bis zur Endkonfiguration nicht mehr als \\(m\\) Felder des Bandes beschrieben haben.<\/p>\n<h2>Lernziel 4<\/h2>\n<p style=\"padding-left: 30px;\"><em>Darstellung der Aussage der Bandreduktionss\u00e4tze und Beweisidee<\/em><\/p>\n<p>Bei der Normierung werden (\u00e4hnlich wie beim <a title=\"TI: Turing-Maschinen, Hilfssymbole und Lernziele KE3 (Update)\" href=\"https:\/\/fernuni.digreb.net\/?p=754\">Entfernen der Hilfssymbole<\/a>) die alten Befehle durch Befehlsfolgen ersetzt. Dabei werden auch die Worte wie gehabt verschl\u00fcsselt. Ebenso erh\u00f6ht sich der Bandbedarf (er wird durch die M\u00e4chtigkeit des Arbeitsalphabets der urspr\u00fcnglichen Maschine bestimmt). \u00c4hnlich verh\u00e4lt es sich mit den Arbeitsb\u00e4ndern: wir k\u00f6nnen durch Erh\u00f6hung des Bandbedarfs die Arbeitsb\u00e4nder auf Eines reduzieren indem wir die Kopfpositionen durch Markierungen auf dem Band (Spuren) simulieren.<\/p>\n<p>Der Zeit- und Bandbedarf der neuen Maschine kann dann abgesch\u00e4tzt werden durch:<\/p>\n<blockquote>\\({t_M}^{&#8218;}\\leq c\\cdot(t_M(x))^2 + c\\)\n\\({s_M}^{&#8218;}\\leq c\\cdot s_M(x) + c\\)<\/blockquote>\n<p>Eine Effizienzsteigerung im Bereich Zeit erzielt man hier nur noch mit zwei Arbeitsb\u00e4ndern statt nur einem zur Simulation von \\(k\\) Arbeitsb\u00e4ndern<\/p>\n<p style=\"padding-left: 30px;\">\\({t_M}^{&#8218;}\\leq c\\cdot t_M(x)\\cdot log\\text{ }t_M(x) + c\\)<\/p>\n<p style=\"padding-left: 30px;\">\\({s_M}^{&#8218;}\\leq c\\cdot s_M(x) + c\\)<\/p>\n<p><strong>Antwort zum Lernziel:<\/strong>&nbsp;Bei der Normierung einer Turing-Maschine, so dass diese nur ein Arbeitsband hat werden alle anderen Arbeitsb\u00e4nder auf das einzig verbliebene Arbeitsband codiert. Das geschieht in \u00e4hnlicher Weise wie bei den Hilfssymbolen: die Symbole aus dem Arbeitsalphabet werden durch Worte verschl\u00fcsselt. Bei den Kopfpositionen arbeiten wir mit \\(+\\) und \\(&#8211;\\) auf dem Band. Das bringt uns zur oberen Absch\u00e4tzung wenn wir nur ein Arbeitsband verwenden.<\/p>\n<p>Verwenden wir zwei Arbeitsb\u00e4nder k\u00f6nnen wir zumindest im Bereich Zeit die Effizient erh\u00f6hen und kommen so zur unteren Absch\u00e4tzung. Hier werden zus\u00e4tzlich Teile der Spuren mit dem zweiten Arbeitsband so verschoben, dass die Kopfmarkierungen auf den versch. Spuren stets an der selben Position sind (im Skript ist dazu kein detaillierter Beweis angegeben).<\/p>\n<p><del>Die Band- und Zeitkomplexit\u00e4t wird durch die Normierung nur durch eine Konstante \\(c\\) erh\u00f6ht, so dass sie nicht gro\u00df ins Gewicht f\u00e4llt.<\/del><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Update 6: Gro\u00dfe Fehlerkorrektur. Finde ich super, dass Ihr euch die M\u00fche macht, die Fehler aufzuschreiben. Das hilft dem nachfolgenden Leser ungemein! Danke Walter. Update 5: Fehlende Marke 4 im Flussdiagramm hinzugef\u00fcgt. Die Berechnung musste daher geringf\u00fcgig ge\u00e4ndert werden (Danke, Alex). Update 4: Tippfehler beseitigt in Lernziel 3 nach Kommentar von Carina. Update 3: Nach &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/fernuni.digreb.net\/?p=1261\" class=\"more-link\"><span class=\"screen-reader-text\">\u201eTIB: Maschinenmodelle und Komplexit\u00e4tsklassen (Lernziele KE1, Update 4)\u201c <\/span>weiterlesen<\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[],"class_list":["post-1261","post","type-post","status-publish","format-standard","hentry","category-theoretische-informatik"],"_links":{"self":[{"href":"https:\/\/fernuni.digreb.net\/index.php?rest_route=\/wp\/v2\/posts\/1261","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fernuni.digreb.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fernuni.digreb.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fernuni.digreb.net\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/fernuni.digreb.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1261"}],"version-history":[{"count":72,"href":"https:\/\/fernuni.digreb.net\/index.php?rest_route=\/wp\/v2\/posts\/1261\/revisions"}],"predecessor-version":[{"id":3539,"href":"https:\/\/fernuni.digreb.net\/index.php?rest_route=\/wp\/v2\/posts\/1261\/revisions\/3539"}],"wp:attachment":[{"href":"https:\/\/fernuni.digreb.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1261"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fernuni.digreb.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1261"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fernuni.digreb.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1261"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}