Hier werden in Zukunft Übungsaufgaben stehen

Werbung
Die Voraussetzungen für einen Schein Nr. 1 haben erfüllt:
 K. Amelung
 Frank Bauske
 Corinna Bennecke
 Marco Bellstedt
 Chris Berking
 Jens Bradler
 Johann Deutinger
 Katy Hoffmann
 Anja Fiegler
 Daniela Kabisch
 Jan Käferstein
 Christian Pfeffer
 Hendryk Prill
 Anja Rothe
 Ralph Schatz
 Jan Peter Schmidt
 Christian Scholz
 Marita Schwaß
 Matthias Teske
 Alois Vrhic
 Lars Waldemann
 Carsten Walther
 Herr Wolf
Die Voraussetzungen für den Schein Nr. 2 haben erfüllt:
 K. Amelung
 Frank Bauske
 Corinna Bennecke
 Chris Berking
 Jens Bradler
 Johann Deutinger
 Katy Hoffmann
 Jan Käferstein
 Christian Pfeffer
 Hendryk Prill
 Ralph Schatz
 Jan Peter Schmidt
 Christian Scholz
 Marita Schwaß
 Matthias Teske
 Carsten Walther
 Herr Wolf
Ü1. Ermitteln Sie die Zeit T(n), die zur „verkürzten“ Multiplikation zweier Zahlen mit n
Stellen (3.3) nötig ist.
Beispiel: Multiplikation zweier vierstelliger Zahlen 1984, 6713
X = (A*100 + B) = 19*100 + 84
Y = (C*100 + D) = 67*100 + 13
X*Y= AC*1000 + ((A+B)(C+D) -AC-BD)*100 + BD
1273
5875
1092
13318592
Lösung:
 3 Multiplikationen für Zahlen mit halber Länge n/2
 Additionen linear von n abhängig
