Sie sind auf Seite 1von 14

1 Asymptotische Schranken:

Definieren Sie in einer mathematischen Formulierung sowohl die O-Notation als auch die Omega-Notation bzw. Theta-Notation. Erklren Sie Ihre Definitionen jeweils auch mit eigenen Worten anhand einer Skizze. Lsen Sie folgende Rekursion/ Rekursive Zeitgleichung: o T(n) = 3T(n/3 ) + n^2, mit T(1) = O(1) o T(n) = 2T(n/2 ) + n, mit T(1) = O(1) o T(n) = 2T(n/2) + n*log(n), mit T(1) = O(1) o T(n) = T(sqrt(n)) + O(1), mit T(2) = O(1) o T(n) = 3T(n/3 ) + n^3, mit T(1) = O(1) Hinweis: Geom. Reihe Gegeben o T(n) = 4T(n/2 ) + n^2, mit T(1) = O(1) Beweisen oder widerlegen Sie folgende Aussagen (Antworten ohne richtige Begrndung erhalten Sie keine Punkte!): o Es existiert ein Algorithmus, welcher eine Laufzeit von O(log n) und Omega(sqrt(n)) besitzt. o Es existiert ein Algorithmus, welcher eine Laufzeit von O(sqrt(n)) und Omega(log(n)) besitzt. o Es existiert ein Algorithmus, welcher eine Laufzeit von O(n^3) und Omega(2^n) besitzt. o Es existiert ein Algorithmus, welcher eine Laufzeit von O(2^n) und Omega(n^3) besitzt. o Es existiert ein Algorithmus, welcher eine Laufzeit von O(log n) und Omega(sqrt(n)) besitzt. o Es existiert ein Algorithmus, welcher eine Laufzeit von O(1/4*n^2) und Omega(4*n^2) besitzt. o Es existiert ein Algorithmus, welcher eine Laufzeit von O(n^(7/2)) und Theta(sqrt(n^6)) besitzt. o Die Funktion g(n) = n! ist O(n^n). o Die Funktion g(n) = n*abs(sin(n)) ist Omega(n). o Die Funktion g(n) = n^3+sin(n) ist Theta(n). o Die Funktion g(n) = 2^(2n) ist O(2^n). o Die Funktion g(n) = n^(1+sin(n)) ist Theta(n). o Die Funktion g(n) = n^(1+sin(n)) ist O(n^2). o Die Funktion g(n) = e^(n*pi) ist Omega(6*n^3). o Die Funktion g(n) = n^(1/4) ist Omega(log(n)). o Die Funktion g(n) = n^2+sin(n) ist Theta(n^2). o Es existiert eine Funktion f(n), sodass f(n) = O(n^log 5) und f(n) =nicht O(5^log n). o Jeder Algorithmus mit einer Laufzeit T(n) = Theta(n^c) mit c > 2 ist auch T(n)=(logc(n)). o Geben Sie eine Funktion f(n) an, sodass weder f(n) = O(n log n) noch n^2 = O(f(n)) ist. Beweisen Sie Ihre Behauptung! o Geben Sie eine Funktion f(n) an, sodass weder f(n) = O(n) noch n*log(n)= O(f(n)) ist. Beweisen Sie Ihre Behauptung!

1 von 14

4. Richtig oder Falsch


