Kurs 1663 .Datensuukturen“ Mwterlöswwen zur

Werbung
Kurs 1663 .Datensuukturen“
Aufgabe 1
Mwterlöswwen zur Kla iw- vom I7.08.96
*
’ .<
Seite 2 ’
3
Im folgenden gehen wir davon aus, daß alle gelesenen Seiten ‘im Hauptspeicher gehalten
werden können. Geht man nicht von dieser Annahme aus, sind dementsprechend mehr
Leseoperationen Zu zählen.
’
r
Das Einfügen des Schlüssels 62 ergibt im boten mii den SchJüssein 65 und 68 einen
Qverflow, so daß dieser Knoten gespalten werden muß. Der mittiere Schi$sei 65 muß nun
im Wurzeiimoten mit den Schlüsseln 40 und 60 eingefügt werden, was dort zum Overflow
und zur Spaltung deS Wurzelknotens fm. Es entsteht ein neuer Wmelknoten mit dem
Schiüssei 60. Die Höhe des Baumes wächst um eihs. Insgesamt ergibt sich:
‘t
Für das Suchen bis zum Knoten mit den Schlüsseln 65 und 68 werden 2 Seitenzugriffe
bedötigt. 5 Seitenzugriffe erfordert das Zurücksch.+ben der Knoten mit den Schiüssein 40,
60,62,.65 und 68. Insgesamt sind also 7 Seitentigriffe eiforderlich.
,
Das Löschen eines Schlüssels in einem Knoten, der kein Blatt ist, wird durch Vertauschen
mit dem kleinsten Schi&sei des rechten Teilbaums. auf dti Löschen eines Schlüssels in
einem Blatt zuriickgeführt. wer wand&, also der Schlüssel 32 in den Wuxzeiknoten und der
Schliisse~ 30 in den Knoten, in dem sich vorher der Schlü&ei 32 befand.
’
Das Löschen des Schlüssels 30 ruft nun einen Underflow hervor. Ein Ausgleich mit einem
k Nachbar ist nicht möglich, da zum einen kein linker Nachbai existiert und zum anderen der
rechte Nachbar genau einen/Schiüssei en&&.’ Also wird der Schlüssel 35 des Vaterknotens
mit dem Schiüssei 38 verschmolzen. Wir erhalten folgenden B-Baum:
Fti das Auffinden’des Schiüsseis 30 wird ein Seitenzugriff benötigt. Zwei weitere Zugriffe
sind notwendig, um den kleinsten Schlüssel des rechten Teilbaums zu finden. Einen
Seitenzugriff erfordert das Zurückschreiben des Schiüsselrs 32 im Wurzeiicnoteq. Ein
weiterer Seitenzugriff dient dazu festzustellen, ob ein Nachbar mit mehr ais einem Schlüssel
’
7
Kurs 1663 .Datensnukturen“
Seite 3
Musterlösurmn zur Klausur vom I7.08.96
zum Ausgleichen existiert. Zuguterletzt werden der Knoten mit dem Schlüssel 40 und der
Knoten mit den Schlüsseln 35 und 38 zurückgeschrieben. Insgesamt sind also 4 Lese- und
3 Schreiboperationen, d.h. 7 Seitenzugriffe, erforderlich. Für das Löschen einer Seite wird
kein Seitenzugriff gezählt
Aufgabe 2
(a) Nein. Ein binärer Baum kann zu einer Liste entarten.
3
(b) Nein. Gegenbeispiel: i5 ’
,r
j_
,
(c) Ja.
W Ja.
(e) Ja.
(f) Nein. Im warst case benötigt Quicksort O(n2) Schritte.
r‘
L
Aufgabe 3
Da A sortiert ist, kann man binär nach dem Wert x suchen. Dazu verwenden wir zwei
Indexgrenzen i und j zur Abgrenzung des Arrayteils, in dem gerade gesucht wird.
7,’ : 1
!..p
,~
Wenn x in A enthalten ist, so gibt der entsprechende Index die gesuchte Anzahl an, ansonsten (in diesem Fall ist das zu durchsuchende Restarray leer, und die Untergrenze i ist
größer als 1) ist die Anzahl durch die Untergrenze abzüglich 1 gegeben,
\
I
algorithm Zower-part(A, x, i, ~1
ifi>jthen
return i-l
else
’
Sei k := (i+J’) div 2
if A[k] = 3 then return k else
if A[k] c x then h&part(A, x, k+l, J]
eise Zower-part(A, x , i , k - i )
fifi
fi
?
Der Aufruf muß mit Zower-part(A, x, 1, n) erfolgen. Die binäre Suche benötigt O(log n)
schritte.
,
I
Kurs 1663 .D&ensuukturen“ *
.
.
Musterlösumen zur Klausur vom’ 17.08.96
Seite 4 ’ “’
Aufgabe 4
r
ta
Zur Berechuung der Anzahl der Elemente einer Bandmatrix betrachten wir als Beispiel die
Bandmatrix A62 und ergänzen deren Band zu eiuem “vollst%ndigen” Band.
,
i
Dreieck:$iElemente
; .- .-.
! ’
--7
irl
Das vol.lst&rdige Band enthält n Zeile9 mit jeweils 2k + 1 Elementen, die beiden Dreiecke
links oben und rechts unten jeweils Xi Elemente. Somit ergibt sich fti die Anzahl der
i=l
Elemente des Bandes:
Anzahl der Elemente des Bandes = n(2k + 1) - 2 ii = n(2k + 1) - k(k + 1)
i=l
:’
tb)
Eine mögliche Funktion für Zoe orientiert sich an der Lösung aus (a). Das Band wird hierbei
zeilenweise abgespeichert:
Zoc(i,J]=(i- 1)(2k+ l?+(j-i)fiir-allei,jE
{l,...,n} mitli-jl<k.
(Cl
7
Zu zeigen ist also: loc(i, j) = loc(il, j? a i = i’ h j = j’
.
* , ~’ loc(i, j] = loc(i’, j?
* (i-l)@k+l)+(j-z)=(i’-1)(2k+l)+(j’-i)
=3 (2k+l) ((i - 1) - (i’ - (1)) = (jr - i? : (j’- i)
=B
(Fk+l)(i-i’)T(j’-i‘)-(j-i)
*
t*>’
Nach Voraussetzung sind lj - il I k und lj’ - il 5 k. Daraus folgt l(j’ - i’) - 0 - 01 I 2k. Für
(*) bedeutet dies, daß 1(2k+l) (i -. i’)l I 2k. ist. Da 2k,+ 1 > 2k gilt und i und i’ ganze
Zahlen sind muß gelten: i - i’= 0 m i = i’ .
(**).
(**) eingesetzt in (*) ergibt:O=j’-i-j+i=j’-j;Hierausfolgtj’=j,
1.
1
/.
f
--!
“-7
-~
pnrs 1663 UDatenstrukturen”
m
zur KlaJ&u F vorn
17.08.96
Seite 5
Aufgabe 5
Wir verwenden die Sorte nodeset, um die Menge der Nachfolger eines Knotens zu
modellieren.
algebra
sorts
m?Ph
node, edge, graph; nodeset, bool
new:
ops
+ grr47h
add-node:’ node x graph
+
groph
add-edge:
edge x graph
+ gr@
sllc:
node x graph
+ nodeset
reachuble: no& x node x graph ‘+ bool
= cirgendeine Menge>
sets
no&
= node x node
edge
={(V,E)lk’snode~E~VxV)
PPh
nodeset = F(node)
functions
= (09 0)
new
add-node (v, (V, E))
=
W u {v-l, El
(V,Eu((v,,w))
add&zv ((v, 4, K EN =
suc (v, (V, ~9)
reachable (v, w, G)
i (V,E)
fallsvEVAweV
sonst
= { WE V~(V,W)E E}
= v = w v (3 u E suc (v, G): reachable (u, w, G))
Man beachte, dai3 in der Mengendefinition für graph die Bedingung E c node x no& nicht
ausreichend ist, da in diesem Fall Kanten zwischen nicht-existierenden Knoten möglich
tp wären. Das gleiche gilt für die Definition graph = finode) x fiedge).
‘Aufgabe 6
Entscheidend ist die folgende Beobachtung: Wenn p fti ein Element x E [a.-b] gilt, so
,braucht man alle größeren Elemente nicht mehr zu untersuchen, da man mit x in jedem Fall
ein kleineres Element schon gefunden hat. D.h., man kann die Suche auf das Intervall
[a.x] beschränken. Gilt P für ein .Element x E [a..b] dagegen nicht, so kanndas gesuchte
Element nicht unter den Elementen sein, die kleiner als x sind, da sonst .P aufgrund der
Monotome auch fti x gölte. Daher kann man in diesem Fall die Suche auf das Intervall
[x+l..b] beschränken. Man kann also bi& auf dem Intervall suchen:
,
r
Musteriösun~en
Kurs 1663 ..Datensmdmren‘b
algorithm minP(P, a, b)
ifa-bthen
return a
else
Sei x := (&),div 2
if P(x) then minP(P, cx, x)
‘eise minP(P,
f i
zur Klausur votn 17.08.96
Seite 6 ’ ‘4J
.
I
x+l, b) .
,
,ff
Die binäre Suche benötigt O(log n) Schritte.
’
.I-*
_-
Aufgabe 7
?
.
Wir betrachten zunächst den Fall der x-Monotonie. Ftir zwei Segmente s = (cq, bl) und t =
(~22, trL), die x-monoton sind, können folgende Fälle auftreten:
Fall 1: Die x-Inte&.Ue beider Segmente sind disjunkt.
Fall&
Der, Durchschnitt beider x-Intervalle besteht aus genau einer x-Koordinate, und
keines der beiden Segmente ist senkrekht: (D.h., der rechte Endpunkt bi von s und
der linke Endpunkt a2 von t haben gleiche x-Koordinate).
Fall 2.1:
Die y-Koordinaten von bi und a2 sind verschieden, dh., bl # a2.
Fall 2.2:
Die y-Koordinaten von bi und a2 sind gleich, dh., bl = a2.
Fall3: Der Durchschnitt beider x-Interva.lIe besteht aus genau einer x-Koordinate, und t
t
aber nicht s ist senkrecht. (D.h., der rechte Endpunkt bi von s hat die gleiche x-’
\1u
Koordinate wie r .) ^
Fall 3.1:
blcl t.
/
Fall 3.2:
bl =azderbl =h
Fall 3.3:
he
tWab21
Fall& Der Durchschnitt beider x-Intervalle besteht aus genau einer x-Koordinate, und s
aber nicht t ist senkrecht. (D.h., der linke Endpunkt a2 von t hat die gleiche xKoordinate wie s.)
Fal14.1: aze s
Fall 4.2:
a2~alodera2=bl
Fall 4.3:
mE sVa,bd
Fall5 Der Durchschnitt beider x-Intervalle besteht aus genau einer x-Koordinate, und
beide Segmente sind senkrecht, (Ihre Lage zueinander darf beliebig sein. IIlSbeSOIl-
-,
ii
-y.
i
i
i
.
,v.,. ,,..
.a
.
Kurs
1663 .-Datenstrukturen”
Musterlöme r vom 17.08.96
Seite 7
dere dürfen sich die beiden Segmente also überlappen.)
Eine Lösungsidee besteht nun im wesentlichen darin, die Segmente aus S nach der xI$$rdinate des lexikographisch kleinsten Endpunktes eines Segmentes aufsteigend zu
sortieren und danach für je zwei aufeinanderfolgende Elemente der sortierten Folge das xMonotoniekriterium zu überprüfen. Wir erhal?n folgenden Algorithmus:
algorithm X-Monotony(S)
input: Eine beliebige Menge S von n Segmenten in der Ebene
output: rruq falls S x-monoton ist; fake sonst
i?
/--
Schritt 1:
Sortiere die Segmente aus S jeweils nach XI.
Schritt 2:
Sei s’ := (~1, . . . . s,) die in Schritt 1 nach XI sortierte Folge.
1- ..-- 1;
while (i ~2 n - 1) and XMdnotone(si, si+l) do
i :=i+ 1
od;
retum (i = n);
,
end X-Monotony.
Die Funktion XMhotone überprüft für zwei Segmente die x-Monotoniebedingung, Das
Sortieren in Schritt 1 benötigt O(n log n) Zeit. In Schritt 2 wird die sortierte Folge in O(n)
Zeit durchlaufen und für jedes Paar von aufeinariderfolgenden Segmenten getestet, ob es xmonoton ist. Insgesamt benötigt der Algorithmus also O(n log n) Zeit.
/’
t
Der Algorithmus für y-Monotonie ist analog. Die Übeqrüfung einer Menge von Segmenten
auf Monotonie kann durch Hintereinanderausführung der beiden Algorithmen für xMonotome und y-Monotonie erreicht werden.
.
Damit eine x-monotone Menge S einen x-monotonen Linienzug bildet, sind nur die Fälle
2.2, 3.2 und 4.2 erlaubt. Bei Auftreten einer der anderen Fälle (Fall 5 ist von vornherein
ausgeschlossen) liegt kein x-monotoner Linienzug vor, und der Algorithmus bricht ab. Wie
der folgende Algorithmus zeigt, müssen die Fälle 3.2 und 4.2 zusammenspielen, um den im
Hinweis der Aufgabenstellung hervorgehobenen Fall behandeln zu können.
‘.
I
algorithm TestForPoZyZine(S)
input: Eine x-monotone Menge S von n Segmenten in der Ebene, in der es zu jeder
x-Koordinate höchstens eine Senkrechte gibt
output: m, falls S einen x-monotonen Linienzug bildet; false sonst
fl ,
‘._
Kurs1 6
I
atenkm
I
I
e
n
.: .,
zur Klausur vom 17.08.9
Sei s’ := (sl, . . . . s,} die in Schritt 1 nach xl sortierte Folge.
(Wir wissen, daß S eine x-monotone Folge ist.)
2* := lwhill (i I n - 1) do
zi := (ai, bi)‘:= q;
~
,
fi+l := (ai+l, bi+11 := si+i;
if nat. VerticaZ(tJ and not VerricaZ(t~+l) then
if bi f ai+l then return falz fi
else if not verticaZ(fi) and VerficaZ(fi+l) then
if (bi f a&l) and (bi # bi+l) then return’false
eise if bi = ai+l then ConnectToLefrPoinr := false
ehe ConnecfToLeffPoint := he
S&in 2:
bIU
riilsun
I
Sortiere die Segmente aus S jeweils nach XI.
Schriq I:
1
n”
fi
2
else if V&caZ(f$and not VerticaZ(fi+l) theti
(fi ist nicht erstes Segment der Folge.)
ifi>lthen
if (Conn$ToLeffPoint and (ai f ai+l)) or
(not ConnectToLeftPoint and (bi # qi+l)) then j
return false
fi
(fi ist erstes Segment der Folge.)
ehe
if (ai f ai+l) and (bi f ai+l) then retum false fi
fi
f
i
1‘:=i+ 1
Seite 8 ’
z
.
J
,
‘\
0
,--
‘. : 7
-_ \
’
’ . ,
od;
,
_ return (i = n);
d
TestForPolyline.
Die Funktion Vertical überprüft, ob ein Segment senkrecht ist. Das Sortieren in Schritt 1 I
* benötigt O(n log n) Zeit. In Schritt 2 wird die sortierte Folge in O(n) Zeit durchlaufen und
für jedes Paar (fi, ti+l) von aufeinanderfolgenden Segmenten getestet; ob sie einen
gemeinsamen Endpunkt haben. Ist ti+l aber nicht ri senkrecht, so muß man sich für den
nächsten Schleifendurchlauf merken (Variable ConnecffoLefiPoint), welcher Endpunkt
von ti+l im nächsten Schleifendurchlauf mit dem linken Endpunkt von fi+z (i S ft,-2)
zusammenfaUn muß. Gemäß unserer Annahme muß nach einer Senkrechten ein Segment
‘folgen, das nicht vertikal ist.
Insgesamt benötigt der Algorithmus O(n Iog n) Zeit.
’
.
Herunterladen