• Keine Ergebnisse gefunden

FAKULT TF RINFORMATIK ¨A ¨U

N/A
N/A
Protected

Academic year: 2022

Aktie "FAKULT TF RINFORMATIK ¨A ¨U"

Copied!
6
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 4 2021–05–05. Übung: KW 19 (2021–05–10 2021–05–14) Abgabe H: 2021–05–23 (bis 23:59 Uhr). Aufgabe 4.1 (P) Hands-On Data Structures: Selbstorganisierende Liste Sie sehen das Grundgerüst für eine sich selbst-organisierende, dynamische Liste, wie sie in der Vorlesung angesprochen wurde. Diese wollen wir im Folgenden erweitern. Beachten Sie die zusätzlichen Laufzeit- und Speicher-Beschränkungen. Sie können vereinfachend davon ausgehen, dass nur ein Thread auf die Liste zugreift. a) Implementieren Sie Methode void add(...), die einen neuen Knoten erstellen soll und an das Ende der Liste anhängt. Die Laufzeit der Funktion soll in O(1) sein. Sie dürfen hierfür die Klasse SelfOrganizingList erweitern. b) Implementieren Sie die Methode Optional<T> findFirst(Predicate<T> p). Für den ersten Knoten n, für den das Prädikat zu true evaluiert (p.test(n.data)), soll dessen Wert zurückgeben werden (Optional.of(n.data)). Außerdem soll dieser Knoten an den Anfang der Liste verschoben werden. Sollte kein Knoten dem Prädikat genügen, so soll Optional.empty() zurückgegeben werden und die Liste nicht verändert werden. c) Implementieren Sie die Methode void removeDuplicates(), die gleiche Elemente entfernt und nur das erste dieser Elemente in der Liste belässt. Ihre Funktion soll O(1) Speicher verbrauchen. public class SelfOrganizingList <T > {. private static class Node <T > { T data ; Node <T > next ; Node ( T d ) { data = d ; next = null ; } }.

(2) 2 public void add ( T data ) {. } public Optional <T > findFirst ( Predicate <T > p ) {. ÌÈ.ro. È. head. ertoilHproiditat. ma. I tail. } public void removeDuplicates () {. n head. nplikat0. NÉ. Duplikat. I.jpInie'Inie'Immer. catena.

(3) 3. } Aufgabe 4.2 (P) Bankkonto Tutorial Diese Tutoraufgabe ist ein Kurztutorial für die Bankkonto-Methode, die in der Vorlesung für dynamische Arrays verwendet wurde. 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 die Operation Pmwirkt, sowie von Argumenten abhängen). Analog dazu bezeichne T ( 1 , 2 , . . . , m ) := i=1 T ( i ) (die korrespondierende obere Schranke für) die Laufzeit der Operationsfolge ( 1 , 2 , . . . , m ). Ziel einer amortisierten Analyse ist, eine möglichst genaue obere Schranke für T ( 1 , 2 , . . . , m ) zu finden. Bei der Konto-Methode bestimmen wir dazu eine Funktion : S ! R, die folgende Eigenschaften besitzt: (i) Für alle legalen (d.h. ausführbaren) Operationsfolgen ( 1 , . . . , (ii). ist möglichst gut gewählt.. m). gilt. Pm. i=1. ( i). 0.. 19 or 9,04 giltÈpicoil 70. Was Eigenschaft (ii) bedeutet, wird später noch spezifiziert. Für 2 S ist ( ) die Veränderung des Tokenkontos durch die Operation . Wenn ( ) > 0, dann zahlt die Operation auf das Konto ein, falls ( ) < 0, dann hebt sie vom Konto ab. A( ) := T ( ) + ( ) nennen wir dann die amortisierte Laufzeit von . (In der PmVorlesung wird A( ) auch Tokenlaufzeit genannt.) Entsprechend ist A( 1 , . . . , m ) := i=1 A( i ) die amortisierte Laufzeit der Operationsfolge ( 1 , . . . , m ).. Eigenschaft (i) sagt aus, dass das Tokenkonto nie negativ ist. Die Sinnhaftigkeit eines stets. einfingere in 04. 0E info. in 0 n 101.