Sortieren:
a.) MergeSort arbeitet in-place. Nein da in-place bedeutet, dass zustzlich nur ein konstanter speicher bentigt wird. MergeSort bentigt zustzlich aber mindestens Speicher in O(n). b.) MergeSort ist nicht adaptiv. Ja. Adaptiv bedeutet dass der Algorithmus Vorsortierung ausnutzen kann. Der Standard MergeSort erkennt keine Vorsortierung und arbeitet deswegen nicht adaptiv. Natural MergSort wre adaptiv. c.) Der randomisierte Quicksort ist ein adaptiver Sortieralgorithmus. Durch das Autonomisieren wird die Laufzeit unabhngig der Eingabe gemacht, was bedeutet dass der Algorithmus nicht adaptiv ist. d.) RadixSort ist ein stabiler Sortieralgorithmus. Ja da das 1. Element welches in einen Fach geworfen wird wieder als 1. aus dem Fach genommen wird. Sprich die vorige Reihenfolge innerhalb der Fcher aufrecht erhalten wird. ps. MergSort ist stabil, Quicksort nicht. e.) InsertionSort ist fr jede beliebige Eingangsfolge langsamer als MergeSort. Nein zum Beispiel bei einen Schon sortierten Feld ist InsertionSort schneller als MergSort, da Insertsort das schon sortierte Feld ausntzen kann. Insertsort ist adaptiv. f.) Alle vergleichsbasierten Sortieralgorithmen haben im best case eine Laufzeit von (n log n). Ja der Beweis ist die Untere Grenze von Sortieralgorithmen gegeben. Entscheidungsbaum mit alle Permutation n!-Knoten (Permutation) Lngster Ast im Besten Fall log(n!) ->Sterling Approximation n! > ( n )^n => (n log n). g.) Die asymptotische worst case Laufzeit des randomisierten Quicksort ist schlechter als die worst case Laufzeit des Standard-Quicksort. Die randomisierung ndert nichts an den Laufzeitgrenzen . Sie erhht nur die Wahrscheinlichkeit, dass der Quicksort die average Laufzeit bentigt. h.) Der randomisierte Quicksort ist rekursiv implementiert asymptotisch gesehen schneller als wenn er iterativ implementiert wird. Es Macht einen Unterschied beim Speicher Bedarf aber da der Algorithmus eigentlich gleich abluft abgesehen vom manuellen pushen ist die Laufzeit bei beiden gleich i.) RadixSort kann fr beliebige Inputs mit einer Laufzeit von O(n) sortieren. Ja aber nur wenn da als konstant angenommen wird. j.) RadixSort ist ein adaptiver Sortieralgorithmus. Nein da fr jede Stelle ein Durchlauf gemacht wird egal ob schon sortiert oder nicht. k.) RadixSort ist fr jede beliebige Eingangsfolge schneller als der Quicksort. JA wenn d als konstant angenommen wird und Informationen ber Zahlen vorhanden sind. RadixSort hat hheren Speicherverbrauch. l.) Es kann keinen Sortieralgorithmus geben, welcher adaptiv als auch worstcase optimal ist. Nein Sortieren mit (2-4)-Bumen besitzt beide Vorteile. m.) Es existiert ein Sortieralgorithmus, der fr jeden beliebigen Input der Gre n, eine Laufzeit von O(n) besitzt. Ja RadixSort, wenn d als konstant angenommen wird. Informationen ber den Input mssen aber vorhanden sein. n.) Es existiert ein Algorithmus, der fr den Input der Gre n zur Verarbeitung mit O(n) Vergleichen sortiert. O(n) ist auch Schranke fr kleinere zb. O(n)

2 von 14

Suche:
a.) FastSearch ist ordnungsmig manchmal schneller als die Interpolationssuche. Ja da FastSearch auch den Vorteil der Binrsuche nutzt welche bei stark ansteigenden Zahlenfolgen besser funktioniert als Interpolationssuche. b.) Die Interpolationssuche ist manchmal schneller als FastSearch. Fastsearch verwendet abwechselnd Interpolationsuchee und Binrsuche und in Verteilungen wo die Interpolationssuche am besten wre verschlechtert sich die Suchzeit bei Fastsearch durch die Verflschung der Binrsuche. c.) Die Binrsuche ist immer langsamer als die Interpolationssuche. Bei sehr stark ansteigenden Werten ist die Binrsuche besser. d.) Der worst-case fr die Binrsuche ist auch der worst-case fr die Interpolationssuche. Nein da die Binrsuche bei sehr stark ansteigenden werten die Laufzeit von O(n) hat und die Binrsuche nur O(log n) e.) Der worst-case der Interpolationssuche ist auch der worst-case von FastSearch. Nein da Fastsearch durch die kompination von Binrsuche und Interpolationssuche, den Nachteil des worstcase von O(n) behebt. f.) Die Interpolationssuche ist ordnungsmig manchmal schneller als FastSearch. Interpolationssuche ist laut O-Notation maximal gleich schnell wie Fast Search. g.) Die Interpolationssuche ist immer schneller als die Binrsuche. Nein bei stark ansteigenden nicht. h.) Die Interpolationssuche ist immer schneller als die Binrsuche in sortierten linearen Feldern. Ja da die Interpolationssuche den linearen Feld angepasst ist und somit. O(log log n) i.) Die Interpolationssuche ist nur dann langsamer als die Binrsuche, wenn die Werte mit der Fakultt ansteigen (A[n] = n!). Nein Werte mssen nur sehr stark steigen damit die Binrsuche besser ist. Fakultt ist ein Fall davon, aber nicht der einzige. j.) Es existiert ein Suchalgorithmus, welcher in vorsortierten linearen Feldern einen Speicherbedarf von S(n) = O(log n) besitzt. nein b.) Es existiert ein Suchalgorithmus, welcher in vorsortierten linearen Feldern einen Speicherbedarf von S(n) = O(n) besitzt. Ja e.) Es existiert ein Suchalgorithmus, welcher in vorsortierten linearen Feldern einen Speicherbedarf von S(n) = O(n) besitzt. nein e.) Es existiert ein Suchalgorithmus, welcher in einem nicht sortierten linearen Feldern einen Speicherbedarf von S(n) = O(n2 ) besitzt. ja

