• Keine Ergebnisse gefunden

FAKULT TF RINFORMATIK ¨A ¨U

N/A
N/A
Protected

Academic year: 2022

Aktie "FAKULT TF RINFORMATIK ¨A ¨U"

Copied!
11
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)TECHNISCHE UNIVERSITÄT MÜNCHEN. FAKULTÄT FÜR INFORMATIK. Lehrstuhl für Physik-basierte Simulation Grundlagen: Algorithmen und Datenstrukturen Prof. Dr.-Ing. Nils Thürey, G. Kohl, L. Prantl, E. Franz. SS 2021 Übungsblatt 5 2021–05–12. Übung: KW 20 (2021–05–17 2021–05–21) Abgabe H: 2021–05–30 (bis 23:59 Uhr) Dieses Blatt enthält zusätzlichen Platz für Nebenrechnungen. Aufgabe 5.1 (P) Dynamisches Array Wir betrachten die Bankkonto-Methode angewandt auf dynamische Arrays für beliebige Werte ↵ und mit ↵ > > 1. Hierbei beschränken wir uns auf den analytisch etwas einfacheren Fall, dass ↵, 2 N. Die Analyse für positive, nicht natürliche Zahlen ↵ und ist ähnlich. 1 Man erinnere sich, dass dynamische Arrays über die Methoden pushBack (= Einfügen eines Elements am Ende der Liste“) und popBack (Löschen des letzten Elements der Liste“) ” ” verwaltet werden. Im Folgenden bezeichne n stets die aktuelle Anzahl der Elemente im Array, und w die Größe des Arrays. Unter bestimmten Voraussetzungen rufen pushBack und popBack die Methode reallocate als Untermethode auf: Wenn bei pushBack vor der Einfügung des Elements das Array voll ist (d.h. n = w), dann wird die Methode reallocate aufgerufen, die ein neues Array der Größe n anlegt und alle alten Elemente in das neue Array kopiert. Anschließend wird das neue Element eingefügt. Wenn bei popBack nach der Löschung des letzten Elements der Füllstand des Arrays nur noch maximal 1/↵ beträgt (d.h. ↵ · n  w), dann wird die Funktion reallocate aufgerufen, die ein neues Array der Größe n anlegt und alle Elemente in das neue Array kopiert. Wir fassen reallocate als eigenständige Methode auf. Es ist nicht schwierig zu sehen, dass die tatsächliche Laufzeit von pushBack und popBack konstant ist (d.h. durch eine Konstante nach oben beschränkt), und die Laufzeit von reallocate durch O(1) + c · n beschränkt ist, wobei c eine Konstante ist und n die Zahl der kopierten Elemente. Wie in der Vorlesung ist es legitim, c = 1 zu setzen, indem wir annehmen, dass wir die Laufzeit in einer Einheit messen, die gerade der Laufzeit einer einzelnen Kopieroperation entspricht. Wir erhalten damit: T (pushBack) T (popBack) T (reallocate). 2 O(1) 2 O(1) = O(1) + n, wobei n = Anzahl der kopierten Elemente. Ziel dieser Aufgabe ist der Nachweis mit einer amortisierten Analyse, dass die Laufzeit von Operationen der Länge m auf einem zu Beginn leeren dynamischen Array in O(m) liegt (zu Beginn hat das Array Größe 1). 1. In einem solchen Fall muss die Größe des neuen Arrays mithilfe der Aufrundungsfunktion als d · ne definiert werden, was eine entsprechende Anpassung der Funktion erfordert und die Analyse etwas komplizierter macht. In der Literatur werden in solchen Fällen eigentlich notwendige Auf- oder Abrundungen nicht selten einfach weggelassen, um die Analyse zu vereinfachen. Die Analyse ist dann zwar nicht mehr absolut präzise, aber zumindest größenordnungsmäßig gut genug“ und man erkennt die dahinterstehende ” Idee. Der Leser ist dann gefordert, die Details selber zu ergänzen. Auf einen Blick zu erkennen, wann solche Vereinfachungen möglich sind, erfordert etwas Erfahrung..

