Musterlösug zum 13. Aufgabeblatt zur Vorlesug WS 006 Algorithme ud Programmierug III Aufgabe 1 Rekursios Gleichuge (Autor: Christia Grümme 10 Pukte (a Zuächst führe ich ei paar Rekursioe durch: T ( = 4T ( + = 4 (4T ( 4 + + = 4 T ( + 4 + = 4 (4T ( 3 + + 4 + = 4 3 T ( 3 + 4 + 4 + Nu vermute ich folgede Regelmäßigkeit beim k. Rekursiosschritt: k 1 T ( = 4 k T ( k + Das bestätige ich u Iduktiv: k 1 T ( = 4 k (4T ( (k + 1 + + k 1 = 4 k+1 T ( (k + 1 + 4 k + = 4 k+1 T ( (k + 1 + k Führe die Rekursioe bis zum Rekursiosaker T (0 fort (Aahme: ist grade: 1 ( T ( = 4 T + = 4 1 T (0 + Geometrische Reihe = ( 4 T (0 + 4 1 4 1 = T (0 + 3 + 3
Der eideutig domiate Summad ist 4 =. T ( Θ ( {k k N} Da wir o.b.d.a. aehme köe, dass T ( mooto wächst, gilt k N: Θ ( T (k T (k + 1 T ( (k + 1 Θ ( T ( Θ ( N (b Ich vermute folgede Regelmäßigkeit beim k. Rekursiosschritt: ( T ( = T + log Das bestätige ich u Iduktiv: T ( = = T ( k 1 = T + log k i ( ( k 1 T + log k+1 + log k i ( k+1 + k log i Führe die Rekursioe bis zum Rekursiosaker T (1 fort (Aahme: ist Zweierpotez: T ( = T ( = T + ( log ( 1 + log log i log ( 1 = T (1 + (log (log = T (1 + (log ( log log i log ( 1 log ( 1 (i ( log i Gauß sche Summe = T (1 + (log log ( (log ( 1 = T (1 + 1 (log + 1 log Der eideutig domiate Summad ist (log ud ka ich jetzt aalog zu obe N sage: T ( Θ ( (log
(c Zuächst führe ich wieder ei paar Rekursioe durch: ( T ( = T + ( 4 ( ( = T + + 4 4 ( ( = T + + 4 4 ( ( ( = (T + + + 4 3 4 4 ( ( ( = 3 T + + + 4 3 4 4 Ich vermute folgede Regelmäßigkeit beim k. Rekursiosschritt: Das bestätige ich u Iduktiv: ( k 1 T ( = k T + i 4 k 4 i T ( = k (T = k+1 T = k+1 T = k+1 T ( k 1 = k T + i 4 k 4i ( k 1 = k T + 4 k 3i ( ( k 1 + + 4 k+1 4 k 3i ( + k 4 k+1 4 + k 1 k 3i ( + k 4 k+1 + k 1 4k 3i ( 4 k+1 + Führe die Rekursioe bis zum Rekursiosaker T (1 fort (Aahme: ist Viererpotez: k 3i ( T ( = log 4 ( T + 4 log 4 ( = log 4 T log 4 ( 1 ( log 4 ( 1 + Die Summe etspricht de Afagsglieder der geometrische Reihe, welche durch beschräkt ist. Sei u log 4 ( 1 i = d <. ( 1 8 T ( = T (1 + d ( 1 8 3i i
Der eideutig domiate Summad ist ud u ka ich wieder aalog zu obe N sage: T ( Θ ( Aufgabe Geerische Schittstelle Hashtabelle (Autor: Olufemi Rosawo 10 Pukte Beschreibt eie Datetype mit eier Hashfuktio, die ei Ergebis vom Typ K liefert. Dies macht keie Aussage darüber auf welchem Typ der Hashwert berechet wird, soder ur, wie das Ergebis vo hash aussieht. Häufige Fehler: hash(k key ist uötig, da der Hashwert auf dem Objekt selbst berechet werde soll. Eie hash-methode mit eiem Argumet legt eie static Methode ah, die aber im iterface icht ausgedrückt werde ka. 1 public iterface Hashable <K> { public K hash (; 3 } iterface Hashtable Beispiel-Implemetatio eies Datetyps, desse Hashfuktio float Werte zurückgibt. Ma beachte, dass icht der Typ (=Schlüssel im HashTable selbst Float sei muss, soder ur das Ergebis vo hash. class FloatHashable 1 class FloatHashable implemets Hashable < Float > { 3 Strig value ; 4 5 public Float hash ( { 6 float ret = 0; 7 float factor = 1.1 f; 8 for ( char c: value. tochararray ( { 9 ret += c *1.1 f; 10 factor += 0.1 f; 11 } 1 retur ret ; 13 } 14 } HashTable fuer Schlüssel/Wert Paare Die Schlüssel müsse icht vom gleiche Typ sei, soder ur Utertype vo Hashable sei. Ma beachte, dass zwar ei gemeisamer ge. Typ K für alle Schlüssel agegebe wird, durch die wildcard i de Methode-Sigature ka aber bei jedem Aufruf auch ei Utertyp vo K beutzt werde. Häufige Fehler: HashTable< > exteds Hashable< > sagt aus, dass der HashTable selbst Hashable ist, was weig Si ergibt. HashTable<K exteds Hashable<K>, V> ist zwar soweit richtig, schräkt aber uötigerweise alle Schlüssel auf eie Type ei.
iterface HashTable 1 public iterface HashTable <K, V> { 3 public void isert ( Hashable <? exteds K> key, V value ; 4 public void remove ( Hashable <? exteds K> key ; 5 public V search ( Hashable <? exteds K> key ; 6 } Alterative Lösug, da die Aufgabestellug wohl etwas schwammig war. Hierbei ist der Rückgabewert der Hashfuktio stets it, daher stellt sich die Frage ach der Kompatibilität icht. 1 public iterface Hashable { public it hash (; 3 } class Hashable A dieser Stelle stößt der simple Asatz a seie Greze, da ma icht mehr typsicher ausdrücke ka, dass es sich um eie Implemetatio für float Werte hadelt. Vo der Klasse Float zu erbe wäre hier zwar die richtige Idee, fuktioiert aber icht, da Float eie fial Klasse ist. class FloatHashable 1 class FloatHashable implemets Hashable { Float value ; 3 public it hash ( { 4 retur Float. floattoitbits ( value ; 5 } 6 } Alterativer Hashtable class HashTable 1 public iterface HashTable <V> { 3 public void isert ( Hashable key, V value ; 4 public void remove ( Hashable key ; 5 public V search ( Hashable key ; 6 } Aufgabe 3 Geordete Wörterbücher (Autor: Alexader Pepper 10 Pukte Zähle sie vier Datestrukture für das geordete Wörterbuchproblem ud die asymptotische Laufzeit der dafür relevate Operatioe auf. Erkläre sie jeweils grob, i höchstes zwei Sätze, wie die Wörterbuchdate i der etsprechede Struktur orgaisiert sid. Lösug: Geordete Wörterbücher zeiche sich dadurch aus, dass sie icht ur wie ormale Wörterbücher, eie Wert uter eie Schlüssel ablege ud wieder abrufbar mache, soder dass sie auch Vorgäger ud Nachfolger eies Wertes (z.b. lexikographisch ausgebe köe.
Wichtige Fuktioe: void isert (K key, V value; void delete (K key; V lookup (K key; oder V search (K key; K ext (K key; //Nachfolgeschlüssel zu key K prev (K key; //Vorgägerschlüssel zu key Beispielaweisuge: 1 isert (" home ", " Zuhause "; isert (" star ", " Ster "; 3 isert (" light ", " Licht "; sert (" music ", " Musik "; 5 lookup (" light "; // retur : " Licht " 6 ext (" light "; // retur : " music " 7 prev (" light "; // retur : " home " Beispiel: Geordetes Wörterbuch Laufzeite (AC = Average Case, WC = Worst Case: isert delete search ext prev Liste O( O( O( O( O( Array O( O( O(log O(log O(log [bi. Suche] [bi. Suche] [bi. Suche] Biärbaum AV: O(log AV: O(log AV: O(log AV: O(log AV: O(log WC: O( WC: O( WC: O( WC: O( WC: O( -4 Baum O(log O(log O(log O(log O(log Rot-Schwarz O(log O(log O(log O(log O(log Baum Array AC: O(1 AC: O(1 AC: O(1 Θ( Θ( mit Hash WC: O( WC: O( WC: O( Die Strukture im Eizele: Doppelt Verkette Liste Jeder Datesatz (Key ud Value werde i eiem Objekt gespeichert, was eie Zeiger auf Vorgäger ud de Nachfolger habe. Der Zeiger auf de Nachfolger zeigt da immer auf de ächste Datesatz desse Key größer ist als der Key des aktuelle Datesatzes. Dyamisch wachsedes/schrumpfedes Array Der Datesatz wird sortiert i eiem Arrayfeld gespeichert. Falls mehr Datesätze als Arrayfelder vorhade sid, wird das Array vergrößert ud die alte Datesätze umkopiert. Biärer Suchbaum Jeder Datesatz ist ei Kote i eiem biäre Baum, desse likes Kid immer eie kleiere Key hat, als er Vater-Kote ud desse rechtes Kid aalog immer größer ist. Dieser Baum ka ubalaciert sei ud somit eie Worst-Case-Laufzeit vo O( habe. -4 Baum Balacierter Baum, der pro Kote bis zu drei Datesätze geordet speichert ud
zwei bis vier Kider hat (jeweils geordet. Im Vergleich zu Biäre Suchbäume ist dieser Baum immer balaciert ud hat deshalb eie Laufzeit vo O(log. Rot-Schwarz Baum Jeder Kote ist etweder Schwarz oder Rot. Wurzel ud jedes Blatt ist schwarz. Niemals dürfe zwei Kote hitereiader Rot sei. Wie der -4 Baum balaciert ud hat deshalb eie Laufzeite vo O(log. Array mit Hash-Fuktio Zu jedem Key wird mit eier Hash-Fuktio ei Hash-Wert errechet, der eiem Idex im Array eispricht. A dieser Stelle wird da der Datesatz gespeichert. Falls mehr als ei Datesatz i eiem Arrayfeld liegt (Kollisio, werde sie i eier (usortierte eifach-verkettete Liste gespeichert. Diese Datestruktur wird eigetlich für ormale Wörterbücher gebraucht. Adere Datetype, die aber für das geordete Wörterbuch ugeeiget sid: Warteschlage (Queue Gibt ur das Elemet aus, was am Lägste i der Warteschlage ist (removehead. Prioritätswarteschlage Biär-Heap Biomial-Heap Gibt ur das Elemet mit der iedrigste Priorität (getmi aus. Stack Gibt ur das Elemet aus (pop, was als letztes hizugefügt (push wurde. Aufgabe 4 Biäre Suchbäume (Autor: Max Neuma 10 Pukte Aufgabe: Biäre Suchbäume Im Allgemeie ist das Vereiige vo zwei biäre Suchbäume B 1, B zu eiem eizige icht effizieter möglich, als alle Kote eies Baumes i de adere eizufüge. Was wäre die Laufzeit dieses Vorgehes? Etwerfe Sie eie Algorithmus, der de spezielle Fall, dass alle Kote vo B eie größere Wert habe, als alle vo B 1, effiziet erket ud aschließed möglichst effiziet B 1 ud B zu eiem biärem Suchbaum vereiigt. Aalysiere Sie die asymptotische Laufzeit Ihres Algorithmus i Abhägigkeit vo der Baumhöhe. Hiweis: Der Algorithmus darf B 1 ud B zerstöre, d.h. ach dem Algorithmus müsse B 1, B icht mehr i ihrer ursprügliche Struktur erhalte sei. Lösug: Das Zusammemische zweier biärer Suchbäume zu eiem ist i O( möglich. Im schlimmste Fall beihaltet jeder Baum Elemete ud ist etartet. Somit muss mal i eie Tiefe vo midestes eigefügt werde, was i O( liegt. Nu soll der Spezialfall erkat werde, i dem alle Elemete aus B größer sid als die Elemete aus B 1. Wie i Abb. zu sehe ist ka i O(h Zeit das kleiste ud größte Elemet der beide Bäume bestimmt werde idem ma sich immer rechts
Abbildug 1: Suchbäume vor dem Zusammefüge (liks hält bis es icht mehr weiter geht. Ist u biggest i T1 immer och kleier als smallest i T, so wisse wir, dass auch alle adere Kote im eie Baum kleier als alle Kote des adere Baumes sid. Abbildug : Suchbäume ach dem Zusammefüge Um die beide Bäume zu vereiige wird, wie i Abb. zu sehe ist, der kleiste Kote aus B gelöscht ud als eue Wurzel eigesetzt, mit B 1 als like ud B als rechte Soh. Die beötigte Zeit hägt ur vo der Zeit ab, die ma beötigt um de kleiste Kote aus dem Baum zu etfere. Das Fide geschieht i O(h Schritte ud für das Umhäge der Zeiger beötige wir kostate Zeit. Die Gesamtzeit liegt also i O(h.
Algorithmus 1 : MergeBiSearchTree(T1, T 1 3 4 5 6 7 8 9 10 11 1 13 14 15 16 17 18 #temporäre Variable iitialisiere biggestt1 T1 smallestt T #größtes ud kleistes Elemet bestimme while (biggestt1.right leer biggestt1 biggestt1.right while (smallestt.left leer smallestt smallestt.left #prüfe ob B 1 < B if (biggestt1 smallestt mergenormal(t1, T #Neue Wurzel eihäge else smallestt.father.left smallestt.right smallest.left T1 smallest.right T #Rückgabe des eue Wurzelkotes retur smallestt