Halde:
a.) Jedes absteigend vorsortierte Feld ist eine Halde, bei der das Maximum in der Wurzel steht, aber nicht umgekehrt. JA. Durch die Sortierung ist die Heldenbedingung automatisch erfllt. Und bei der Halde ist Maximum in der Wurzel. Durch Sortierung ist linker Sohn grer gleich rechter Sohn was bei einer Halde nicht sein muss. b.) Alle Funktionen der Warteschlange mit Prioritten, mit Hilfe von Halden implementiert, haben eine Laufzeit von O(log n) Ja. Warteschlange: Einfgen O(log n), Entferne_Max O(log n) und Maximum O(1). Verhalde bentigt O(log(n)) c.) Aus einem sortiertem linearen Feld A[n] kann eine Halde in T (n) = O(n2 ) und S(n) = O(log n) aufgebaut werden. T(n) kein Problem da baue Halde in O(n) mglich, aber es mssen alle Elemente gespeichert werden.

3 von 14

Binrbaum:
a.) Das Minimum in einem in symmetrischer Reihenfolge sortierten Binrbaum kann immer in O(h) Zeit gefunden werden (h ist die Hhe des Baums). JA. Da man von Wurzel den linken Ast bis zum Blatt laufen muss. Also h Schritte. b.) Das Maximum in einem in symmetrischer Reihenfolge sortierten Binrbaum kann immer in O(h) Zeit gefunden werden (h ist die Hhe des Baums). JA. Da man von Wurzel den rechten Ast bis zum Blatt laufen muss. Also h Schritte. c.) Bei einem Binrbaum, der in Nebenreihenfolge absteigend sortiert ist, steht das Minimum immer in der Wurzel. JA Linker Teilbaum, Rechter Teilbaum Wurzel. => Minimum in der Wurzel. d.) Bei einem Binrbaum, der in Hauptreihenfolge aufsteigend sortiert ist, steht das Minimum immer in der Wurzel. JA Wurzel, Linker Teilbaum, Rechter Teilbaum. => Minimum in der Wurzel e.) Nach SR sortierte Binrbume sind ausgeglichene Binrbume. Symmetrische Rreichenfolge => bedeutet nicht dass Baum ausgeglichen f.) Das Maximum in einen in SR sortierten Binrbaums kann immer in O(log n) gefunden werden. Nein da nicht zwingend ausgeglichen. Wenn Baum ausgeglichen dann log(n)=h sonst grer also auch Suchzeit lnger. g.) Ein Binrbaum muss ausgeglichen sein, damit die Hhe O(n log n) ist. Nein normal h=log n wenn ausgeglichen. h.) Ein Binrbaum (d.h., maximal zwei Shne) hat eine garantiert logarithmische Hhe (h = O(log n)), wenn er in SR sortiert ist. Nein nur wenn ausgeglichen. i.) Ein Binrbaums mit n Bltter hat eine Hhe von O( n ). Nein muss nicht sein kann aber als worst case sein.

2-4 Bume:
a.) (2-4)-Bume haben eine garantierte Hhe von h = (log n) ist (n ist die Anzahl der Bltter). Ja. Jeweils 2-4 Kinder=> 2^h <= n <= 4^h => h<=ld(n) <= 2h => ld(n)/2 <=h <= ld(n) b.) Bume mit mindestens 4 und maximal 16 Shnen in jedem Knoten haben eine Hhe die garantiert O(log n) ist. 4^h <=n <= 16^h => wie oben nur mit log4

Codieren:
a.) Es existiert ein optimaler, prfix-freier Binrcode mit den Codewortlngen 2, 2, 3, 3, 3, 4, 5. Codebaum alle Bltter benutzt optimal in diesem Fall nicht da 5er allein. Prfix-frei eindeutig decodierbar. b.) Der Codebaum fr einen optimalen binren prfix-freien Code ist immer ein vollstndiger, ausgeglichener Binrbaum. Vollstndig jeweils 2 Kinder Ausgeglichen alle ste gleich lang max. 1 unterschied h=log(n) Nein. Baum muss nur voll sein nicht ausgeglichen da seltene Elemente tiefer sitzen sollen. c.) Ein optimaler, prfix-freier Binrcode nach Huffman besitzt eine Hhe von O(log n). Nein da der Baum welcher mit Huffman erstellt wird nicht ausgeglichen sein muss. d.) Es gibt Flle von Auftrittswahrscheinlichkeiten, fr denen kein optimaler, prfix-freier Binrcode existiert. Da Man mit der Methode nach Huffman immer einen optimalen Codebaum erhlt und ein Codebaum immer prfixfrei ist gilt die Aussage. b.) Wenn in einem Text zwei Auftrittswahrscheinlichkeiten von zwei Buchstaben gleich sind, dann existiert dafr kein optimaler, prfix-freier Binrcode. Nein stimmt nicht 2 gleich lange ste einfach. Huffman sucht 2 Werte mit kleiner Auftrittswahrscheinlichkeit, welche auch gleich sein knnen. 4 von 14

