• Keine Ergebnisse gefunden

Aufgabe2(OptimierungvonBubblesort, 3Punkte ) Aufgabe1(Rekursionsb¨aume, 3Punkte ) Abgabeam26.05 ¨UbungenzuInformatikII-Blatt6

N/A
N/A
Protected

Academic year: 2021

Aktie "Aufgabe2(OptimierungvonBubblesort, 3Punkte ) Aufgabe1(Rekursionsb¨aume, 3Punkte ) Abgabeam26.05 ¨UbungenzuInformatikII-Blatt6"

Copied!
2
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Prof. G. Zachmann Daniel Mohr

TU Clausthal Institut f¨ur Informatik

19. Mai 2011

Sommersemester 2011

Ubungen zu Informatik II - Blatt 6 ¨

Abgabe am 26.05

Organisatorisches

• Die theoretischen Aufgaben m¨ussen Sie donnerstags in der Vorlesung abgeben.

• Die Programmieraufgaben m¨ussen Sie donnerstags bis sp¨atestens 13:15 Uhr an Ihren Tutor per Email (christian.schnarr@tu-clausthal.de) schicken.

• Die Programmieraufgaben m¨ussen von Ihnen in der ¨Ubung vorgef¨uhrt und erkl¨art werden.

Aufgabe 1 (Rekursionsb¨ aume, 3 Punkte)

Gegeben seiennProben (z.B. Wasserproben). Wir nehmen an, dass man mit Hilfe eines sehr teuren Verfahrens sicher messen kann, ob das BakteriumBaktus in einer Probe enthalten ist. Baktus ist sehr selten, daher gehen wir davon aus, dass es in den meisten der n Proben nicht vorhanden ist.

Der Einfachheit halber gehen wir auch davon aus, dass,falls eine Probe mit Baktus verseucht ist, dann auch sehr stark, d.h., es schwimmen darin sehr viele Bakterien.

Da nun das Messverfahren sehr teuer ist, suchen wir eine Methode, um Messungen einzusparen (zumindesterwartungsgem¨aß).

Sie d¨urfen annehmen, dass jede Probe in ausreichender Menge vorhanden ist.

Geben Sie den Algorithmus in Pseudocode oder graphischer Form mit Erl¨auterungen an.

Aufgabe 2 (Optimierung von Bubblesort, 3 Punkte )

a) Charakterisieren Sie den Worst-Case bei Bubblesort-Verfahren.

b) Wie k¨onnte man den Bubblesort-Algorithmus ¨andern / erweitern, so dass dieser und ¨ahnliche F¨alle schneller gel¨ost werden? (Wir nehmen hier an, dass die Implementierung des Bubblesort den Test auf vorzeitiges Ende enth¨alt.)

Bemerkung: solche Optimierungen ¨andern nicht die asymptotische worst-case Laufzeit! Noch eine Bemerkung: in einer echten Implementierung kann es sogar vorkommen, dass die tats¨achliche Laufzeit der “optimierten” Bubblesort-Version langsamer ist als die einer einfacheren Version. (Das passiert leicht dann, wenn der Compiler den erzeugten Assembler-Code stark optimiert, z.B. mit gcc - O3.) Oftmals kann ein Compiler leichter die ihm “bekannten” Optimierungen vornehmen wenn der Source-Code einfach strukturiert ist.

1

(2)

Aufgabe 3 (Quicksort, 3 Punkte)

Nehmen Sie an, Ihr Team-Kollege h¨atte Quicksort implementiert, aber einen Bug im Code, der daf¨ur sorgt, dass die Laufzeit dieser Implementierung nun

T(n) = 3T(n 2) +cn ist. Welche Komplexit¨at h¨atte dieser Code dann?

Aufgabe 4 (Sortieralgorithmen, 3 Punkte)

Gegeben sei eine Liste von Namen (Vor- und Nachname): Jane Doe, Fred Doe, Fred Smith, Bill Jones, Jane Jones, Mary Smith, Phil Doe, Jane Smith.

Wir sortieren diese durch irgend einen Sortieralgorithmus bzgl. deren Nachnamen, und erhalten folgende Liste: Phil Doe, Jane Doe, Fred Doe, Bill Jones, Jane Jones, Mary Smith, Fred Smith, Jane Smith.

Nun sortieren wir diese Liste noch einmal bzgl. der Vornamen. Bei welchen Sortieralgorithmen bleibt die Reihenfolge der Nachnamen erhalten, d.h., bei welchen Sortieralgorithmen erhalten wir zum Schluss eine lexikographisch sortierte Liste?

Aufgabe 5 (Optimierung von Bubblesort, 5 Punkte )

Beim normalen Bubblesort werden immer zwei benachbarte Elemente miteinander verglichen. Ein Element, das am falschen Platz ist, wird um eine Position n¨aher an seinen Platz geschoben. Oftmals ist es aber viele Position von seiner Endposition entfernt.

Die Idee der Optimierung ist nun, in einem “Bubble-Durchlauf” nicht direkt benachbarte Elemente zu vergleichen (und ggf. zu vertauschen), sondern Elemente, diekPositionen weit im Array auseinander liegen. (Dadurch landen Elemente evtl. zu weit “oben”, aber das wird sp¨ater wieder korrigiert.) Danach wirdkerniedrigt, und das Ganze beginnt von vorne.

Irgendwann istk= 1, d.h., man erh¨alt den ganz normalen Bubblesort. Diesen f¨uhrt man dann solange aus, bis das Array sortiert ist.

Typischerweise startet man mitk = 0.77n(abgerundet auf die n¨achste ganze Zahl), und erniedrigt dannkjedesmal wieder um diesen Faktor. (Achtung: Abrunden ist wichtig, sonst kann es passieren, dass man nicht beik= 1 ankommt!)

Implementieren Sie den Algorithmus in Python.

2

Referenzen

ÄHNLICHE DOKUMENTE

a) Wie hoch kann ein BSP-Tree, der aus 7 disjunkten (d.h. nicht schneidenden oder ber¨ uhrenden) nicht collinearen Linien-Segmente aufgebaut wird, minimal/maximal sein. Geben Sie je

Zeichnen Sie den Szenengraphen, der solch eine Figur darstellt, wobei die kanonische Abhangigkeit der Teile berucksichtigt werden soll. Abbildung

In der Vorlesung haben Sie gelernt, dass bei der Synchronisation mehrerer Renderer, die auf mehreren PCs laufen, und zusammen ein Display treiben (z.B. eine Powerwall), sowohl

In dieser Aufgabe soll ein Algorithmus zur Wechselgeldruckgabe entwickelt werden. Dabei soll ein fester Betrag zwischen 0 und 100 Cent gewechselt werden. Ziel ist es, mit

Der Ruckgabewert muss der String sein, welcher ausgeben werden soll, falls print RECHTECK aufgeruft

Vergleichen Sie die lineare, binäre und exponentielle Suche sowie Interpolation Search miteinander. Implementieren Sie dazu die Suchalgorithmen in Python und fügen Sie

Eine weitere Möglichkeit ist die Verwendung des Mittelwerts des ersten und des letzten Elements als Pivot-Wert: pivot := b(a[l]:key + a[r]:key)=2c. Sortieren Sie die oben

Die Abbildung 1 zeigt ein Beispiel für einen Patricia-Trie (eine Erläuterung was ein Patricia-Trie ist, befindet sich am Ende des Übungsblattes).. Gehen Sie davon aus, dass wir