Lösungsskizzen zur Prüfung

Werbung
UA DI H.M. Burgsteiner
27.1.2005
Lösungsskizzen zur Prüfung
(1) Laufzeit des ursprünglichen Algorithmus: 2n3 .
Mögliche Verbesserungen der Laufzeit durch:
a)
2n3
8
2
=
n3
4
b) 3n
c) 3n + 2( n2 )3 = 3n +
n3
4
Möglichkeit c) bringt in diesem Fall keine Verbesserung im Vergleich zu a). c) ist in
jedem Fall um 3n langsamer als a). Deshalb wird c) nicht weiter berücksichtigt.
Ab wann ist b) besser als a)?
a)=c)
n3
= 3n2
4
n = 12
Wertebereiche:
1 ≤ n ≤ 11 . . . a) ist schneller
n = 12 . . . a) und b) sind gleich schnell
n ≥ 13 . . . b) ist schneller
D.h. für grössere Datenmengen ist in jedem Fall Variante b) zu bevorzugen!
(2) Ja, diese Rekonstruktion ist möglich, da wir von einem sortierten Binärbaum ausgehen. D.h. nachdem ich weiss, dass bei der HR die Wurzel an erster Stelle steht, kann
ich die restlichen Elemente leicht in linken und rechten Teilbaum aufspalten, indem
alle Elemente die kleiner als die Wurzel sind zum linken Teilbaum gehören, alle
anderen Elemente zum rechten Teilbaum. Wobei die jeweiligen Elemente natürlich
nebeneinander stehen müssen, d.h. es muss eine klare Grenze zwischen den kleineren und den grösseren Elementen bestehen! Daraus lässt sich rekursiv leicht der
gesuchte Binärbaum konstruieren (wenn dies aufgrund der Reichenfolge prinzipiell
möglich ist!).
(3) Es kann z.B. ein Heap mit Grösse k als Datenstruktur verwendet werden. Dabei
ist von Vorteil, dass das Verhalden eines Elementes in O(log k) Zeit funktioniert
und dass das grösste Element immer an erster Stelle steht. Das bedeutet, man kann
in O(1) Zeit das grösste der gespeicherten Elemente finden. Der Algorithmus kann
damit einfach wie folgt aussehen:
* Initialisiere den Heap mit den ersten k Zeichen die online eingelesen werden.
Der Aufbau dieses Heap geschieht in O(k) Zeit.
* Für jedes weiter Element prüfe, ob es grösser als die aktuelle Wurzel ist (O(1)).
Wenn nein: Ersetze Wurzel durch neues Zeichen und Verhalde dieses (O(log k)
Zeit). Wenn ja: verwerfe das neue Zeichen (es ist grösser als die bisherigen k
kleinsten).
Die benötigte Gesamtzeit dieses Algorithmus ist O(n log k) (es wird maximal n
mal ein Zeichen in O(log k) Zeit verhaldet). Der Speicherbedarf ist O(k), denn es
ist maximal konstanter grosser Zusatzspeicher (etwa zum Zwischenspeichern eines
Zeichens) in Verwendung.
(4) Diese Aufgabe entspricht dem Problem der optimalen Codierung und kann mit diesem Ansatz gelöst werden. In diesem Fall sind lediglich nicht die Anzahl der zu
übertragenden Bytes, sondern der zu kopierenden Records gefragt. Die Reihenfolge
der zu kopierenden Paare von CDs ergibt sich dann aus dem entstehenden Optimierungsbaum. Gleichzeitig erbigt die Summe der inneren Knoten die Anzahl der
insgesamt kopierten Records, in diesem Fall 2310.
Herunterladen