(2) 2 Dafür legen wir fest, dass pushBack /( 1) Token auf das Konto einzahlt, popBack /(↵ ) Token einzahlt, und reallocate n Token vom Konto abhebt, wenn n Elemente kopiert werden, also: (pushBack) (popBack) (reallocate). 7. E. /( 1) 1 /(↵ ) n, wobei n = Anzahl der kopierten Elemente. = = =. 1. D. (a) Zeigen Sie, dass dieses Amortisationsschema zulässig ist, indem Sie zeigen, dass das Tokenkonto zu jedem Zeitpunkt nichtnegativ ist. Hinweis: Bezeichne n1 die Zahl der Elemente unmittelbar nach einem reallocate (im Falle von pushBack also noch vor der Einfügung des neuen Elements). Machen Sie sich klar, dass das Array zu diesem Zeitpunkt Größe w1 := · n1 hat, und w1 n1 Positionen frei sind. Das nächste reallocate wird erst dann aufgerufen, wenn für die Zahl n der Elemente entweder n = w1 oder ↵n  w1 gilt.. HA next. revocate. pushBack. m na ni. nn. MB m. Wi ha. m n. 1pm. PHP 1 Blip 1 NIDI Wp. n. d. 1. nn. we m. reallocate. reallocate. NÈI. n. next. pollo. B. la B pm Bn Bn la B m an Bn a p nla Alla.pt. Aierini't Kann das nidiate reallocate beza.nl werden Kantostand 0 da. an e un. n. nel Zu Begin neo pushBack zakk 71 Token 1 so ein D Bein erste reallocate Kontostand.

(3) 3 (b) Zeigen Sie, dass unter diesem Amortisationsschema die amortisierte Laufzeit jeder Operation in O(1) liegt, und folgern Sie, dass die Worst-Case-Laufzeit für Operationsfolgen der Länge m in O(m) liegt.. TCO. A o. t. A o. 0 1. E. zuzeige icheITokeniinderanltatsci.ch Lanfzeit auf dem Kanto. 1 pushBack. TIpushBack t D 1 BNP 1. pushBack e. karst. 1 popBack 1 reallocate. fair. m. 04. T popBack t D popBack. 011. t. psico B karst. T reallocate O 1 tt. Operationen. e. 011. DIreallocate E. 0h. also in 0cm. Aufgabe 5.2 (P) Betrunkener Übungsleiter Wir betrachten einen torkelnden Übungsleiter an einer Kletterwand, der die folgenden beiden Operationen durchführen kann: hoch, runter(int k). Die Starthöhe des Übungsleiters beträgt 0 Meter. Durch die Operation hoch steigt der Übungsleiter von seiner aktuellen Position aus genau einen Meter höher. Diese Operation hat die Laufzeit 1. Durch die Operation runter(int k) fällt der Übungsleiter von seiner.

(4) 4 aktuellen Position aus exakt min{h, k} Meter nach unten, wobei h die aktuelle Höhe des Übungsleiters ist. (Das bedeutet, dass der Übungsleiter nie tiefer als seine Starthöhe sinken kann). Wir nehmen hierbei an, dass k stets eine natürliche Zahl (nicht-negativ) ist. Die Operation runter(int k) hat die Laufzeit min{h, k}. Zeigen Sie mithilfe der Bankkonto-Methode, dass die amortisierten Laufzeiten der Operationen hoch und runter(int k) in O(1) liegen..

(5) 5 Aufgabe 5.3 (P) Hashing mit Chaining Veranschaulichen Sie Hashing mit Chaining. Die Größe m der Hash-Tabelle ist in den folgenden Beispielen jeweils die Primzahl 11. Die folgenden Operationen sollen nacheinander ausgeführt werden. insert 3, 11, 9, 7, 14, 56, 4, 12, 15, 8, 1 delete 56 insert 25 Der Einfachheit halber sollen die Schlüssel der Elemente die Elemente selbst sein.. Kielce. a) Verwenden Sie zunächst die Hashfunktion g(x) = 5x k(e) g(k(e)). 1. 3. 1. Operation: insert(3): 0 1 2 3 4 5 6 7. 4. 7. 8. 11. 8. 9. 10. 119. 1197. 10. 8. 9. 10. 14. 15. 25. 56. 8. 9. 10. 8. 9. 10. 9. 10. 1412 8. 356. 356. 10. 9. 10. 15 8. 8. 10. 15 8. 9. 10. 4. 8. 12. Operation: delete(56): 0 1 2 3 4 5 6 7. 9. 4. 8. 15. 14112. 312 141. 9. 4. 1412. 1412. 10. 4. 11. Operation: insert(1): 0 1 2 3 4 5 6 7. 1197. 8. 356. 10. Operation: insert(8): 0 1 2 3 4 5 6 7. 1197 8. 14. 356. 9. 4. 9. Operation: insert(15): 0 1 2 3 4 5 6 7. 1197. 8. 356. 8. Operation: insert(12): 0 1 2 3 4 5 6 7. 1197. 14 356. 14. 7. Operation: insert(4): 0 1 2 3 4 5 6 7. 1197. 3. 6. Operation: insert(56): 0 1 2 3 4 5 6 7. 1197. 9. 3. 5. Operation: insert(14): 0 1 2 3 4 5 6 7. 1197. 8. 3. 4. Operation: insert(7): 0 1 2 3 4 5 6 7. 12. 1197. 3. 3. Operation: insert(9): 0 1 2 3 4 5 6 7. 11. 549271054945. 3 2. Operation: insert(11): 0 1 2 3 4 5 6 7. 9. mod m.. 8. 9. 4. 15. 10.