Hashing:
a.) Eine ideale Hashfunktion liefert immer einen Index zurck, der zu keiner Kollision fhrt. Stimmt nicht. Ideal-> Gleichverteilt, kann auch mehrere Werte berall haben, also kann Kollision auftreten. b.) Die Divisionsmethode liefert immer eine ideale Hashfunktion. Nein. Divisionsmethode berechnet nur einen Hash, besagt aber nicht dass zwingend eine Gleichverteilung entsteht. Zb bei mod 2 bei Daten die mit der 2er Potenz ansteigen. c.) Eine ideale Hashfunktion kann auch Kollisionen liefern, wenn < 1. =n/m. Ja hngt von die Eingangsdaten ab (zb. Alles gleiche werte im Input). d.) Es ist mglich, dass es in einer Hashtabelle mit berlauferlisten beim Einfgen zu keiner Kollision kommt, obwohl 1. Bei 1 besteht die Chance dass alle Werte einen eigen Platz erhalten. Bei >=1 muss es da zu wenig Platz ist zu einer Kollision kommen. e.) In einer Hashtabelle mit berlauferlisten kommt es zu keiner Kollision, solange < 1. Nein es kann zu Kollisionen kommen, da nicht jedes Feld belegt werden muss.

Finden der i-kleinsten Zahl


a.) Erklren Sie ausfhrlich mit eigenen Worten das Prinzip von Partition (Zerlegen von Feldern) und die Anwendung fr das Finden der i-kleinsten Zahl. Welche Verbesserung bringt eine randomisierte Version von Partition? Partitionierung: Man zerlegt ein Feld in 2 Teile indem man ein Pivotelement whlt und alle kleinern Elemente ins linke und alle Greren ins Rechte legt. Um dies zu erreichen werden 2 Zahlen vertauscht. Zum finden der i kleinsten zahl kann man es so verwenden, dass man immer das Feld im interessanten Bereich rekursiv zerlegt. Das randomisieren hat den selben Vorteil wie beim QuickSort. Die Wahrscheinlichkeit dass der worst case eintritt (zb. Absteigende Reihenfolge sortiert) wird minimiert. b.) Leiten Sie die Laufzeit fr das Finden der i-kleinsten Zahl fr den besten Fall und den schlechtesten Fall her. Wie lautet die durchschnittliche Laufzeit? T (n) T (max{k, n k}) + O(n) (k index der von der Partitionierung geliefert wird. Best: Wenn mit jeden halbiert wird K=n/2 T(n) T (n/2) +O(n) T(n)=O(1)+ O(n*Sum(1/2^i))=O(n) Worst: wenn mit jedem nur 1 abgespalten: k=1 T(n) T (n-1) +O(n) T(n)=O(1)+O(n^2) average: T (n) = O(n) c.) In welchem bekannten Sortieralgorithmus wird ebenfalls Partition verwendet? Ist dieser Algorithmus worst-case optimal ? Begrnden Sie Ihre Antwort. Quicksort verwendet auch Partitionierung. Quicksort ist nicht worst case optimal da er im worst case immer nur 1 Element abspaltet was eine Laufzeit von O(n) bentigt

5 von 14

Suchen
a.) Erklren Sie das Prinzip der Interpolationssuche. Wie lauten die Laufzeiten im durchschnittlichen Fall und im schlimmsten Fall? Geben Sie ein Beispiel fr den schlimmsten Fall an. Bei der Interpolationssuche wird ein lineares sortiertes Feld angenommen und das Element dort gesucht wo es stehen sollte. Wenn der Wert der dort steht kleiner ist wird im rechten teil mit der selben Methode weitergesuch, wenn grer im linken. Wird der Wert getroffen beendet der Algorithmus. Schlimmster Fall sehr stark ansteigendes Feld zb. Fakultt. Average: O(log log n) worst: O(n) b.) Beschreiben Sie die Funktionsweise der Binrsuche. Geben Sie einen Pseudocode an und bestimmen sie seine Laufzeit. Bei der Binrsuche wird jedes Mal das Feld halbiert und dann in dem Teil in welchem das Element liegen soll weitergesucht. Binsuche() { int i=0; do { i=(von+bis)/2; if(A[i]==x) return i; else if(A[i]<x) von=i+1; else bis=i-1; }while((von<bis)) } Laufzeit: best case: O(1) wenn genau in der Mitte worst case: O(log n) da immer halbiert wird. Average: Nach 1 Schritt 1 Element, nach 2 2 nach i 2^(i-1) Elemente gefunden. Schritte=1/n*Sum(i 2^(i1) )>1/n*(ld(n+1) 1) (2^ld(n+1) 1) =(log n) c.) Erklren Sie das Prinzip von FastSearch und geben Sie die Laufzeitschranken fr den schlimmsten Fall und den erwarteten Fall an. Fast Search wechselt immer Interpolations und Binrsuche ab um die Vorteile von beiden zu erhalten. Average: O(log log n), worst: O(log n)

