TU Ilmenau, Fakultät IA FG Telematik/Rechnernetze Prof. Dr.-Ing. G. Schäfer http://www.tu-ilmenau.de/telematik/aup Algorithmen und Programmierung WS 14/15 Übungsblatt 4 Abgabe am Mittwoch 19.11.2014 in der Vorlesung Aufgabe 1 (Abstrakte Maschinen) 2 + 1 Punkte Gegeben sei eine abstrakte Maschine M = (X, Y, K, α, ω, τ, σ) mit N Y =N K =N×N×N×N X= α(n) = (n, 0, 1, 0) τ ((n, z, a, b)) = (n, z + 1, a + b, a) ω((n, z, a, b)) = a ( true , falls n = z σ((n, z, a, b)) = false , sonst (a) Geben Sie alle Konfigurationen an, die M für die Eingabe 6 durchläuft, sowie das Ergebnis der Ausführung. (b) Welche Funktion wird von M berechnet? Aufgabe 2 (Eigenschaften von Markov-Algorithmen) 1 + 2 + 1 + 3 Punkte Markov-Algorithmen können in Form von Markov-Tafeln oder als Regeln notiert werden. (a) Welche Bedingungen führen zum Abbruch der Ausführung eines Markov-Algorithmus, welcher in Form von Regeln notiert ist? (b) Führen Sie den nachfolgenden Markov-Algorithmus mit der Eingabe 1010 aus. Geben Sie alle Zwischenschritte an und unterstreichen Sie jeweils den Teil der Zeichenkette, der im folgenden Schritt ersetzt wird. |0 |1 1 0 → → → → 0|| 1|| | ε (c) Welche Funktion realisiert der beschriebene Algorithmus? (d) Beide Notationsformen (Regeln und Tafeln) besitzen die gleiche Ausdruckskraft. Dennoch ist die Umwandlung eines als Regeln notierten Algorithmus in eine MarkovTafel sehr viel einfacher als umgekehrt. Beschreiben Sie informal ein allgemeines Verfahren, um einen beliebigen Markov-Algorithmus, welcher als Regeln notiert ist, in eine Markov-Tafel zu überführen. Wenden Sie Ihre Methode auf den oben gezeigten Markov-Algorithmus an. Bitte wenden! 2 Algorithmen und Programmierung WS 14/15 Aufgabe 3 (Markov-Algorithmen: Halbierung) Übungsblatt 4 4 Punkte Entwerfen Sie einen Markov-Algorithmus, welcher als Eingabe eine unär dargestellte natürliche Zahl (z.B. 3 = |||) erhält und als Ausgabe das Ergebnis ihrer Division durch 2 berechnet. Die Kodierung der Ausgabe soll ebenfalls unär sein, mit der Ausnahme, dass das Minus-Zeichen 21 repräsentiert. Das Minus-Zeichen darf maximal einmal und nur am Ende vorkommen (Beispiel: ||||| ⇒∗ ||-). Geben Sie den Algorithmus in Form einer Markov-Tafel an. Aufgabe 4 (Fibonacci-Zahlen) 4 + 1 + 4 Punkte In der Vorlesung wurde Ihnen der folgende applikativer Algorithmus zur Berechnung der n-ten Fibonacci-Zahl vorgestellt. fib(n) = if (n = 0) ∨ (n = 1) then 1 else fib(n - 1) + fib(n - 2) fi (a) Werten Sie fib(3) systematisch und vollständig aus. (b) In der Vorlesung (Kaptel 4, Folie 47) wurde ein äquivalenter imperativer Algorithmus vorgestellt. Vergleichen Sie die Effizienz beider Algorithmen hinsichtlich ihrer Laufzeit (eine exakte Angabe der Laufzeit ist nicht erforderlich) und Begründen Sie die Unterschiede in der Effizienz. (c) Geben Sie einen äquivalenten applikativen Algorithmus an, welcher eine ähnliche Laufzeit wie der imperative Algorithmus aus der Vorlesung besitzt. Aufgabe 5 (Registermaschine) 4 Punkte Gegeben sei eine Registermaschine mit dem folgenden Programm, wobei das Register c1 als Eingabe betrachtet wird: 1 2 3 4 5 6 7 8 9 10 11 12 13 CLOAD 4 STORE 4 SUB 4 STORE 2 MULT 2 STORE 3 LOAD 1 SUB 3 IF c0 = 0 GOTO 13 LOAD 2 CADD 1 GOTO 4 END Geben Sie die Folge der Konfigurationen an, die bei der Abarbeitung des Programms beginnend mit (1, 0, 8, 0, 0, 0,. . . ) entsteht (Beschränkung auf die ersten vier Speicherregister.). Aufgabe 6 (Vollkommene Zahlen) N 3 Punkte Eine Zahl n ∈ heißt perfekt oder vollkommen, wenn die Summe ihrer Teiler gleich n ist. Dabei sind die Teiler echt kleiner als n. Beispielsweise ist 6 = 1 + 2 + 3 eine perfekte Zahl. Schreiben Sie ein Java-Programm, das alle perfekten Zahlen bis 5000 bestimmt und geben Sie diese in Ihrer Lösung an.