(6) Skalarprodateti 13. Operation: insert(25): 0 1 2 3 4 5 6 7. 1197. 312 141 25. 6. arte taek 8. 9. 10. 4. 8. 15. b) Berechnen Sie die Hashwerte unter Verwendung der Hashfunktion h(x) = a · x. mod m. nach dem aus der Vorlesung bekannten Verfahren für einfache universelle Hashfunktionen, wobei a = (7, 5) und x = (b 2xw c mod 2w , x mod 2w ) für w = blog2 mc = b3.45 . . .c = 3 gilt und der Ausdruck a · x ein Skalarprodukt bezeichnet. k(e) h(k(e)). 1. 3. 4. 7. 8. 9. 11. 12. 14. 15. 25. 56. Aufgabe 5.4 (P) Stapelschlange In dieser Aufgabe geht es darum, einen Algorithmus, der eine Queue für Integer-Zahlen mittels zweier Stacks implementiert, hinsichtlich seiner Laufzeit zu untersuchen. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15. class Stapelschlange { private Stack s1 = new Stack () ; private Stack s2 = new Stack () ; public void enqueue ( int v ) { s1 . push ( v ) ; } public int dequeue () { if ( s2 . isEmpty () ) while (! s1 . isEmpty () ) s2 . push ( s1 . pop () ) ; return s2 . pop () ; }. degnare. µ. enaueuetfr.in sn. }. 52. Die Klasse Stack hat dabei folgende Methoden: Methode. Beschreibung void push(int v) legt eine Zahl auf den Stack int pop() nimmt die oberste Zahl vom Stack boolean isEmpty() prüft, ob der Stack leer ist. Laufzeitklasse O(1) O(1) O(1). a) Geben Sie die Laufzeitklasse der Worst Case-Laufzeit eines Aufrufs der dequeue()-Methode in Abhängigkeit der aktuellen Größe der Queue n in Landau-Notation an.. Neil. 04. nach 52 sesich warden muss Laufzeit der einb) Überlegen Sie ein Amortisierungsschema, welches die amortisierte zelnen Operationen minimiert. Nennen Sie die amortisierten Laufzeitklassen der enqueue(int v)- und dequeue()-Methode, die sich aus Ihrem Amortisierungsschema ergeben. Zeigen Sie die Richtigkeit Ihres Amortisierungsschemas (das Tokenkonto darf niemals negativ werden) und der resultierenden Laufzeitklassen.. Kopiert.

(7) 7 Aufgabe 5.5 (E) Chaining 2 Veranschaulichen Sie Hashing mit Chaining. Die Größe m der Hash-Tabelle ist in den folgenden Beispielen jeweils die Primzahl 17. Die folgenden Operationen sollen nacheinander ausgeführt werden nach dem exakt selben Schema wie in der Tutoraufgabe dieses Blattes. insert 129, 65, 50, 3, 17, 1234, 156 delete 50, 3 insert 456, 3 Der Einfachheit halber sollen die Schlüssel der Elemente die Elemente selbst sein. a) Verwenden Sie zunächst die Hashfunktion g(x) = 3x. mod m.. b) Verwenden Sie jetzt die Hashfunktion h(x) = a · x. mod m. nach dem aus der Vorlesung bekannten Verfahren für einfache universelle Hashfunktionen, x wobei a = (3, 1, 3) und x = (b 22w c mod 2w , b 2xw c mod 2w , x mod 2w ) für w = blog2 mc = b4.09 . . .c = 4 gilt und der Ausdruck a · x wieder das Skalarprodukt bezeichnet. Hinweis: 22w = 28 = 256 für w = 4. Vordruck für Teilaufgabe a) k(e) g(k(e)). 3. 17. 50. 65. 129. 156. 456. 1234. 1. Operation insert(129): 0 1 2 3 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 2. Operation insert(65): 0 1 2 3 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 3. Operation insert(50): 0 1 2 3 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 4. Operation insert(3): 0 1 2 3 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 5. Operation insert(17): 0 1 2 3 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.