6 von 14

Rekursionen
a.) Was versteht man unter den Begriffen Rekursion und Divide & Conquer? Rekursion bedeutet dass eine Funktion sich mit abgenderten Parametern selbst nochmal aufruft. Damit lassen sich gewisse Algorithmen einfach implementieren. Divide and Conquer: Teile und herrsche. Wird die Menge der Daten zerteilt und rekursiv weiterbearbeitet. Zerlegung von einen groen Problem in viele kleine Teilprobleme die leichter zum lsen sind. b.) Geben Sie ein einfaches iteratives und ein einfaches rekursives Verfahren zur Berechnung von n! (Fakultt) an. Leiten Sie jeweils sowohl den Laufzeit- als auch den Speicherverbrauch in Abhngigkeit von n ab. Fakultt_iterativ(x) { if(x==0 || x==1) return 1; fakultt=1; for(int i=2; i<x;i++) fakultt*i; return fakultt; } T(n) = O(n), S(n)=O(1) Fakultt_rek(x) { if(x==0 || x==1) return 1; else return (x*Fakultt_rek(x-1); } T(n) = O(1)+ T(n-1)=(n-1)*O(1)+O(1)=O(n) , S(n)=O(1)+ S(n-1)=O(n) c.) Erklren Sie die Funktionsweise von MergeSort anhand der Zahlenfolge 5, 2, 4, 6, 1, 3. Geben Sie die Laufzeit und den Speicherverbrauch an. Untersuchen Sie diesen Sortieralgorithmus auf die Eigenschaften adaptiv und in-place. Begrnden Sie Ihre Angaben. Teile das Feld in 2 gleich groe Hlften Sortiere die Teilfelder rekursiv mit demselben Verfahren Verschmelze die sortierten Teilfelder zu einem sortierten Gesamtfeld Verschmelze: T (n) = O(ji+1) = O(n). T (n) = 2 T (n/2) + O(n)= 2^k T ( n/2^k ) + k O(n) = 2^ld(n) T (1) + ld(n) O(n) = O(n)+O(n log n)=O(n log n) S(n) = S(n/2) + O(n) =S(n/2^k)+O(n)*sum(1/2^k)=O(1)+O(n)=O(n)

Sortieren
a.) Erklren Sie ausfhrlich mit eigenen Worten das Prinzip von Partition (Zerlegen von Feldern) und die Anwendung in QuickSort. Welche Verbesserung bringt eine randomisierte Version von QuickSort? Partition dient dazu das Feld in kleinere Felder zu zerlegen. Divide and Conquer. Randomisiert erhht die Wahrscheinlichkeit dass der average case eintritt. b.) Leiten Sie die Laufzeit von QuickSort fr den besten Fall und den schlechtesten Fall her. Wie lautet die durchschnittliche Laufzeit? T (n) = T (k) + T (n k) + O(n) average: k=n/2 => T(n)=2*T(n/2)+O(n)= O(n log n) worst: k=1 => T(n)=T(1)+T(n-1)+O(n)= T (n k) + Sum(O(n i) + k O(1)) =T(1)+sum(O(n-i)+(n-1)*O(1)) = n O(1) + O (sum(n i)) =O(n)

7 von 14

