• Keine Ergebnisse gefunden

Algorithmische Mathematik I Wintersemester 2017/18 Prof. Dr. Ira Neitzel AR. Dr. Tino Ullrich

N/A
N/A
Protected

Academic year: 2021

Aktie "Algorithmische Mathematik I Wintersemester 2017/18 Prof. Dr. Ira Neitzel AR. Dr. Tino Ullrich"

Copied!
2
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Algorithmische Mathematik I

Wintersemester 2017/18 Prof. Dr. Ira Neitzel AR. Dr. Tino Ullrich

Ubungsblatt 8. ¨

Abgabe am04.12.2017 vor der Vorlesung.

Aufgabe 1. (Die T¨urme von Hanoi)

Bei diesem Spiel gibt es drei St¨abe A, B und C. Auf den StabA werden nverschieden große Scheiben der Gr¨oße nach gestapelt. Ziel ist es, diese Scheiben der Gr¨oße nach auf den Stab C umzusortieren. Es d¨urfen nur kleinere Scheiben auf gr¨oßere gelegt werden und alle Scheiben m¨ussen stets im Spiel bleiben. Dies geht nat¨urlich nicht, ohne den StabB zu Hilfe zu nehmen. Definieren Sie eine rekursive

1 F u n k t i o n b e w e g e ( Z a h l n , S t a b A , S t a b B , S t a b C )

dienScheiben von StabA(¨uber StabB) nach StabC gem¨ass obiger Regeln verschiebt, und notieren Sie diese in Pseudocode. Geben Sie die Komplexit¨at (Laufzeit) tn dieses Algorithmus in der LandaunotationO an.

Hinweis: Beginnen Sie mit tn = tn−1+ 1 +tn−1 und verwenden Sie Aufgabe 3 vom Blatt 1.

(3 + 3 = 6 Punkte) Aufgabe 2. (Mergesort)

a. Gegeben sei folgende Zahlenfolge:

7,17,5,3,2,11,13,1

Sortieren Sie diese Zahlenfolge mit dem Mergesort-Algorithmus!

Geben Sie die Aufteilung der Felder in jedem Schritt an. Markieren Sie alle Zahlen in einem Feld mit 1,2,3 4,5,6 .

(6 Punkte) Aufgabe 3. (Fibonacci II)

Analysieren Sie den Rechenaufwand zur Berechnung der n-ten Fibonaccizahl mittels a. der (naiven) rekursiven Definition fn=fn−1+fn−2,n≥2,f0 =f1 = 1,

b. durch Erzeugen eines Arrays von Fibonaccizahlen (siehe Programmieraufgabe 1b vom Blatt 7).

Hinweis: Verwenden Sie Aufgabe 2 vom Blatt 7 f¨ur a).

(2 + 2 = 4 Punkte) Aufgabe 4. (Sortieren durch Einf¨ugen)

Wir betrachten folgenden Sortieralgorithmus, welchen man oft beim Kartenspiel anwen- det. Man zieht die Elemente eines (unsortierten) Arrays eines nach dem anderen und f¨ugt jedes an seinem richtigen Platz zwischen den bereits betrachteten ein (wobei diese sortiert bleiben). Das betrachtete Element wird eingef¨ugt, indem die gr¨oßeren Elemente einfach um eine Position nach rechts bewegt werden. Notieren Sie diesen Algorithmus in Pseudocode. Was ist hinsichtlich der worst-case Komplexit¨at zu erwarten?

1

(2)

(4 Punkte) Programmieraufgabe 1. (Mergesort)

Implementieren Sie eine Sortierfunktion basierend auf dem Mergesort-Algorithmus, um eine Datenbank bestehend aus Studentendaten

1 s t r u c t S t u d e n t { l o n g m a t n r ;

3 s h o r t geb [ 3 ] ;

s h o r t s t u d i e n f a c h ;

5 s h o r t f a c h s e m e s t e r ; }