(4) gen. I. o_O. Einfagen in an 4. infingere in. OG E Beobachtung: nichtnegativen Kontos ergibt sich aus folgender A( 1 , . . . ,. m) =. m X. A( i ) =. i=1. = T ( 1, . . . ,. m). +. m X. m X. (T ( i ) +. ( i )). T ( 1, . . . ,. m). i=1. ( i). |i=1 {z. 0. ÉtaitÉtica O. }. Die amortisierte Laufzeit der Operationsfolge ist also eine obere Schranke für ihre tatsächliche Laufzeit. Jede Tokeneinheit steht für eine gewisse konstante Menge an Laufzeit. Damit wird auch klar, was die (möglicherweise nicht ganzzahlige) Tokenzahl auf dem Konto aussagt: Es ist genau der Wert, um den die amortisierte Laufzeit die durch T gegebene (obere Schranke für die) tatsächliche Laufzeit übersteigt. Nun zu Eigenschaft (ii). Das wichtigste Ziel ist, dass die amortisierten Laufzeiten A( 1 , . . . , m ) von Operationsfolgen asymptotisch möglichst klein sind, damit man gute obere Schranken für die tatsächliche Laufzeit von Operationsfolgen erhält. Zu diesem Zwecke ist es oft zielführend, so zu wählen, dass max 2S (A( )) möglichst klein ist, d.h. die Operation mit der schlechtesten amortisierten Laufzeit soll möglichst geringe amortisierte Laufzeit besitzen. Wenn dieses Ziel erreicht ist, ist O(m · max 2S (A( ))) eine obere Schranke für die asymptotische Laufzeit von Worst-Case-Operationsfolgen (wobei die Länge m der Operationsfolgen die asymptotische Variable ist). Bei einer hinreichend guten Wahl von und Analyse ist diese obere Schranke oft nicht schlecht. Aufgabe 4.3 (P) Amortisation Wir betrachten eine Folge von m 1 Inkrement-Operationen iterativ angewandt auf 0, das heißt, dass die k-te Inkrementoperation k die Zahl k 1 zur Zahl k inkrementiert. Wir nehmen an, dass alle Zahlen in Dezimalschreibweise geschrieben werden, also mit den Zi↵ern 0, 1, . . . , 9. Außerdem nehmen wir (vereinfachend) an, dass die Änderung einer Stelle (von x zu x + 1 für alle x 2 {0, . . . , 8} bzw. von 9 zu 0) Laufzeit 1 hat und die Laufzeit jeder Inkrement-Operation gerade die Anzahl der Stellen ist, die durch die Operation geändert werden.. se. In. (a) Definieren Sie ein zulässiges Amortisationsschema : { 1 , 2 , . . .} ! R der BankkontoMethode, sodass für jede Inkrementoperation k die amortisierte Laufzeit A( k ) = T ( k ) + ( k ) gerade 10 beträgt (hierbei sei T ( k ) die tatsächliche Laufzeit von k ). 9 (b) Zeigen Sie, dass Ihr Amortisationsschema zulässig ist, indem Sie nachweisen, dass das Tokenkonto stets nichtnegativ ist.. ke 13000. sx ancora. 5g. 0 ok. Ok 12999 für13000 Hinweis: Verwenden Sie in Ihrem Amortisationsschema jede Operation k die Anzahl Sx!x+1 ( k ) der Stellen, die durch k von x zu x + 1 geändert werden, sowie die Anzahl S9!0 ( k ) der Stellen, die durch k von 9 zu 0 geändert werden. Aufgabe 4.4 (P) Algorithmen entwickeln und Laufzeiten bestimmen (Falls Zeit bleibt) Bearbeiten Sie diese Aufgabe im Tutorium nur, falls Zeit bleibt. Sonst bearbeiten Sie die Aufgabe bitte als Eigeninitiativaufgabe. Entwerfen Sie im Folgenden zwei einfache Funktionen und erarbeiten Sie korrekten javaCode. Bestimmen Sie dann die asymptotische Laufzeit Ihres Algorithmus. Sie dürfen in. 19 4. 3.