c.) Was bedeuten die Begriffe worst-case optimal und in-place im Zusammenhang mit Sortierverfahren? In place bedeutet dass kein zustzlicher Speicherplatz bentigt wird zumindest nicht in Abhngigkeit von n. QuickSort ist in-place worst case optimal wenn worst case O(n log n) ist. a.) Was sind vergleichsbasierte Sortieralgorithmen? Erklren Sie ausfhrlich das Entscheidungsbaummodell und leiten Sie damit die untere Laufzeitschranke fr vergleichende Sortierverfahren ab. Vergleichsbasisrente Algorithmen passieren darauf das jede Zahl mit einer anderen Verglichen wird. Dies kann man in einen Vergleichsbaum eintragen welcher n! Knoten hat. n! Ist die Anzahl aller Permutationen der vergleiche. Das worst-case Verhalten entspricht dem lngsten Ast. Wenn der Baum nun ausgeglichen ist sind alle ste gleich lang, was bedeutet dass die Lnge bzw. Hhe des lngsten Astes log(n!) ist. Durch die Sterling Approximation: n! > (n/e)^n log(n/e) *n n*log(n) b.) Erklren Sie die Funktionsweise von MergeSort in eigenen Worten. Geben Sie einen Pseudocode an und fhren Sie eine Laufzeitanalyse durch. Wie gro ist der Speicherverbrauch dieses Algorithmus? Teile das Feld in 2 gleich groe Hlften Sortiere die Teilfelder rekursiv mit demselben Verfahren Verschmelze die sortierten Teilfelder zu einem sortierten Gesamtfeld MERGESORT(A,i,j) if(i<j) { k=(i+j)/2 MERGESORT (A,i,k) ; MERGESORT (A,k+1,j); VERSCHMELZE (A,i,k,j) ; } VERSCHMELZE (A,i,k,j) ; for( l=i; l!=k, l++) B[l]=A[l]; for( r=k; r!=j, r++) C[r]=A[r]; B[k+1]= ; B[j+1]= ; l=i; r=k+1; for(m=i;m!=j;m++) { if(B[l]<C[r]) A[m]=B[l] ; l++; else A[m]=C[r]; r++ ; } Laufzeit und Speicher oben b.) Geben Sie ein Beispiel fr ein nicht vergleichsbasiertes Sortierverfahren und zeigen Sie wie man damit ein lineares Feld sortieren kann. Welche Voraussetzungen mssen gegeben sein, damit das Sortieren in linearer Zeit erfolgt? RadixSort: Es muss Informationen ber den Bereich der Eingangsdaten vorhanden sein. RadixSort nimmt zuerst die letzte Ziffer und legt listen mit gleicher letzten Ziffer an. Wenn alle verteilt werden diese Listen nach der Ziffernordnung wieder zusammengesammelt, wobei die Reihenfolge in den einzelnen Listen sich nicht verndern darf. Danach gehts an die 2. Ziffer und so weiter. Nach bearbeiten der Letzten Ziffer sind die Werte sortiert. O(d*n) wenn d konstant (d=Lnge der Zahlen) O(n) c.) Was bedeuten die Begriffe adaptiv und stabil im Zusammenhang mit Sortierverfahren? Adaptiv bedeutet dass der Algorithmus bei einer Vorsortierung schneller arbeiten kann. Stabil bedeutet, dass die Reihenfolge zweier gleichen Elemente nach dem Sortieren wieder gleich ist. 8 von 14

Hashing
a.) Erklren Sie das Grundprinzip der gestreuten Speicherung (mit Skizze). Was ist der Belegungsfaktor ? Wann kommt es zu Kollisionen und wie knnen diese behandelt werden Erklren Sie kurz die zwei in der Vorlesung besprochenen Methoden. Die Idee ist direkt aus dem Schlssel mithilfe einer Hashfunktion die Adresse zur Speicherung der Daten zu berechnen. =m/n = Belegungsfaktor = durchschnittliche Lnge der berlauflisten. Kollision tritt auf wenn 2 Zahlen den Selben Hash wert haben. Behandlung: berlauflisten: Listen werden an der Position erzeugt und alle werte die an die Position gehren verkettet. Offene Adressierung: Es wird eine neue Adresse durch einen 2. Versuch mit einer leicht abgewandelten Hash Funktion ermittelt. 1. freie Stelle gesucht. Linear, Quadratic Probing, Doubl Hashing. b.) Erklren Sie die Divisions- und Multiplikationsmethode. Geben Sie die Bedingung fr eine ideale Hashfunktion an. Divisionsmethode: w mod m. Schnell berechenbar, nicht fr alle m geeignet Multiplikations: m frac(w A) |+ m = unkritisch c.) Leiten Sie den erwarteten Suchaufwand in einer Hashtabelle T mit berlauferlisten her. Betrachten Sie dabei getrennt die Flle (i) w Element T und (ii) w nicht Element T. Wie gro ist der Suchaufwand im worst-case und warum? Worst: O(n) wenn alle in einer liste. Average: w nicht Element T: bis Listenende durchsuchen Listenlnge = =m/n (1 + ) Average: w Element T: als i. Eingefgt erwartete Position (ni)/m + 1 sum(P(i)*((ni)/m + 1 )=1+1/(nm)*sum(n i)=1+1/(nm)* n(n 1) /2 = =1 + /2 + O(1/m ) = (1 + )

9 von 14

Optimales Kodieren
a.) Erklren Sie die Begriffe Entropie (math def.) und prfix-frei im Zusammenhang mit Kodieren. Die Entropie ist die Eigentliche Information die der Text pro Zeichen enthlt. H(T ) = Sum(pj log2(pj),j,1,|Z|) die theoretische untere Grenze der Codierung. pj ist die Auftrittswahrscheinlichkeit prfix-frei eindeutig dekodieren b.) Folgender Text ist zu kodieren: ABRACADABRA. Ermitteln Sie dazu eine Hufigkeitstabelle und konstruieren Sie daraus Schritt fr Schritt den optimalen Codebaum (nach Huffman). Geben Sie die Kodierungstabelle sowie den kodierten String an. Wieviele Bits knnen bei diesem Text gegenber einem Code mit je 3 Bits/Zeichen eingespart werden? A(5),B(2),R(2),C(1),D(1) => 11 Erstelle einen 'Wald' mit jeweils einen Baum pro Zeichen. Suche die beiden Bume mit den kleinsten Wahrscheinlichkeiten und verbinde sie zu einen neuen Baum, welche nun die Summe der Wahrscheinlichkeiten der Unterbume besitzt. Wiederhole den Vorgang, bis nur noch ein Baum brig ist. C+D=2/11, B+R=4/11, (C+D)+(B+R)=6/11, A+((C+D)+(B+R))=1 c.) Schreiben Sie einen Pseudocode fr die Implementierung der Huffman-Kodierung mit Halden und leiten Sie die Laufzeit T (n) ab. Erklren Sie die einzelnen Schritte des Algorithmus. Mit Warteschlangen alle Operationen maximal O(log n) Laufzeit: T(n)=(n-1)*(O(log n)*4)+ O(log(n))=O(n*log n) HUFFMAN (Z,f) n=|Z| ; INIT_Q (Z) ; for(i=1;i<(n-1); i++) { z=NEUER_KNOTEN (); LINKS(z) = MINIMUM(Q); ENTFERNE_MIN ; RECHTS(z) MINIMUM(Q); ENTFERNE_MIN f(z) =f(x)+f(y) EINFUEGEN(Q,z) } RETURN MINIMUM(Q)

