Üungen.

Slides:



Advertisements
Ähnliche Präsentationen
Algorithmen und Datenstrukturen
Advertisements

Algorithmentheorie 08 – Dynamische Programmierung (1)
Christian Scheideler SS 2009
Motivation Bisher: Codes mit möglichst kurzer Codelänge.
Rekursion: Rekurrenz: Algorithmen rufen sich selbst (rekursiv) auf.
Falls Algorithmen sich selbst rekursiv aufrufen, so kann ihr Laufzeitverhalten bzw. ihr Speicherplatzbedarf in der Regel durch eine Rekursionsformel (recurrence,
Programmierung 1 - Repetitorium
Kapitel 3 Arithmetische Schaltkreise
Schnelle Matrizenoperationen von Christian Büttner
Rekursion vs. Iteration
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Kapitel 6: Klassifizierung von Sortiertechniken
Suche in Texten (Stringsuche )
3. Berechenbarkeit Wann ist eine Funktion (über den natürlichen Zahlen) berechenbar? Intuitiv: Wenn es einen Algorithmus gibt, der sie berechnet! Was heißt,
Übung 2.1 Information Wieviele Fragen benötigen Sie beim „Zahlenraten“
Anhang F:Beispielklausur In diesem Kapitel wird ein Beispiel für eine Klausur vorgestellt. Dabei sind jeweils die Aufgaben und die Lösungen gegeben. Beachten.
Lösung 6.3 Denksportaufgabe
Lösung Turing-Maschine
Übung 5.1Elemente 1.Formen Sie die Elemente Zuweisung Folge Auswahl (einarmige, zweiarmige, mehrarmige) Schleife (mit vorausgehender/nachfolgender Prüfung)
Übung 6.6Schranken 1.Angenommen, Ihr Algorithmus habe einen Aufwand von g(n) = 5n 3 + n für alle n a)Geben sie eine obere Schranke O(g(n)) an. b)Beweisen.
Beispielklausur In diesem Kapitel wird ein Beispiel für eine Klausur vorgestellt. Dabei sind jeweils die Aufgaben und die Lösungen gegeben. Beachten Sie.
Kapitel 6 Algorithmentheorie
Übung 6.1Turing-Maschine 1.Machen Sie sich mit der Funktionsweise des Busy Beaver-Programms vertraut Vollziehen sie die 11 Schritte der ersten Turing-Tabelle.
Dynamische Programmierung (2) Matrixkettenprodukt
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Tobias Lauer.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen Halbzeit: Was haben wir bisher gelernt? Prof. Th. Ottmann.
WS Algorithmentheorie 08 – Dynamische Programmierung (2) Matrixkettenprodukt Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (27 – Kürzeste Wege) Prof. Th. Ottmann.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 4 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 2 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
Union-Find-Strukturen
Vorlesung Informatik 3 Einführung in die Theoretische Informatik (17 –Turingmaschinen) Prof. Dr. Th. Ottmann.
Minimum Spanning Tree: MST
Effiziente Algorithmen
Effiziente Algorithmen
Effiziente Algorithmen Hartmut Klauck Universität Frankfurt SS
Effiziente Algorithmen
Effiziente Algorithmen
Effiziente Algorithmen Hartmut Klauck Universität Frankfurt SS
Black Box Algorithmen Hartmut Klauck Universität Frankfurt SS
Effiziente Algorithmen
Black Box Algorithmen Hartmut Klauck Universität Frankfurt SS
Quantum Computing Hartmut Klauck Universität Frankfurt WS 05/ /23.1.
Effiziente Algorithmen Hartmut Klauck Universität Frankfurt SS
Effiziente Algorithmen Hartmut Klauck Universität Frankfurt SS
Effiziente Algorithmen Hartmut Klauck Universität Frankfurt SS
Effiziente Algorithmen
Hartmut Klauck Universität Frankfurt SS
Beweissysteme Hartmut Klauck Universität Frankfurt WS 06/
Beweissysteme Hartmut Klauck Universität Frankfurt WS 06/
Information und Kommunikation Hartmut Klauck Universität Frankfurt SS
Beweissysteme Hartmut Klauck Universität Frankfurt WS 06/
Beweissysteme Hartmut Klauck Universität Frankfurt WS 06/
Information und Kommunikation
Information und Kommunikation
Hartmut Klauck Universität Frankfurt WS 06/
Polynome und schnelle Fourier-Transformation
Übung 4.1 Strukturierte Datentypen
PHP: Operatoren und Kontrollstrukturen
Komplexität von Algorithmen
1 Albert-Ludwigs-Universität Freiburg Rechnernetze und Telematik Prof. Dr. Christian Schindelhauer Informatik III Christian Schindelhauer Wintersemester.
Mehrfachausführungen Schleifen in VB 2010 ee. Programmidee: Der Anwender gibt eine Zahl ein, und das Programm gibt die Mehrfachen dieser Zahl aus (das.
Technische Informatik II (INF 1211) Aufgabenteil (Mit Unterlagen)
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik II Vorlesung Datenstrukturen für den Algorithmus von.
Wann ist eine Funktion (über den natürlichen Zahlen) berechenbar?
Vertiefungsstoff zum Thema „Darstellung von Zahlen“
Sortierverfahren Mit VB 2010 express edition JBS Tr, info Q1.
Prof. J. Walter Bitte römische Zahlen im Geschichtsunterricht!
 Präsentation transkript:

Üungen

Übung 2.1 Informations-Kennwerte Berechnen Sie Informationsgehalt jedes Symbols Mittlerer Informations-gehalt Mittlere Wortlänge (bei einer Codierung von 8 bis für jedes Symbol) Redundanz relative Redundanz der deutschen Sprache (siehe Tabelle) Buchstabe Häufigkeit in % Buchstabe Häufigkeit in% Buchstabe Häufigkeit in % a 6,51 j 0,27 s 7,27 b 1,89 k 1,21 t 6,15 c 3,06 l 3,44 u 4,35 d 5,08 m 2,53 v 0,67 e 17,40 n 9,78 w 1,89 f 1,66 o 2,51 x 0,03 g 3,01 p 0,79 y 0,04 h 4,76 q 0,02 z 1,13 i 7,55 r 7,00    

Übung 2.2 Informations-Kennwerte Wieviele Fragen benötigen Sie beim „Zahlenraten“ um eine aus 100 Zahlen zu erraten um eine aus n Zahlen zu erraten Eine Nachrichtenquelle sendet Zeichen aus dem Alphabet X = {a,b,c,d} mit den Wahrscheinlichkeiten p(a)=1/4, p(b)=p(c)=1/8 Berechnen Sie die Entropie der Quelle Wie groß ist der Informationsgehalt der Nachricht „abcd“ Wie groß ist der mittlere Informationsgehalt der Nachricht „abcd“ Wie groß ist der mittlere Informationsgehalt einer Nachricht mit 1000 Zeichen Wie groß ist der mittlere Informationsgehalt einer Nachricht mit 1000 Zeichen unter der Annahme, dass alle Zeichen gleich wahrscheinlich sind. Berechnen Sie die Redundanz der englischen Sprache Gehen Sie davon aus, dass jedes Zeichen mit 8 bit codiert wird. Geben Sie eine Codierung an, die weniger redundant ist.

Übung 2.3 Huffmann / Hamming Konstruieren Sie einen Huffmann-Code für die deutsche Sprache (Häufigkeitstabelle wie bei Übung 2.1) Berechnen Sie die Redundanz Ihres Codes Vergleichen Sie Ihren Code mit dem Morsecode Der Morsecode ist ein tertiärer Code (Punkt, Strich, Pause) Gehen Sie davon aus, dass diese Zeichen nochmals mit je 2 bit codiert sind Welcher Code ist redundanter ? Bestimmen Sie die Hamming-Distanz der nach der Hamming-Methode kodierten Codewörter. Betrachten Sie dabei zunächst nur die Codewörter für 0000 bis 1111 Welche Bitfehler sind erkennbar ? Welche Bitfehler sind korrigierbar ? Codieren Sie „1000“ mit Hilfe der Hamming-Methode Kippen sie jedes Bit je einmal und bestimmen sie das gekippte Bit Was passiert, wenn zwei Bits gekippt sind - verdeutlichen Sie dies anhand eines Beispiels.

Übung 3.1 Zahlensysteme Die Duodezimalindianer haben zwölf Finger Berechnen Sie nach dem Zahlensystem der Duodezimalindianer die wichtigsten Werte des täglichen Lebens: 300g Pizza Eine Flasche Bier (0,5 bzw. 0,33 Liter) ALDI 2.95 € Konvertieren Sie die obigen Werte auch in Bin, Hex und Okt Grundrechenarten (verwenden Sie keinen Rechner) Berechnen Sie 568210 / 1910 Konvertieren Sie 568210 und 1910 ins Binärsystem Dividieren Sie die Binärdarstellungen der beiden Zahlen Machen Sie die Gegenprobe im Binärsystem Konvertieren Sie 0,110 ins Binärsystem Was bedeutet: 44 65 72 20 42 61 6C 6C 20 69 73 74 20 72 75 6E 64 2E

Übung 3.2 Gebrochene Zahlen Konvertieren Sie 0,1 mit der Restwertmethode Addieren Sie paarweise alle Zahlen von -3 bis +4 (also 28 Additionen), verwenden Sie dabei die Darstellung negativer Zahlen im Zweierkomplement. (optional) Programmieren Sie in PHP4/HTML-Forms einen Konverter zur Konvertierung ganzer und gebrochener Zahlen zwischen beliebigen Zahlensystem und zur Darstellung im IEEE 754 float und double Format. Stellen Sie  als IEEE 754 float-Zahl dar als IEEE 754 double-Zahl dar Geben Sie im Binärsystem und Dezimalsystem den größt- bzw. kleinst-möglichen positiven bzw. negativen Wert einer float-Zahl an

Übung 3.3 IEEE 754 Betrachten sie das Programm konvd auf der GDI-Website (www.prof-kneisel.de -> Lehre -> GDI (Tabelle: Sonstiges)) Bestimmen Sie (durch Ausprobieren) Vorzeichenbit, Exponentenbits, Mantissenbits Bias Für die Datentypen Extended Double Currency Single Bemerkung: Die im Programm konvd dargestellten Werte entsprechen den Binärrepräsentationen von Borlands Delphi-Datentypen.

Übung 4.1 Strukturierte Datentypen Beschreiben Sie Gemeinsamkeiten und Unterschiede von „Datenstruktur“, „Datentyp“ und „Variable“. Was sind die Vor- und Nachteile von Arrays gegenüber verketteten Listen Definieren Sie einen Datentyp für das Objekt „Schachspiel“. Berücksichtigen Sie dabei: Beide Namen der Spieler Alle Züge Den Gewinner Betrachten Sie den Stundenplan auf meiner Homepage Skizzieren Sie einen Datentyp für das Objekt „Stundenpläne“ Welchen Speicherplatz benötigt eine Variable dieses Typs ? An welchen Stellen sehen Sie Alternativen zu Ihrer Typdefinition ?

Übung 4.2 Abstrakte Datentypem Definieren Sie den Datentyp für eine einfach verkettete Liste (die Datenwerte seien vom Typ: integer) doppelt verkette Liste (die Datenwerte seien vom Typ: integer) Definieren Sie den Datentyp für ein beliebiges Netz - siehe Bild (der Datenwert jedes Knotens sei vom Typ: integer) <int> <int> <int> <int> <int> <int> <int> <int> <int>

Übung 5.1 Spiel des Lebens Überlegen Sie sich Rahmenbedingungen für das Spiel des Lebens (Anhang B) Formalisieren Sie dieses Problem Stellen sie einen umgangssprachlichen Lösungsansatz auf Formalisieren Sie den Lösungsansatz als Algorithmus Spielen Sie den Algorithmus anhand eines Beispieles durch Bewerten Sie den Algorithmus bezüglich seine Laufzeit und seines Platzbedarfes optional: Programmieren Sie dieses Spiel

Übung 5.2 Abweisende Schleife Notieren Sie das Beispiel der abweisenden Schleife als Flussdiagramm Struktogramm Formulieren Sie die „while“-Schleife dieses Beispiels als „repeat“-Schleife. Erweitern Sie dieses Beispiel so, dass alle Zahlen korrekt verarbeitet werden. Formulieren Sie das Beispiel nur mit Hilfe von Sprüngen. (Also ohne die Strukturierungsmethode „Schleife“ bzw. ein-/mehrfache Auswahl)

Übung 5.3 Schleifen Konstruieren Sie und wandeln Sie um ... eine „While“-Schleife in eine „Repeat“-Schliefe eine „Repeat“-Schleife in eine „While“-Schleife Formulieren Sie Ihr Vorgehen für allgemeine „While“- und „Repeat“-Schleifen, mit Bedingungen B und Aktionen.A. Konstruieren Sie eine „While“-Schleife Wandeln Sie diese in einen Algorithmus mit Sprung-Befehlen um. Formulieren Sie Ihr Vorgehen für allgemeine „While“-Schleifen, mit Bedingungen B und Aktionen.A. Konstruieren Sie eine „Repeat“-Schleife. Formulieren Sie Ihr Vorgehen für allgemeine „Repeat“-Schleifen, mit Bedingungen B und Aktionen.A.

Übung 5.4 Rekursion Programmieren Sie die Fakultätsfunktion Optional: Rekursiv Iterativ Ermitteln Sie die Laufzeiten beider Varianten in Abhängigkeit von n und stellen Sie diese tabellarisch dar. Optional: Programmieren Sie für das „Weg des Springers“-Problem ein Programm mit Backtracking. Entwickeln Sie unterschiedliche Heuristiken zur Realisierung des „waehleKandidat“-Blockes. Zeigen Sie, durch Berechnung der ersten n Lösungen, welche Heuristik die erfolgreichste ist.

Übung 5.5 Acht Damen Problem Das acht Damen Problem: Acht Damen sind so auf einem Schachbrett aufzustellen, dass keine Dame eine andere bedroht: Eine mögliche Lösung: Formulieren Sie einen rekursiven Algorithmus zur Lösung des Acht- Damen Problems. Programmieren Sie den Algorithmus

Übung 6.1 Turing-Maschine Machen Sie sich mit der Funktionsweise des „Busy Beaver“-Programms vertraut Vollziehen sie die 11 Schritte der ersten Turing-Tebelle. Versuchen Sie sich selbst am Turing Simulator der IGS (Link auf meiner Homepage) Entwerfen Sie eine Turing-Maschine zur Multiplikation zweier natürlicher Zahlen.

Übung 6.2 Einfache Verifikation Gegeben ist folgender Algorithmus {a<0, b>0, c>0} // Vorbedingung P(a,b,c) a=b; d=b-a; if (c == 0) then d=5; else d=d+1; Geben Sie eine Nachbedingung Q(d) für die Variable d an Beweisen Sie dass sich durch den Algorithmus aus P(a,b,c) diese Nachbedingung Q(d) ableiten lässt Schreiben Sie einen zweiten Algorithmus, der ebenfalls die Nachbedingung Q(d) aus P(a,b,c) ableiten kann Verifizieren Sie Ihren Algorithmus

Übung 6.3 Denksportaufgabe Gegeben sei folgendes Verfahren In einem Topf seien s schwarze und w weiße Kugeln - insgesamt mindestens eine. Solange mindestens zwei Kugeln im Topf sind, nimm zwei beliebige Kugeln heraus. Falls Sie gleiche Farbe haben, wirf beide weg und lege eine neue schwarze Kugel in den Topf. Falls sie verschiedene Farben haben, wirf die schwarze weg und lege die weiße zurück in den Topf. Welche Farbe hat die letzte Kugel Welche Aussage - die einen Hinweis auf die Antwort gibt - gilt vor, in und nach der Schleife (Invariante) Terminiert die Schleife ? Begründen Sie ihre Antwort. 

Übung 6.4 Invariante Betrachten Sie nochmals das Verfahren aus der vorgegangenen Übung: In einem Topf seien s schwarze und w weiße Kugeln - insgesamt mindestens eine. Solange mindestens zwei Kugeln im Topf sind, nimm zwei beliebige Kugeln heraus. Falls Sie gleiche Farbe haben, wirf beide weg und lege eine neue schwarze Kugel in den Topf. Falls sie verschiedene Farben haben, wirf die schwarze weg und lege die weiße zurück in den Topf. Beschreiben Sie das Verfahren als Algorithmus Das „Nehmen“ dürfen Sie als Block voraussetzen. Entwerfen Sie den Kopf dieses Blocks, Beschreiben Sie seine Parameter beschreiben Sie sein Verhalten in Form einer Vor- und Nachbedingung Bestimmen Sie die Invariante Beweisen Sie die Korrektheit Ihrer Nachbedingung

Übung 6.5 Vollständige Verifikation gegeben ist der folgende Algorithmus zum schnellen Potenzieren (Legendre Algorithmus) // Vorbedingung P(V): a>0  b0 x = a; y = b; z = 0; while y > 0 { if odd(y) then z = z*x; y = y div 2; // Ganzzahldivision x = x*x; } Was ist die Nachbedingung dieses Algorithmus Bestimmen die die Schleifeninvariante Beweisen Sie die Korrektheit de Legendre Algorithmus

Übung 6.6 Schranken Angenommen, Ihr Algorithmus habe einen Aufwand von g(n) = 5n3 + n + 1000 für alle n Geben sie eine obere Schranke O(g(n)) an. Beweisen Sie, dass ihre Schranke tatsächlich eine obere Schranke ist. Konstruieren Sie einen Graphen fü die beiden Funktionen g(n) O(g(n) so, dass der Schnittpunkt deutlich wird. Geben Sie eine untere Schranke an Sie haben zusätzlich einen Algorithmus mit O(2n) Aufwand. Vergleichen Sie diesen Algorithmus mit dem Algorithmus aus 1. Welches ist der „schnellere“ Algorithmus ? Begünden Sie Ihre Antwort quantitativ

Übung 6.7 O-Notation gegeben seien folgende Werte: 1,3,4,8,9,15,17,25,28,29,31,36,41,45 Zeichnen Sie einen sortierten Baum minimaler Tiefe, der mit den gegeben Werten belegt ist. Schreiben Sie einen Algorithmus, der den Baum aufspannt (als Wiederholungs-Übung von Zeigern) Gegeben ist der Suchalgorithmus aus „Häufige O-Ausdrücke: O(log n)“. Geben Sie für jeden Wert an, wie oft der Block durchlaufen wird Formulieren Sie einen iterativen Algorithmus mit O(n4) Geben Sie eine kurze rechnerische Begründung für Ihre Antwort

Übung 6.8 Aufwand Gegeben ist folgender Algorithmus: do (list:*liste) { i:integer; for i=1 to no_of_elements(list) { remove_last_element(list); do (list) // call list with one element less } Geben Sie den Aufwand an. Belegen Sie Ihre Antwort rechnerisch Gegeben ist folgender Algorithmus for i=1 to n { j=1; while (j<i) { j = j+2; } }

Übung 7.1 Syntax und Semantik Geben Sie Beispiele für lexikalische Strukturelemente syntaktische Strukturelemente der Programmiersprache C++ an Formulieren Sie die Semantik einer while-Schleife eines Unterprogrammaufrufes in C++ recherchieren Sie nach weiteren Programmiersprachen

Übung 7.2 Reguläre Ausdrücke Geben Sie reguläre Ausdrücke für Integerliterale Die Schlüsselwort: while, function, if in C++, jeweils in „klassischer“ und in UNIX-Notation an Geben Sie einen regulären Ausdruck zu folgenden Sprachen an: Alle Folgen von Großbuchstaben, die jeden Vokal genau einmal in alphabetischer Reihenfolge enthält: Bsp.: SDFKJHZZTADGFPMNBEHGQIQWGFMNOLKHYXUQSKJH Alle Dualziffernfolgen, die „001“ nicht als Teilfolge enthalten Gegenbsp.: 10011100101010000 Welche Sprachen sind durch die folgenden regulären Ausdrücke definiert ? (0?|1*)* (0|1)*0(0|1)(0|1) /\*((\*[^/])|[\*])*\*/

Lösung 6.1.1 Turing-Maschine Vollziehen sie die 11 Schritte der ersten Turing-Tebelle. 1,_ 2,1,> 1,1 3,1,< 2,_ 3,1,> 2,1 H,1,> 3,_ 1,1,< 3,1 2,_,< 4,_ H,_,> 4,1 H,_,> Ausgangszustand,Zeichen  Folgezustand,schreibeZeichen,Aktion 1 2 3 4 5 6 7 8 9 10 11 H State

Lösung 6.1.2 Turing-Maschine Eingabe der initialen Bandinschrift Eingabe der Turing-Tabelle Zustand x Zeichen  Folgezustand x Zeichen x Aktion Beispiel: 1,_  1,_,>

Lösung 6.1.3 Turing-Maschine Aufgabenstellung Entwerfen Sie eine Turing-Maschine zur Multiplikation zweier natürlicher Zahlen. Spezifikation Eingabespezifikation Die Zahlen werden durch die entsprechende Anzahl von ‚1‘ am Band dargestellt Zwischen den Zahlen befindet sich ein ‚x‘ am Band Hinter der letzten Zahl ist ein =- Zeichen am Band Das restliche Band ist mit ‚0‘ beschrieben. Der Schreib/Lesekopf befindet sich links von der 1. Zahl. Ausgabespezifikation Das Ergebnis ist hinter dem =, durch eine entsprechende Anzahl von ‚1‘ darzustellen. Beispiel: Die zwei Zahlen 3 und 4 sind mittels eines Turing-Programmes zu multiplizieren

Lösung 6.1.3 Turing-Maschine Idee: Kopiere alles vor dem = (den 2.Multiplikator) ans Ende Mache dies für jede 1 vor dem X (den 1.Multiplikator) Siehe Anhang C SucheStart R 1 SucheZahl2 X EndZustand L Zahl2Start GeheEnde = Mach1Aus0 SucheNull HolNaechsten1 Zahl1Start

Lösung 6.2 Einfache Verifikation Gegeben ist folgender Algorithmus {a<0, b>0, c>0} a=b; {a=b, b>0, c>0} d=b-a; {d=b-a, a=b, b>0, c>0}  {d=0, b>0, c>0} if (c == 0) then {d=0, b>0, c>0, c=0} d=5; {d=5, b>0, falsch}  {d=1} // aus falsch lässt sich alles folgern else {d=0, b>0, c>0, c<>0}  {d+1=1, b>0, c>0} d=d+1; {d=1, b>0, c>0} {d=1, b>0, c>0}  {d=1}

Lösung 6.3 Denksportaufgabe  Denksportaufgabe Welche Farbe hat die letzte Kugel ? Die Farbe der letzten Kugel ist abhängig von der Anzahl der weißen Kugeln: Ist die Anzahl gerade, so ist die letzte Kugel schwarz Ist die Anzahl ungerade, so ist die letzte Kugel weiß Welche Aussage gilt vor, in und nach der Schleife (Invariante) Ist die Anzahl der weißen Kugeln gerade, so bleibt sie gerade Ist die Anzahl der weißen Kugel ungerade, so bleibt sie ungerade Es werden entweder 2 weiße Kugeln entfernt oder keine. Terminiert die Schleife ? Begründen Sie ihre Antwort. JA. Die Anzahl der Kugeln vermindert sich bei jedem Zug um genau eine (nach Algorithmus: 2 nehmen, eine geben). Beim Erreichen von 2 Kugeln wird die Schleife noch einmal durchlaufen und terminiert mit einer Kugel.

Lösung 6.4 Invariante {s+w >= 1}  x=s; y=w; {x=s, y=w, x+y  1} {INV: (odd(w): odd(y))  (even(w): even(y)  x+y1) } while (x+y>1) { {INV  x+y>1} // Vorbedingung für „take“: x+y>1 take(a,b) // IN: a no. of black, b no of white (drawn) {a+b=2, a,b0} // = Nachbedingung für „take“ switch a: { // a = no of black bullets drawn case 0: {x=x+1; y=y-2}; {INV} // add black, remove two w. case 1; (x=x-1); {INV} // remove black case 2; (x=x-1); {INV} // remove black } {INV} {INV   x+y>1  (odd(w):odd(y))  (even(w):even(y)  x+y1)  x+y1  (odd(w):odd(y))  (even(w):even(y)  x+y=1) }

Lösung 6.5 Vollständige Verifikation // Vorbedingung P(V): a>0  b0 x = a; y = b; z = 1; // x=a  y=b  z=1  x>0  b0 { INV: zxy=ab  y0 } while y > 0 { {INV  y>0  (z*x/x)*xy=ab  y>0 } if odd(y) then z = z*x; { odd(y) : z/x*xy=ab  y>0  z*xy-1=ab  y>0 } // else { even(y): z*xy =ab  y>0 }  { odd(y) : z*x(2(y div 2)+1)-1=ab  2(y div 2)+1>0  even(y): z*x2(y div 2) =ab  2(y div 2) >0 } y = y div 2; // Ganzzahldivision { odd(y) : z*x(2y+1)-1=ab  2y+1>0  z*x2y=ab  2y0  even(y): z*x2y =ab  2y >0  z*x2y=ab  2y>0 } x = x*x; { (odd(y): z*xy=ab  2y0)  (even(y): z*xy=ab  2y>0)  z*xy=ab  (odd(y):2y0)  (even(y):2y0)  z*xy=ab  y0 } } { INV  (y0)  (z*xy=a*b)  (y=0)  z*x0=ab = Q(V) }

Lösung 6.6.1 Schranken n3 g(n) = 5n3 + n + 1000 für alle n Behauptung: Die Laufzeit von g(n) ist O(n3), also f(n)=n3, Beweis: Es muss Konstanten c und n0 geben, so dass gilt 5n3 + n + 1000  c n2, für alle n > n0 setze z.B. n0=10 und c=6, dann gilt: n3 > n + 1000 gilt für n11, n   5n3 + n + 1000  5n3 + 100n  5n3+n3 = 6n3  z.B.: 5n3 n3

Lösung 6.6.2 Schranken Sie haben zusätzlich einen Algorithmus mit O(2n) Aufwand. Vergleichen Sie diesen Algorithmus mit dem Algorithmus aus 1. Welches ist der „schnellere“ Algorithmus ? Für kleine n (n<14) ist der Algorithmus mit O(2n) der schnellere, ansonsten der mit g(n) = 5n3 + n + 1000 Begründen Sie Ihre Antwort quantitativ 2n

Lösung 6.7.1 O-Notation gegeben seien folgende Werte: 1,3,4,8,9,15,17,25,28,29,31,36,41,45 17 31 28 41 45 8 9 3 4 29 25 15 1 36 Anzahl Aufrufe 1 2 3 4 node: array[1..14] of knoten; // Normalerweise wird der Speicher dynamisch allokiert node[1].value = 17; node[12].value = 41; node[1].left = &node[2]; node[12].left = &node[13]; node[1].right = &node[3]; node[12].right = &node[14]; node[2].value = 8; node[13].value = 36; node[2].left = &node[4]; node[13].left = nil; node[2].right = &node[5]; node[13].right = nil; node[3].value = 31; node[14].value = 45; node[3].left = &node[6]; node[14].left = nil; node[3].right = &node[7]; node[14].right = nil; ...

Lösung 6.7.2 O-Notation Formulieren Sie einen iterativen Algorithmus mit O(n4) for (i=1 to n) { for (j=1 to n) { for (k=1 to n) { for (l=1 to k) { // Statements } } } } Aufwand: nn(n(n+1))/2 = n2(n2/2+n/2)=n4/2 + n3/2  Laufzeit O(n4)

Lösung 6.8 Aufwand do (list:*liste) { i:integer; for i=1 to no_of_elements(list) { remove_last_element(list); do (list) // call list with one element less } Zeitbedarf: Tn = n Tn-1 (Tn = Zeitbedarf für n, n2, T1=1) Tn =nTn-1 = n  (n-1)  Tn-2 = n  (n-1)  (n-2) Tn-3 = ... = 1 2 3 ... n  Tn = n!  Laufzeit O(n!) (wirklich viel! Algorithmus inpraktikabel) for i=1 to n { j=1; while (j<i) { j = j+2; } } Zeitbedarf: Betrachte Anzahl der Zuweisungen für alle i<n: 1 + 2 + 2 + 3 + 3 + 4 + 4 + .... + n/2 + n/2 = 2  (n/2  (n/2+1))/2 - 1 = n/2  (n/2 +1) -1 = n2/4 + n/2 - 1  Laufzeit O(n2)

Lösung 7.1 Syntax und Semantik Geben Sie Beispiele für lexikalische Strukturelemente: Bezeichner, Literale, Schlüsselworte, ... syntaktische Strukturelemente: Alle Elemente aus „Algorithmenentwurf“ der Programmiersprache C++ an Formulieren Sie die Semantik einer while-Schleife: siehe Schleief mit vorausgehender Prüfung eines Unterprogrammaufrufes siehe „Block“ recherchieren Sie nach weiteren Programmiersprachen Algol 60, Algol 68, Forth, PL/1, Fortran, Smalltalk, Simula 67, SETL, Snobol, Cobol, Pascal, Turbo-Pascal, DELPHI, Concurrent Pascal, SPSS, CLU, Alphard, SDL, Oberon, Oberon-2, Object Cobol, Ada, APL, CDL 2, Ada 95, Mesa, Modula-2, Chill, BCPL, C, Objective-C, Modula-3, C++, ,Assemblersprachen, Prolog, Prolog II, Eiffel, Beta, Opal, CS,P Hope, Miranda, Lisp, Common Lisp, PHP, Perl, Scheme, Haskell, Standard ML, Clipper, Basic, Visual Basic, Java, JavaScript, SQL, Late,x Postscript, HTML, UML, Z, Act-One, VDM, awk, LEX, YACC, Maschinensprachen, RPG, Occam, Linda, T Lotus, OPS-5, ...  werden Sie zu Meta-Programmierern und -Programiererinnen

Lösung 7.2 Reguläre Ausdrücke Geben Sie reguläre Ausdrücke für Integerliterale: [1-9][0-9]* bzw. (1|2|3|4|5|6|7|8|9)(o|1|2|3|4|5|6|7|8|9)* while, function, if while usw. bzw. ‘w‘‘h‘‘i‘‘l‘‘e‘ usw. Geben Sie einen regulären Ausdruck zu folgenden Sprachen an: Alle Folgen von Großbuchstaben, die jeden Vokal genau einmal in alphabetischer Reihenfolge enthält: KONS = [B-DF-HJ-NP-TV-Z] {KONS}A{KONS}E{KONS}I{KONS}O{KONS}U{KONS} Alle Dualziffernfolgen, die „001“ nicht als Teilfolge enthalten (0?1+)*0* Welche Sprachen sind durch die folgenden regulären Ausdrücke definiert ? (0?|1*)* alle Binärzahlen, denn (0|1) ist Teilmenge von (0?|1*) (0|1)*0(0|1)(0|1) alle Binärzahlfolgen, bei denen die drittletzte Ziffer existiert und 0 ist /\*((\*[^/])|[\*])*\*/ „wohlgeformte“ C-Kommentare