Klausur [Beispiel]

Werbung
Komplexität von Algorithmen
SoSe 2013
Klausur [Beispiel]
Lutz Schröder, Daniel Gorı́n
Bitte vermerken Sie auf Ihrer Abgabe Ihren Namen und Ihre Matrikelnummer.
Ooops – einige dieser Aufgaben sind offenbar im wesentlichen identisch mit bereits gestellten
Übungsaufgaben. Das wird uns in der echten Klausur sicher so nicht passieren.
Aufgabe 1
Eine Rekurrenz
(4 Punkte)
Nehmen Sie an, die Laufzeit T (n) eines Algorithmus sei durch die Rekurrenzrelation
(
a
n=1
T (n) ≤
√
n
c n + T (d 2 e) n > 1
bestimmt. Leiten Sie hieraus eine obere Schranke für T (n) her. Gehen Sie dazu wie folgt vor:
Beweisen Sie zunächst per Induktion eine exakte Lösung (mit = statt ≤) für den Fall, dass n
eine Potenz von 2 ist, und leiten Sie dann daraus eine Abschätzung für den allgemeinen Fall her.
Aufgabe 2
Divide and Conquer
(5 Punkte)
Der Strassen-Algorithmus zur Multiplikation von n × n-Matrizen A, B geht wie folgt vor:
1. Füge nötigenfalls aus Nullen bestehende Zeilen und Spalten zu A und B dazu, so dass A
und B 2k × 2k -Matrizen werden (mit k = dlog(n)e).
2. Unterteile A und B in gleich große Blöcke
A11 A12
A=
A21 A22
B=
B11 B12
B21 B22
(d.h. die Aij , Bij sind 2k−1 × 2k−1 -Matrizen).
3. Berechne folgende Matrizen:
M1 = (A11 + A22 )(B11 + B22 )
M2 = (A21 + A22 )B11
M3 = A11 (B12 − B22 )
M4 = A22 (B21 − B11 )
M5 = (A11 + A12 )B22
M6 = (A21 − A11 )(B11 + B12 )
M7 = (A12 − A22 )(B21 + B22 ),
wobei die vorkommenden Matrixmultiplikationen durch rekursiven Aufruf des Algorithmus
berechnet werden, wenn k−1 > 0, und für k−1 = 0 durch einfache Multiplikation rationaler
Zahlen. Matrixaddition wird einfach komponentenweise durchgeführt.
KompAlg, SoSe 2013
4. Bilde dann das Ergebnis C = AB in Blockschreibweise als
C=
M 1 + M 4 − M5 + M7 M 3 + M 5
M 2 + M4
M 1 − M 2 + M3 + M6
.
Leiten Sie eine Rekurrenz für die Anzahl C(m) von primitiven Operationen her, die der Algorithmus durchführt, wobei m = 2n2 die Größe der Eingabematrizen ist. Geben Sie dann das
asymptotische Verhalten von C(m) an, wie es sich aus dem Master Theorem ergibt.
Aufgabe 3
Amortisierte Analyse
(5 Punkte)
Der Code in Abb. 1 implementiert eine sogenannte double-ended Queue oder deque (also eine
Verallgemeinerung einer Queue, so dass Elemente an beiden Enden hinzugefügt oder entfernt
werden können) unter Einsatz von zwei Stacks. Intuitiv repräsentiert jeder Stack eine eigene Sicht
auf die Queue (jeweils vom vorderen oder vom hinteren Ende), wobei beide Sichten überlappen
können. Wir werden die Komplexitäten der jeweiligen Methoden in Bezug auf die Größe der
deque messen (siehe auch die size-Methode in Abb. 1).
a. Bestimmen Sie die exakten worst-case-Komplexitäten der öffentlichen Methoden des DequeTyps (also aller Methoden bis auf genPop) und drücken Sie diese in Θ-Notation aus. Begründen Sie ihre Lösung klar verständlich.
b. Beweisen Sie mittels der Potentialmethode, dass die öffentlichen Methoden des Deque-Typs
in amortisiert konstanter Zeit laufen.
Aufgabe 4
NL-Vollständigkeit
(5 Punkte)
Ein gerichteter Graph heisst stark zusammenhängend, wenn es zu jedem Knoten des Graphen
einen gerichteten Pfad zu jedem anderen Knoten gibt. Wir betrachten das folgende Entscheidungsproblem:
SCONN = {G ∈ {0, 1}∗ | G ist die Adjazenzmatrix eines stark zusammenhängenden
gerichteten Graphen}
1. Zeigen Sie, dass SCONN ∈ NL.
2. Zeigen Sie, dass PATH logspace SCONN. Erläutern Sie den Platzverbrauch ihrer Reduktion sorgfältig.
3. Beweisen Sie unter Verwendung der obigen Resultate, dass SCONN NL-vollständig ist.
Hinweis: Überlegen Sie sich bei Teilaufgabe 2 für ein Tupel hG, s, ti, ob das Hinzufügen von
Kanten zu G, die zu s hinführen, sowie von solchen, die von t ausgehen, die Existenz eines Pfades
zwischen s und t beeinflussen und welche Auswirkungen dies auf den starken Zusammenhang
des modifizierten Graphen hat.
2
KompAlg, SoSe 2013
Class Deque of Element
frontEnd , backEnd : Stack of Element
o n l y I n F r o n t , onlyInBack = 0 : N
inBothEnds = 0 : N
invariant o n l y I n F r o n t + inBothEnds
invariant onlyInBack + inBothEnds
// i n v a r i a n t : assume we remove t h e
// and t h e t o p o n l y I n B a c k e l e m e n t s
// e l e m e n t s o f b o t h s t a c k s a r e t h e
≤ | frontEnd |
≤ | backEnd |
t o p o n l y I n F r o n t e l e m e n t s from frontEnd ,
from backEnd ; t h e n t h e t o p inBothEnds
same , b u t i n r e v e r s e o r d e r .
Function s i z e : N ; return o n l y I n F r o n t + onlyInBack + inBothEnds
Procedure pushFront ( x : Element )
frontEnd . push ( x ) ; o n l y I n F r o n t++
Procedure pushBack ( x : Element )
backEnd . push ( x ) ; onlyInBack++
Function popFront : Element
assert s i z e > 0
( x , o n l y I n F r o n t ’ ) := genPop ( frontEnd , o n l y I n F r o n t , backEnd , onlyInBack )
o n l y I n F r o n t := o n l y I n F r o n t ’
return x
Function popBack : Element
assert s i z e > 0
( x , onlyInBack ’ ) := genPop ( backEnd , onlyInBack , frontEnd , o n l y I n F r o n t )
onlyInBack := onlyInBack ’
return x
// A u x i l i a r y method , n o t p a r t o f t h e p u b l i c i n t e r f a c e
Function genPop ( thisEnd , onlyInThisEnd , otherEnd , onlyInOtherEnd ) : Element
a s s e r t onlyInThisEnd + onlyInOtherEnd + inBothEnds > 0
i f onlyInThisEnd > 0 then
x := t h i s E n d . pop
return ( x , onlyInThisEnd − 1 )
i f inBothEnds > 0 then
x := t h i s E n d . pop
inBothEnds := inBothEnds − 1
return ( x , onlyInThisEnd )
// onlyInOtherEnd > 0 ; we now p u t t h o s e e l e m e n t s i n b o t h ends
inBothEnds := onlyInOtherEnd ; onlyInOtherEnd := 0
t h i s E n d . p opA ll
f o r i := 1 to inBothEnds do t h i s E n d . push ( otherEnd . pop )
s := make copy of t h i s E n d // O( | t h i s E n d | )
otherEnd . pop All
f o r i := 1 to inBothEnds do otherEnd . push ( s . pop )
// t h i s w i l l end s i n c e now inBothEnds > 0
return genPop ( thisEnd , onlyInThisEnd , otherEnd , onlyInOtherEnd )
Abbildung 1: Eine double-ended queue, implementiert mittels zweier Stacks
3
KompAlg, SoSe 2013
Aufgabe 5
NEXPSPACE
(3 Punkte)
Für f platzkonstruierbar, f (n) ≥ log(n) ist jedes auf einer nichtdeterministischen TM in Platz
f (n) lösbare Problem auf einer deterministischen TM in Platz O(f (n)2 ) lösbar (Satz von Savitch). Folgern Sie hieraus, dass NEXPSPACE=EXPSPACE gilt, wobei EXPSPACE (NEXPSPACE) die Klasse der in deterministisch (nichtdeterministisch) exponentiellem Platz (also
Platz 2p(n) für ein Polynom p(n)) lösbaren Probleme bezeichnet. Lässt sich dieses Argument
auch verwenden, um zu zeigen, dass NLOGSPACE=LOGSPACE gilt?
Benotung
Bestanden ab 7 Punkte; Note 1,0 ab 19 Punkte.
4
Herunterladen