10 von 14

Halden
a.) Definieren Sie die Datenstruktur Halde. Wie lautet die Heldenbedingung? Erklren Sie in Worten, was man unter dem Verhalden eines Elementes versteht, und zeigen Sie die Funktionsweise anhand eines Beispiels. Geben Sie eine Laufzeitschranke fr das Verhalden an und begrnden Sie diese. Halde ist ein lineares Feld welches die Haldenbedingung erfllt. A[i] max {A[2i], A[2i + 1]}, i = 1, 2, ...n/2 Es wird verglichen ob der linke Sohn grer als die Wurzel ist und danach wird verglichen ob der rechte Sohn grer des max der Beiden Werte ist. Wenn einer grer ist wird er mit der Wurzel vertauscht. Durch die Vertauschung muss rekursiv fr den neuen Sohn die Verhaldung durchgefhrt werden da sich dabei etwas ndern htte knnen. Der Teilbaum hat maximal halb so viele Elemente wie der Baum. Darum T (n) O(1) + T(n/2)= O(1)*k+T(1/2^k)=O(log n)+O(1)=O(log n) b.) Wie kann man eine Halde mglichst effizient aufbauen? Beschreiben Sie die Vorgangsweise und begrnden Sie, warum Ihr Algorithmus eine Halde liefert. Leiten Sie eine enge Laufzeitschranke ab. Halde irgendwie befllen und dann einfach von der 2. Zeile von Unten (n/2) den Verhaldealgorithmus so oft aufrufen (immer i--) bis man bei der Wurzel ist. n Elemente [n/(2^(h+1)] O(n*sum[h/(2^(h)] )=O(n) c.) Zeigen Sie, wie man Halden als Warteschlangen mit Prioritten verwenden kann. Welche Operationen mssen implementiert werden? Erklren Sie, wie diese Funktionen an einer Halde ausgefhrt werden knnen und geben Sie deren Laufzeiten an. Einfgen (A,x) O(log n), Entferne_max(A) O(log n), Maximum(A) O(1) Entferne_max(A){ A[1]=A[n]; n--; Verhalde(A,1);} Einfgen(A,x) {n++; A[n]=x; i=n; while(i>1&&A[i]>A[VATER(i)]) Vertausche(i,Vater(i)); i=Vater(i);} c.) Zeigen Sie, wie man mit Hilfe von Halden einen Sortieralgorithmus implementieren kann und begrnden Sie seine Laufzeit. Sort() { for(i=n;i>2;i++) { Vertausche(A[1],A[i]); n--; Verhalde(A,1); } }

11 von 14