(5) 5 ihren Algorithmen ausschließlich Schleifen, If-Statements, Additionen, Subtraktion sowie Multiplikation verwenden. a) Entwerfen Sie eine Funktion, die für zwei integer a und b die ganzzahlige Division berechnet. Sie können davon ausgehen, dass a > 0 und b > 0 gilt. b) Entwerfen Sie eine Funktion, die für zwei integer a und b den Rest berechnet, also a mod b. Sie können davon ausgehen, dass a > 0 und b 6= 0 gilt. Aufgabe 4.5 (E) Noch mehr Spaß mit O a) Ordnen Sie die folgenden Funktionen aufsteigend bzgl. O-Notation. n2 2n. 1. (log n)8. 22. n. n42. 0.04n. (n log n)3. b) Zeigen Sie mittels Induktion, dass für jedes n 2 N mit n > 0 gilt, dass n X 2j  2n+1 j=0. Geben Sie einen möglichst schwach wachsende Funktion f an, für die gilt.. c) Geben Sie eine Funktion f : N ! R an, für die n X log j 2 O(f ). Pn. j=0. 2j 2 O(f ). j=1. gilt, und weisen Sie die Gültigkeit nach.. Aufgabe 4.6 (E) Noch mehr Spaß mit mortisation Wir betrachten eine Folge von m 1 Inkrement-Operationen iterativ angewandt auf z0 = 0, das heißt, dass die k-te Inkrement-Operation k die Zahl zk 1 = k 1 zur Zahl zk = k inkrementiert. Wir nehmen an, dass alle Zahlen binär dargestellt werden. Außerdem nehmen wir (vereinfachend) an, dass jeder Bitflip Laufzeit 1 hat und die Laufzeit jeder InkrementOperation gerade die Anzahl der Bits ist, die durch die Operation geflippt werden. Da die Zahl zm = m als letzte produzierte Zahl von allen Zahlen z0 , . . . , zm die größte Bitlänge besitzt, ist klar, dass jede Inkrement-Operation nicht mehr als dlog2 me viele Bits flippt. Eine pessimistische Analyse würde also zeigen, dass die Worst-Case-Laufzeit maximal m · dlog2 me 2 O(m log m) beträgt. Mithilfe einer amortisierten Analyse können wir aber eine bessere Schranke zeigen. Finden Sie ein Amortisationsschema , für das die amortisierte Laufzeit einer Operationsfolge der Länge m in O(m) liegt. Zeigen Sie außerdem, dass Ihr Amortisationsschema zulässig ist, indem Sie nachweisen, dass das Token-Konto stets nichtnegativ ist. Können Sie so finden, dass die amortisierte Laufzeit einer Operationsfolge der Länge m sogar nicht größer als 2m ist? Hinweis: Bezeichne B0!1 ( k ) und B1!0 ( k ) die Anzahl der Bitflips von 0 zu 1 bzw. von 1 zu 0 durch die k-te Inkrement-Operation k . Machen Sie die Anzahl der Token, die durch k auf das Konto eingezahlt bzw. abgehoben werden, von B0!1 ( k ) und B1!0 ( k ) abhängig. Gibt es eine generelle Beziehung zwischen einem Bitflip von 0 zu 1 und von 1 zu 0 an einer festen betrachteten Binärstelle?.

(6) 6 Aufgabe 4.7 (H) Hashing mit Chaining - 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/3768. 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.. 79 A. 43. È_so. Alon. a. o ok. 5g o ok. sx. T ok. 1. sxtilokltsg.dk tsg.dk. to. Alex 1. 1 g. DION. tsgt. sg.sc. g. der Kontostandentspricht Immer. b. Qnerswmme.lk. und. 1. o. ist. davit. 2. a. 9. Kantostand 99. 99.1g 11.9. Immer. 8. nicht negativi. fibradeNy. 7 0. 09. Ita. 10 i. e s. t. 11 kontostomd f.ge 1 IN Kantostand Atf te.

(7)

Referenzen

ÄHNLICHE DOKUMENTE

Theorem 3.7 (entartet): Ein ausgeglichener 2d-Baum f¨ ur n Punkte in der Ebene l¨ aßt sich in Zeit O(n log n) konstruieren.. Anwendung

+ Energy Economics Group, Institut für Energiesysteme und elektrische Antriebe Technische Universität Wien. + Institut

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

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

Der Baum T ist ein fast vollständiger Binärbaum, wenn T entweder nur aus der Wurzel besteht oder wenn die ersten t 1 Level gemeinsam einen vollständigen Binärbaum bilden, und

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