(8) 8 6. Operation insert(1234): 0 1 2 3 4 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 7. Operation insert(156): 0 1 2 3 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 8. Operation delete(50): 0 1 2 3 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 9. Operation delete(3): 0 1 2 3 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 10. Operation insert(456): 0 1 2 3 4 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 11. Operation insert(3): 0 1 2 3 4. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 129. 156. 456. 1234. 5. Vordruck für Teilaufgabe b) k(e) 3 g(k(e)). 17. 50. 65. 1. Operation insert(129): 0 1 2 3 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 2. Operation insert(65): 0 1 2 3 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 3. Operation insert(50): 0 1 2 3 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 4. Operation insert(3): 0 1 2 3 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 5. Operation insert(17): 0 1 2 3 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 6. Operation insert(1234):.

(9) 9 0. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 7. Operation insert(156): 0 1 2 3 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 8. Operation delete(50): 0 1 2 3 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 9. Operation delete(3): 0 1 2 3 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 10. Operation insert(456): 0 1 2 3 4 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 11. Operation insert(3): 0 1 2 3 4. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 5.

(10) 10 Aufgabe 5.6 (H) Double Hashing - Diese Aufgabe zählt für den Notenbonus. Sie finden die Aufgabe und weitere wichtige Informationen unter https://artemis.ase. in.tum.de/#/courses/119/exercises/3770. Warten Sie mit Verständnisfragen bitte, bis das Thema in der Vorlesung bzw. in der Übung besprochen wurde. Hier werden sich die meisten Fragen von alleine klären.. Anfgabe 5.3. T. t. d. la.lt 8 ha 64. màs. 7. LES. a. mod b. 7. LEI. 7. LEI. 11. p. 33. A. a. 5. LEI. una. t. Vielfaches von a. 5x. x. 5. t. 11. 5. t. b. x mod. a. n. 8. b. LI 8 LEI. 40. LEI. 5x p O. Hashfunktion. aus. a.

(11) Aufgabe 5.4 b n è. Alo 1. gro.pe der Queue. Tco en queue. 1 dequene. A. D o. t e. ne Anzahl zu. 04. e. Kopierendettemente. 0. falls s2 isEmpty. O 1. sorest. 1. enqueue. falls s2. n. A dequiene. O. son. s ato Tco. A enquire. e. Alo. thenqueue 0h. A dequeue. isEmpty. 1. t. e. Tide queue 011 011. t. x. Menavene 0 1 ta. dequene. Ht. c. 0. E. 0h 04.

(12)

Referenzen

ÄHNLICHE DOKUMENTE

By default, the Hawk supplies term power on all ports. At least one device on any nSSI or SCSI interconnect must supply term power to the terminators. There is no harm in

Wenn f und h sehr komplizierte Funktionen sind, für die ein direkter Beweis schwierig ist, kann man einen Zwischenschritt verwenden: Man formuliert eine Funktion g, sodass f n 2

Sei S eine Menge von Operationen, und bezeichne T eine obere Schranke für die Laufzeit einer Operation 2 S diese Laufzeit kann vom aktuellen Zustand des Objekts, auf dem

Zeichnen Sie den durch die Operation entstehenden AVL-Baum, und schreiben Sie dazu, ob keine Rotation, ob eine Rotation oder ob eine Doppelrotation durchgeführt wurde... c Führen

Beim Löschen von Elementen aus inneren Knoten wird üblicherweise versucht, entweder den symmetrischen Vorgänger oder symmetrischen Nachfolger intelligent zu wählen.. Für

4 Aufgabe 12.2 P Dijkstra Führen Sie den Algorithmus von Dijkstra auf dem folgenden Graphen durch, um jeweils einen kürzesten Weg von s zu jedem anderen Knoten zu

In C gelten die folgenden Präzedenzregeln nicht vollständig: [] Array und Funktion werden von links nach rechts abgearbeitet und haben Vorrang vor * Pointer/Dereferenzierung und

• If a customer has a problem that is not ready for a development tool or can not be developed by using the conventional design flow, EPSON supports the development of EPSON's