Rekursive Relation: T (n) = 3 T (n/2) +c *n
T(1) = k
(Zeit für Multiplikation 1stelliger Zahlen)
Abkürzung: n= 2 m , m= log n
T( 2 m ) = 3 T (2 m /2) +c * 2 m
|:2m
T (2 m ) / 2 m = 3/2 T( 2 m -1) / 2 m-1 +c
T( 2 m ) / 2 m = 3/2 * T(2 m -1) / 2 m-1 +c
= 3/2 (3/2 * T(2 m-2) / 2 m-2 +c) + c)
= 3/2 (3/2 (3/2 ....(3/2*T(1) +c) ...+c) +c)+c)
m
| T(1) =k
m
Wegen 1 + q +q 2+..... + q m-1 = (q m-1)/(q-1) mit q=3/2 folgt
= (3/2) m * k + ((3/2) m - 1) / (3/2-1) * c
T( 2 m )
= (3 m* k + 3 m*2c) – 2c* 2 m
T( n ) = (2c+ k) 3 log n - 2cn = (2c+k) n log 3 -2cn
| *2 m
| 3 log n =2 log 3 log n = n log 3
Ü2. Zeigen Sie durch vollständige Induktion, daß die zuvor bestimmte Laufzeit T(n) für
beliebige n richtig ist .
Gegeben.: T(n) = 3 T (n/2) + cn
Gesucht.: T(n)
Induktionsbehauptung: T(n) = (2c +k) n log3 –2cn
Induktionsanfang: T(1) = (2c+k) - 2c = k
richtig
Induktionsschritt: T(2n) = 3 T (n)+ c2n
= 3 ((2c + k) n log3 –2cn) + c2n
= (2c + k) (2n) log3 –4cn
Ü3 . Gegeben sei das logische Programm:
(n=1,2,4,...)
|Einsetzen der Behauptung für n
| 3= 2log3
|Behauptung für n+1 richtig
(1) Großeltern(X,Y)  Eltern(X,Z), Eltern(Z,Y)
(2) Eltern (Elisabeth, Karl)
(3) Eltern (Karl, Wilhelm)
(4) Eltern (Karl, Heinrich)
Wie sieht die Ausführungsfolge aus für
a) ? Großeltern (Elisabeth, V)
b) ? Großeltern (U,V)?
Ü4. Entwickeln Sie ein Sortierprogramm auf Basis der funktionalen Programmierung!
Lösung:
{Funktion zum Sortieren einer Liste L von Wörtern in alphabetischer Reihenfolge}
sortiere (L) = wenn L = [ ] dann [ ]
sonst füge-ein (Kopf(L),sortiere (Rumpf(L)))
{Funktion zum Einfügen eines Wortes in sortierte Liste L}
füge-ein (Wort,L) = wenn L = [ ] dann [Wort ]
sonst wenn Vorgänger (Wort,Kopf(L)) dann Wort:L
sonst Kopf(L): füge-ein(Wort,Rumpf(L))
{Funktion zum Entscheiden, ob Wort1 alphabetisch vor Wort2 steht}
Vorgänger(Wort1,Wort2) = wenn Wort1 alphabetisch vor Wort2 steht
dann wahr sonst falsch
Ü5. Realisieren Sie das Sortierprogramm aus Ü4 mittels logischer Programmierung!
(1) sortiere(K:R,S) sortiere(R,L), füge-ein(K,L,S)
(2) sortiere ([ ], [])
(3) füge-ein (X,K:R,X:K:R)  Vorgänger (X,K)
(4) füge-ein (X,K:R1,X:K:R2)  Vorgänger (X,K),füge-ein(X,R1,R2)
(5) füge-ein (X,[ ],[X])
(1) S ist sortierte Version von K:R, wenn L die sortierte Version von R ist und
S das Ergebnis des Einfügens von K an der korrekten Stelle
(3) Einfügen am Anfang
(4) Einfügen im Innern
Beispiele zur Listen- Notation (3.4):
Kopf([Hund Katze Schwein])=Hund
Erstes Element einer Liste
Rumpf([Hund Katze Schwein]) = [ Katze Schwein] Rest der Liste
Kopf([Katze]) = Katze
Liste aus 1 Element
Rumpf ([Katze]) = [ ]
Leerer Rumpf
Hund : [Katze Schwein] = [Hund Katze Schwein] Neuer Kopf
Hund : [ ] = [ Hund ]
Neuer Kopf in neuer Liste
Kopf (X:L) =X
Nutzung von Variablen
Rumpf (X:L)= L
Kopf(L) : Rumpf(L) =L, falls L nicht leer
Übung
Ü2.1 Zeigen Sie, daß der nachfolgende Programmausschnitt aus einer Infix- eine PostfixNotation erzeugt! Erläutern Sie Ablauf und Ergebnis am Beispiel von (a * ((b+c)*(d +
(e*f))))!
char c; Stack acc (50);
while (cin.get (c) )
{
x = 0;
if (c == ')' ) cout.put (save.pop( ));
if ( c == +  ) acc.push( c);
if ( c == * ) acc.push( c);
while ( c >= 0 && c <= 9 )
{ cout.put( ); cin.get ( c ); }
if (c != '(' ) cout << ' ';
}
cout << \n  ;
}
Ü2.2 Erläutern Sie die nachfolgende Implementation eines Stapels mittels verketteter Listen!
class Stack
{
public:
Stack (int max);
~Stack( );
void push (itemType v);
itemType pop( );
int empty( );
private:
struct node
{itemType key; struct node *next;};
struct node *head, *z;
}
Stack::Stack (int max)
{
head = new node; z = new node;
head -> next = z ; z->next = z;
}
Stack::~Stack( )
{
struct node *t = head;
while (t != z)
{head = t; t = t-> next; delete head; }
}
void Stack:: push (itemType v)
{
struct node *t = new node;
t-> key = v; t -> next = head -> next;
head -> next = t;
}
itemType Stack::pop( )
{
itemType x;
struct node *t = head -> next;
head -> next = t -> next; x = t -> key,
delete t; return x;
}
int Stack:: empty ( )
{ return head -> next == z;}
Ü2.3 Zeigen Sie, daß der nachfolgende Programmabschnitt aus einem Postfix- Ausdruck
einen Syntaxbaum erzeugt! Wie sieht der Baum für
A B C + D E ** F +* aus?
struct node
{char info; struct node *l, *r; };
struct node *x, *z;
char c; Stack stack (50);
z = new node ; z -> l = z; z -> r =z;
while (cin.get (c) )
{
while (c == ' ') cin.get ( c);
x = new node;
x -> info = c; x -> l = z; x -> r = z;
if (c == '+' || c == '*')
{x -> r = stack.pop( ); x->l = stack.pop( );}
stack.push (x) ;
}
Ü2.4 Wie wird ein binärer Baum von der Wurzel aus durchlaufen, wenn der nachfolgende
Traversierungsalgorithmus genutzt wird?
traverse (struct node *t)
{
stack.push ( t);
while (!stack.empty( ));
{
t= stack.pop( ); visit(t);
if (t -> r != z) stack.push (t->r);
if (t->l) != z) stack.push (t->l);
}
}
Herunterladen