Üungen. Übung 2.1Informations-Kennwerte 1.Berechnen Sie 1.Informationsgehalt jedes Symbols...
-
Upload
imke-schubert -
Category
Documents
-
view
216 -
download
0
Transcript of Üungen. Übung 2.1Informations-Kennwerte 1.Berechnen Sie 1.Informationsgehalt jedes Symbols...
Üungen
Übung 2.1 Informations-Kennwerte
1. Berechnen Sie1. Informationsgehalt
jedes Symbols2. Mittlerer Informations-
gehalt3. Mittlere Wortlänge (bei
einer Codierung von 8 bis für jedes Symbol)
4. Redundanz5. 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
1. Wieviele Fragen benötigen Sie beim „Zahlenraten“1. um eine aus 100 Zahlen zu erraten2. um eine aus n Zahlen zu erraten
2. Eine Nachrichtenquelle sendet Zeichen aus dem AlphabetX = {a,b,c,d} mit den Wahrscheinlichkeiten p(a)=1/4, p(b)=p(c)=1/8
1. Berechnen Sie die Entropie der Quelle2. Wie groß ist der Informationsgehalt der Nachricht „abcd“3. Wie groß ist der mittlere Informationsgehalt der Nachricht „abcd“4. Wie groß ist der mittlere Informationsgehalt einer Nachricht mit 1000
Zeichen5. Wie groß ist der mittlere Informationsgehalt einer Nachricht mit 1000
Zeichen unter der Annahme, dass alle Zeichen gleich wahrscheinlich sind.
3. Berechnen Sie die Redundanz der englischen Sprache1. Gehen Sie davon aus, dass jedes Zeichen mit 8 bit codiert wird.2. Geben Sie eine Codierung an, die weniger redundant ist.
a 8,04b 1,54c 3,06d 3,99e 12,51f 2,3g 1,96h 5,49i 7,26j 0,16k 0,67l 4,14m 2,53n 7,09o 7,6p 2q 0,11r 6,12s 6,54t 9,25u 2,71v 0,99w 1,92x 0,19y 1,73z 0,1
Übung 2.3 Huffmann / Hamming
1. Konstruieren Sie einen Huffmann-Code für die deutsche Sprache(Häufigkeitstabelle wie bei Übung 2.1)
1. Berechnen Sie die Redundanz Ihres Codes2. 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
3. Welcher Code ist redundanter ?2. Bestimmen Sie die Hamming-Distanz der nach der Hamming-Methode
kodierten Codewörter.1. Betrachten Sie dabei zunächst nur die Codewörter für 0000 bis 11112. Welche Bitfehler sind erkennbar ?3. Welche Bitfehler sind korrigierbar ?
3. Codieren Sie „1000“ mit Hilfe der Hamming-Methode1. Kippen sie jedes Bit je einmal und bestimmen sie das gekippte Bit2. Was passiert, wenn zwei Bits gekippt sind - verdeutlichen Sie dies anhand
eines Beispiels.
Übung 3.1 Zahlensysteme
1. Die Duodezimalindianer haben zwölf Finger1. Berechnen Sie nach dem Zahlensystem der Duodezimalindianer die
wichtigsten Werte des täglichen Lebens:1. 300g Pizza2. Eine Flasche Bier (0,5 bzw. 0,33 Liter)3. ALDI 2.95 €
2. Konvertieren Sie die obigen Werte auch in Bin, Hex und Okt2. Grundrechenarten (verwenden Sie keinen Rechner)
1. Berechnen Sie 568210 / 1910
2. Konvertieren Sie 568210 und 1910 ins Binärsystem
3. Dividieren Sie die Binärdarstellungen der beiden Zahlen4. Machen Sie die Gegenprobe im Binärsystem
3. Konvertieren Sie 0,110 ins Binärsystem
4. 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
1. Konvertieren Sie 0,1 mit der Restwertmethode2. Addieren Sie paarweise alle Zahlen von -3 bis +4 (also 28 Additionen),
verwenden Sie dabei die Darstellung negativer Zahlen im Zweierkomplement.
3. (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.
4. Stellen Sie 1. als IEEE 754 float-Zahl dar2. als IEEE 754 double-Zahl dar
5. Geben Sie im Binärsystem und Dezimalsystem1. den größt- bzw. kleinst-möglichen positiven bzw. negativen Wert einer
float-Zahl an
Übung 3.3 IEEE 754
1. Betrachten sie das Programm konvd auf der GDI-Website(www.prof-kneisel.de -> Lehre -> GDI (Tabelle: Sonstiges))
1. Bestimmen Sie (durch Ausprobieren)1. Vorzeichenbit,2. Exponentenbits,3. Mantissenbits4. Bias
Für die Datentypena. Extendedb. Doublec. Currencyd. Single
Bemerkung:Die im Programm konvd dargestellten Werte entsprechen den Binärrepräsentationen von Borlands Delphi-Datentypen.
Übung 4.1 Strukturierte Datentypen
1. Beschreiben Sie Gemeinsamkeiten und Unterschiede von „Datenstruktur“, „Datentyp“ und „Variable“.
2. Was sind die Vor- und Nachteile von Arrays gegenüber verketteten Listen
3. Definieren Sie einen Datentyp für das Objekt „Schachspiel“. Berücksichtigen Sie dabei:
1. Beide Namen der Spieler2. Alle Züge3. Den Gewinner
4. Betrachten Sie den Stundenplan auf meiner Homepage1. Skizzieren Sie einen Datentyp für das Objekt „Stundenpläne“2. Welchen Speicherplatz benötigt eine Variable dieses Typs ?3. An welchen Stellen sehen Sie Alternativen zu Ihrer Typdefinition ?
Übung 4.2 Abstrakte Datentypem
1. Definieren Sie den Datentyp für eine1. einfach verkettete Liste (die Datenwerte seien vom Typ: integer)2. doppelt verkette Liste (die Datenwerte seien vom Typ: integer)
2. 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
1. Überlegen Sie sich Rahmenbedingungen für das Spiel des Lebens (Anhang B)
2. Formalisieren Sie dieses Problem3. Stellen sie einen umgangssprachlichen Lösungsansatz auf4. Formalisieren Sie den Lösungsansatz als Algorithmus5. Spielen Sie den Algorithmus anhand eines Beispieles durch6. Bewerten Sie den Algorithmus bezüglich seine Laufzeit und seines
Platzbedarfes7. optional: Programmieren Sie dieses Spiel
Übung 5.2 Abweisende Schleife
1. Notieren Sie das Beispiel der abweisenden Schleife als1. Flussdiagramm2. Struktogramm
2. Formulieren Sie die „while“-Schleife dieses Beispiels als „repeat“-Schleife.
3. Erweitern Sie dieses Beispiel so, dass alle Zahlen korrekt verarbeitet werden.
4. Formulieren Sie das Beispiel nur mit Hilfe von Sprüngen.(Also ohne die Strukturierungsmethode „Schleife“ bzw. ein-/mehrfache Auswahl)
Übung 5.3 Schleifen
1. Konstruieren Sie und wandeln Sie um ...1. eine „While“-Schleife in eine „Repeat“-Schliefe2. eine „Repeat“-Schleife in eine „While“-Schleife3. Formulieren Sie Ihr Vorgehen für allgemeine „While“- und „Repeat“-
Schleifen, mit Bedingungen B und Aktionen.A.2. Konstruieren Sie eine „While“-Schleife
1. Wandeln Sie diese in einen Algorithmus mit Sprung-Befehlen um.2. Formulieren Sie Ihr Vorgehen für allgemeine „While“-Schleifen, mit
Bedingungen B und Aktionen.A.3. Konstruieren Sie eine „Repeat“-Schleife.
1. Wandeln Sie diese in einen Algorithmus mit Sprung-Befehlen um.2. Formulieren Sie Ihr Vorgehen für allgemeine „Repeat“-Schleifen, mit
Bedingungen B und Aktionen.A.
Übung 5.4 Rekursion
1. Programmieren Sie die Fakultätsfunktion1. Rekursiv2. Iterativ3. Ermitteln Sie die Laufzeiten beider Varianten in Abhängigkeit von n und
stellen Sie diese tabellarisch dar.2. Optional:
1. Programmieren Sie für das „Weg des Springers“-Problem ein Programm mit Backtracking.
2. Entwickeln Sie unterschiedliche Heuristiken zur Realisierung des „waehleKandidat“-Blockes.
3. 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
1. Machen Sie sich mit der Funktionsweise des „Busy Beaver“-Programms vertraut
Vollziehen sie die 11 Schritte der ersten Turing-Tebelle.2. Versuchen Sie sich selbst am Turing Simulator der IGS (Link auf meiner
Homepage)3. 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;1. Geben Sie eine Nachbedingung Q(d) für die Variable d an2. Beweisen Sie dass sich durch den Algorithmus aus P(a,b,c) diese
Nachbedingung Q(d) ableiten lässt3. Schreiben Sie einen zweiten Algorithmus, der ebenfalls die
Nachbedingung Q(d) aus P(a,b,c) ableiten kann4. Verifizieren Sie Ihren Algorithmus
Übung 6.3 Denksportaufgabe
1. Gegeben sei folgendes VerfahrenIn 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.
1. Welche Farbe hat die letzte Kugel2. Welche Aussage - die einen Hinweis auf die Antwort gibt - gilt vor, in und
nach der Schleife (Invariante)3. Terminiert die Schleife ? Begründen Sie ihre Antwort.
Übung 6.4 Invariante
1. 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.
1. Beschreiben Sie das Verfahren als Algorithmus1. Das „Nehmen“ dürfen Sie als Block voraussetzen.
1. Entwerfen Sie den Kopf dieses Blocks,2. Beschreiben Sie seine Parameter3. beschreiben Sie sein Verhalten in Form einer Vor- und Nachbedingung
2. Bestimmen Sie die Invariante3. Beweisen Sie die Korrektheit Ihrer Nachbedingung
Übung 6.5 Vollständige Verifikation
1. gegeben ist der folgende Algorithmus zum schnellen Potenzieren (Legendre Algorithmus)
// Vorbedingung P(V): a>0 b0x = a; y = b; z = 0; while y > 0 { if odd(y) then z = z*x; y = y div 2; // Ganzzahldivision x = x*x;}
1. Was ist die Nachbedingung dieses Algorithmus2. Bestimmen die die Schleifeninvariante3. Beweisen Sie die Korrektheit de Legendre Algorithmus
Übung 6.6 Schranken
1. Angenommen, Ihr Algorithmus habe einen Aufwand vong(n) = 5n3 + n + 1000 für alle n
a) Geben sie eine obere Schranke O(g(n)) an.b) Beweisen Sie, dass ihre Schranke tatsächlich eine obere Schranke ist.c) Konstruieren Sie einen Graphen fü die beiden Funktionen g(n) O(g(n) so,
dass der Schnittpunkt deutlich wird.d) Geben Sie eine untere Schranke an
2. Sie haben zusätzlich einen Algorithmus mit O(2n) Aufwand. Vergleichen Sie diesen Algorithmus mit dem Algorithmus aus 1.
a) Welches ist der „schnellere“ Algorithmus ?b) Begünden Sie Ihre Antwort quantitativ
Übung 6.7 O-Notation
1. gegeben seien folgende Werte:1,3,4,8,9,15,17,25,28,29,31,36,41,45
a) Zeichnen Sie einen sortierten Baum minimaler Tiefe, der mit den gegeben Werten belegt ist.
b) Schreiben Sie einen Algorithmus, der den Baum aufspannt(als Wiederholungs-Übung von Zeigern)
c) 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
2. Formulieren Sie einen iterativen Algorithmus mit O(n4) Geben Sie eine kurze rechnerische Begründung für Ihre Antwort
Übung 6.8 Aufwand
1. 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}
a) Geben Sie den Aufwand an.b) Belegen Sie Ihre Antwort rechnerisch
2. Gegeben ist folgender Algorithmusfor i=1 to n { j=1; while (j<i) { j = j+2; }}
a) Geben Sie den Aufwand an.b) Belegen Sie Ihre Antwort rechnerisch
Übung 7.1 Syntax und Semantik
1. Geben Sie Beispiele füra) lexikalische Strukturelementeb) syntaktische Strukturelemente
der Programmiersprache C++ an2. Formulieren Sie die Semantik
a) einer while-Schleifeb) eines Unterprogrammaufrufes
in C++3. recherchieren Sie nach weiteren Programmiersprachen
Übung 7.2 Reguläre Ausdrücke
1. Geben Sie reguläre Ausdrücke füra) Integerliteraleb) Die Schlüsselwort: while, function, if
in C++, jeweils in „klassischer“ und in UNIX-Notation an2. Geben Sie einen regulären Ausdruck zu folgenden Sprachen an:
a) Alle Folgen von Großbuchstaben, die jeden Vokal genau einmal in alphabetischer Reihenfolge enthält:Bsp.: SDFKJHZZTADGFPMNBEHGQIQWGFMNOLKHYXUQSKJH
b) Alle Dualziffernfolgen, die „001“ nicht als Teilfolge enthaltenGegenbsp.: 10011100101010000
3. Welche Sprachen sind durch die folgenden regulären Ausdrücke definiert ?a) (0?|1*)*b) (0|1)*0(0|1)(0|1)c) /\*((\*[^/])|[\*])*\*/
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
123456789
1011
2313231312H
State
Lösung 6.1.2 Turing-Maschine
Eingabe der initialen Bandinschrift
Eingabe der Turing-Tabelle
Zustand x ZeichenFolgezustand xZeichen 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:1. Kopiere alles vor
dem =(den 2.Multiplikator)ans Ende
2. Mache dies für jede 1 vor dem X(den 1.Multiplikator)
Siehe Anhang C
SucheStart 0 SucheStart 0 RSucheStart 1 SucheZahl2 0 RSucheStart X EndZustand X LSucheZahl2 1 SucheZahl2 1 RSucheZahl2 X Zahl2Start X RZahl2Start 1 GeheEnde 0 RZahl2Start = Mach1Aus0 = LGeheEnde 1 GeheEnde 1 RGeheEnde = SucheNull = RSucheNull 1 SucheNull 1 RSucheNull 0 HolNaechsten1 1 LHolNaechsten1 1 HolNaechsten1 1 LHolNaechsten1 = HolNaechsten1 = LHolNaechsten1 0 Zahl2Start 0 RMach1Aus0 0 Mach1Aus0 1 LMach1Aus0 X Zahl1Start X LZahl1Start 1 Zahl1Start 1 LZahl1Start 0 SucheStart 0 R
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 folgernelse {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
1. Denksportaufgabe1. 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 schwarzIst die Anzahl ungerade, so ist die letzte Kugel weiß
2. Welche Aussage gilt vor, in und nach der Schleife (Invariante)Ist die Anzahl der weißen Kugeln gerade, so bleibt sie geradeIst die Anzahl der weißen Kugel ungerade, so bleibt sie ungeradeEs werden entweder 2 weiße Kugeln entfernt oder keine.
3. 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+y1) }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,b0} // = 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+y1) x+y1 (odd(w):odd(y)) (even(w):even(y) x+y=1) }
Lösung 6.5 Vollständige Verifikation
// Vorbedingung P(V): a>0 b0x = a; y = b; z = 1; // x=a y=b z=1 x>0 b0{ INV: zxy=ab y0 }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 2y0 even(y): z*x2y =ab 2y >0 z*x2y=ab 2y>0 } x = x*x; { (odd(y): z*xy=ab 2y0) (even(y): z*xy=ab 2y>0) z*xy=ab (odd(y):2y0) (even(y):2y0) z*xy=ab y0 }} { INV (y0) (z*xy=a*b) (y=0) z*x0=ab = Q(V) }
Lösung 6.6.1 Schranken
1. g(n) = 5n3 + n + 1000 für alle na) Behauptung: Die Laufzeit von g(n) ist O(n3), also f(n)=n3, b) Beweis:
Es muss Konstanten c und n0 geben, so dass gilt5n3 + 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 n11, n 5n3 + n + 1000 5n3 + 100n 5n3+n3 = 6n3
c)
d) z.B.: 5n3
0
2000
4000
6000
8000
10000
12000
14000
1 2 3 4 5 6 7 8 9 10 11 12 13
n3
Lösung 6.6.2 Schranken
2. Sie haben zusätzlich einen Algorithmus mit O(2n) Aufwand. Vergleichen Sie diesen Algorithmus mit dem Algorithmus aus 1.
a) 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
b) Begründen Sie Ihre Antwort quantitativ
0
5000
10000
15000
20000
25000
30000
35000
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
2n
Lösung 6.7.1 O-Notation
1. gegeben seien folgende Werte: 1,3,4,8,9,15,17,25,28,29,31,36,41,45
17
31
28 41
45
8
93
4 2925151 36
node: array[1..14] of knoten;// Normalerweise wird der Speicher dynamisch allokiertnode[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;...
Anzahl Aufrufe 1
2
3
4
Lösung 6.7.2 O-Notation
2. 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: nn(n(n+1))/2 = n2(n2/2+n/2)=n4/2 + n3/2 Laufzeit O(n4)
Lösung 6.8 Aufwand
1. 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, n2, T1=1)Tn =nTn-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)
2. 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
1. Geben Sie Beispiele füra) lexikalische Strukturelemente: Bezeichner, Literale, Schlüsselworte, ...b) syntaktische Strukturelemente: Alle Elemente aus „Algorithmenentwurf“
der Programmiersprache C++ an2. Formulieren Sie die Semantik
a) einer while-Schleife: siehe Schleief mit vorausgehender Prüfung
b) eines Unterprogrammaufrufes siehe „Block“3. 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
1. Geben Sie reguläre Ausdrücke füra) 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)*b) while, function, if while usw. bzw. ‘w‘‘h‘‘i‘‘l‘‘e‘ usw.
2. Geben Sie einen regulären Ausdruck zu folgenden Sprachen an:a) 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}
b) Alle Dualziffernfolgen, die „001“ nicht als Teilfolge enthalten(0?1+)*0*
2. Welche Sprachen sind durch die folgenden regulären Ausdrücke definiert ?a) (0?|1*)* alle Binärzahlen, denn (0|1) ist Teilmenge von (0?|
1*)b) (0|1)*0(0|1)(0|1) alle Binärzahlfolgen, bei denen die drittletzte Ziffer
existiert und 0 istc) /\*((\*[^/])|[\*])*\*/ „wohlgeformte“ C-Kommentare