(2-4)-Bume
a.) Beschreiben Sie die Datenstruktur der (2-4)-Bume. Worin liegt der Vorteil dieser Datenstruktur? Zeigen Sie, dass die Hhe eines (2-4)-Baums h = (log n) ist. Alle ste sind gleich lang. Jeder hat 2-4 Shne. Die Bltter sind von links nach rechts aufsteigend sortiert. Jeder innere Knoten speichert t-1 hilfsinfos. Vorteil Dadurch kann eine logarithmische Hhe garantiert werden. SUCHEN, EINFGEN und ENTFERNEN entsprechen dem Wrterbuchproblem. Man kann mithilfe von (2,4)-Bumen das Wrterbuchproblem bestehende aus n Elementen in O(log n) pro Funktion und S(n) = (n) Speicher lsen. 2^h <= n <= 4^h => h<=ld(n) <= 2h => ld(n)/2 <=h <= ld(n) Einfgen(richtiger knoten neues Element eingefgt. Split.) Entfernen(Stehlen, Verschmelze) b.) Zeigen Sie, wie man (2-4)-Bume zum adaptiven Sortieren verwenden kann. Erklren Sie, warum dieser Sortieralgorithmus adaptiv ist. Adaptiv und worst-case optimal. Man startet mit dem Blatt ganz links. (aktuelles Minimum). Man luft bis zur Wurzel w' des Teilbaums T'. w'= erste Knoten> ai. Man luft von w' zu Blatt x und man macht ai zum linken Bruder. (immer 1. TB von links) Er ist adaptiv da die Sortierung bei einen sortierten Feld immer nur bis einen knoten darber gegangen wird und der Wert sofort wieder an der gleichen stelle eingefgt wird. (keine split, verschmelze,.. Operatoren.) c.) Welche Funktionen bentigt man, um eine mischbare Warteschlange mit Prioritten zu implementieren? Erklren Sie, wie diese Datenstruktur als (2-4)-Baum implementiert werden kann, und geben Sie die Laufzeiten der Funktionen an. EINFGEN(S,x), MAXIMUM(S) und ENTFERNE_MAX(S), MISCHE(S,S') Die Bltter speichern S in beliebiger Reihenfolge und jeder innere Knoten speichert das Maximum seines Teilbaums, plus einen Zeiger, der auf das entsprechende Maximum-Blatt zeigt. O(log n)

12 von 14

Binrbume
a.) Erklren Sie die Begriffe symmetrische Reihenfolge, Hauptreihenfolge und Nebenreihenfolge. In welcher Reihenfolge sind binre Suchbume sortiert? Symmetrische: linker TB, Wurzel, rechter TB fr binre Suchbume Hauptreihenfolge: Wurzel, linker TB, rechter TB Nebenreihenfolge: linker TB, rechter TB, Wurzel b.) Schreiben Sie Pseudocodes zu den Funktionen Minimum und Vorgnger in binren Suchbumen. Erklren Sie die einzelnen Schritte und geben Sie eine Laufzeitschranke an. Minimum(k) //O(log(Hhe vom Baum)) { while(Links(k)!=nil) { k=Links(k);} return Wert(k); } Vorgnger(k) //O(log(Hhe vom Baum)) { if(Links(k)!= nil) return Maximum(Links(k)) y=VATER(k) while(y!=nil && k=Links(y)) { k=y; y=Vater(y); } return Wert(y); } b.) Schreiben Sie Pseudocodes zu den Funktionen Maximum und Nachfolger in binren Suchbumen. Maximum(k) //O(log(Hhe vom Baum)) { while(Rechts(k)!=nil) { k=Rechts(k);} return Wert(k); } Nachfolger(k) //O(log(Hhe vom Baum)) { if(Rechts(k)!= nil) return Minimum(Links(k)) y=VATER(k) while(y!=nil && k=Rechts(y)) { k=y; y=Vater(y); } return Wert(y); } c.) Geben Sie zwei Mglichkeiten an, wie man eine Baumhhe garantieren kann, die O(log n) ist. Jeder Knoten 2 Shne, Halden, ausgeglichen.

13 von 14

Suchen(alt)
b.) Interpolation: schlimmster Fall und beweisen Sie die Laufzeit dafr (Ableitung!). Nicht in die Hilfsbltter. O(n) von+(x-A[von ])*(bis-von)/(A[bis]-A[von])

Halden(alt)
a.) Schreiben Sie einen Pseudocode zum Verhaldungsprozess? Fhren Sie eine Laufzeitanalyse durch. Verhalde(A) { l,r; index=i; if(A[l]>A[i]) index=l; if(A[r]>A[index]) index=r; if(index!=i) Vertausche(A[i],A[index]); Verhalde(A,index); } T (n) O(1) + T (n/2)=O(log n)

(2,4)-Bume(alt)
a.) Wie ist das Problem der mischbaren Warteschlange definiert? Zeigen Sie eine effektive Implementation (Pseudocodes, Laufzeiten und Beschreibung) mit (2,4)-Bumen. Kein Pseudocode in Hilfsunterlagen

Sortieralgorithmen (alt)
a.) Sortieren Sie folgende Werte Schritt fr Schritt mit InsertionSort: 5 6 1 9 7 3 2 4 Einfach jede zahl so weit nach links schieben wie bentigt wird.

14 von 14

Das könnte Ihnen auch gefallen