einmal nach Gr¨oße der Matrikelnummer und ein anderes Mal nach dem Geburtsdatum zu sortieren. Das Geburtsdatum ist dabei als dreielementiges Integerarray gegeben.

a. Definieren Sie als erstes denstruct Student. Die Matrikelnummer ist eine sechs- stellige Zahl und das Geburtsdatum ein dreielementiges Array {Tag,Monat,Jahr}

aus Integern. Studienfach und Fachsemester ist jeweils durch eine Zahl zwschen 1 und 100 kodiert.

b. Erzeugen Sie anschließend eine (große) Datenbank mit beispielsweise N = 10000 zuf¨alligen Studenten. Diese k¨onnte man als Array (vonStudent) oder als verkettete Liste anlegen. Achten Sie darauf, dass Sie keinen 30. Februar o.¨a. generieren.

c. ¨Uberlegen Sie sich hinsichtlich des zus¨atzlichen Speicherbedarfs von Mergesort, ob sie direkt mit der Datenbank arbeiten oder besser mit einem “Adressarray”.

Damit ist gemeint, dass man ein Array mit Indizes (bzw Adressen) auf die Ele- mente der Datenbank nach einem selbstgew¨ahlten Vergleichskriterium sortiert.

Daf¨ur ben¨otigen Sie eine Funktion bool kleinerodergleich(Student* Dbase, int ind1, int ind2), die zur¨uckgibt, ob beispeilseise Dbase[ind1].matnr <=

Dbase[ind2].matnrist.

(15 Punkte) Die Programmieraufgabe wird in der Woche vom 04.12.2017 bepunktet

Programmieraufgabe 2. (Die T¨urme von Hanoi)

Implementieren Sie die “T¨urme von Hanoi” in C/C++. Nutzen Sie geeignete Arrays f¨ur die aktuelle Belegung der St¨abe (oder kodieren Sie diese als Bin¨arzahl). Geben Sie nach jeder Aktion die aktuelle Belegung aus, z.B. zeilenweise f¨ur jeden Stab, wobei jede Scheibe durch eine Nummer kodiert ist.

(5 Zusatz- Punkte) Die Programmieraufgabe wird in der Woche vom 04.12.2017 bepunktet

2

Referenzen

ÄHNLICHE DOKUMENTE

d) Sei y = a · x + b + ε ein einfaches lineares Modell.. e) Die Kovarianz der Merkmale X und Y kann nicht interpretiert werden und dient lediglich der Berechnung

Zwei Ecken x, y ∈ V werden genau dann durch eine Kante {x, y} verbunden, wenn sich die beiden {0, 1}-Folgen von x und y an genau einer Stelle unterscheiden.. Es bietet sich an

Diese Autoren (ohne Erd¨ os) bilden einen Graph, wobei zwei Autoren adjazent sind, wenn sie eine gemeinsame Publikation haben.. Auf der Webseite zur Vorlesung finden Sie diese Daten

Eine Flussmatrix kodiert den Fluss zwischen zwei verbundenen Knoten im Netz- werk (einfacher Graph).. ¨ Ahnlich einer Adjazenzmatrix, enth¨ alt der entsprechende Eintrag den Wert

Decide for which cases the optimality condition is sufficient and/or necessary. (6 points)

a) Der schwarze K¨ onig wird in die Ecke eines Schachbrettes positioniert. Nun wird die weisse Dame zuf¨ allig auf eines der ¨ ubrigen Felder gestellt. Mit welcher Wahrschein-

Wir betrachten eine Kfz-Haftpflichtversicherung, die Versicherungspr¨ amien nach dem folgenden Bonus/Malus-System bemisst. Verursacht er in einem Jahr keinen Unfall, so verbessert

Bemerkung: Diese Diskussion liefert einen Hinweis, dass der Interpolationsfehler am Rand des Intervalls wesentlich gr¨ oßer werden kann als im Inneren.. Durch eine kluge Wahl der