JanisVoigtländer
TehnisheUniversitätDresden
Sommersemester 2007
Problemstellung
LinearesSuhen
BinäresSuhen
Suhbäume
AVL-Bäume
Gegeben: DatenstrukturmitEinträgeneinesTypsder Form:
typedef strut Entry
{ int key;
... ontents;
} EntryTyp;
undein zu suhenderShlüssel int Value;
Gegeben: DatenstrukturmitEinträgeneinesTypsder Form:
typedef strut Entry
{ int key;
... ontents;
} EntryTyp;
undein zu suhenderShlüssel int Value;
Gesuht: EintragE der DatenstrukturmitE.key=Value
Gegeben: DatenstrukturmitEinträgeneinesTypsder Form:
typedef strut Entry
{ int key;
... ontents;
} EntryTyp;
undein zu suhenderShlüssel int Value;
Gesuht: EintragE der DatenstrukturmitE.key=Value
Konkret: wenn Datenstrukturein Feld der Form
EntryTyp F[n℄, danneinePositioni gesuht,so
dassF[i℄.key=Value
Gegeben: DatenstrukturmitEinträgeneinesTypsder Form:
typedef strut Entry
{ int key;
... ontents;
} EntryTyp;
undein zu suhenderShlüssel int Value;
Gesuht: EintragE der DatenstrukturmitE.key=Value
Konkret: wenn Datenstrukturein Feld der Form
EntryTyp F[n℄, danneinePositioni gesuht,so
dassF[i℄.key=Value
Vereinfaht:
◮
keineontentsgespeihert, lediglihdieShlüsselwerte selbst
Gegeben: DatenstrukturmitEinträgeneinesTypsder Form:
typedef strut Entry
{ int key;
... ontents;
} EntryTyp;
undein zu suhenderShlüssel int Value;
Gesuht: EintragE der DatenstrukturmitE.key=Value
Konkret: wenn Datenstrukturein Feld der Form
EntryTyp F[n℄, danneinePositioni gesuht,so
dassF[i℄.key=Value
Vereinfaht:
◮
keineontentsgespeihert, lediglihdieShlüsselwerte selbst
◮
Positionnihtgefordert, lediglihSignalob oder
ob nihtgefunden
Gegeben: DatenstrukturmitEinträgeneinesTypsder Form:
typedef strut Entry
{ int key;
... ontents;
} EntryTyp;
undein zu suhenderShlüssel int Value;
Gesuht: EintragE der DatenstrukturmitE.key=Value
Konkret: wenn Datenstrukturein Feld der Form
EntryTyp F[n℄, danneinePositioni gesuht,so
dassF[i℄.key=Value
Vereinfaht:
◮
keineontentsgespeihert, lediglihdieShlüsselwerte selbst
◮
Positionnihtgefordert, lediglihSignalob oder
ob nihtgefunden
Gegeben: DatenstrukturmitEinträgeneinesTypsder Form:
typedef strut Entry
{ int key;
... ontents;
} EntryTyp;
undein zu suhenderShlüssel int Value;
Gesuht: EintragE der DatenstrukturmitE.key=Value
Konkret: wenn Datenstrukturein Feld der Form
EntryTyp F[n℄, danneinePositioni gesuht,so
dassF[i℄.key=Value
Vereinfaht:
◮
keineontentsgespeihert, lediglihdieShlüsselwerte selbst
◮
Positionnihtgefordert, lediglihSignalob oder
ob nihtgefunden
Beispiele:
12 7 9 8 4 6 + 9 7→ 1
Gegeben: DatenstrukturmitEinträgeneinesTypsder Form:
typedef strut Entry
{ int key;
... ontents;
} EntryTyp;
undein zu suhenderShlüssel int Value;
Gesuht: EintragE der DatenstrukturmitE.key=Value
Konkret: wenn Datenstrukturein Feld der Form
EntryTyp F[n℄, danneinePositioni gesuht,so
dassF[i℄.key=Value
Vereinfaht:
◮
keineontentsgespeihert, lediglihdieShlüsselwerte selbst
◮
Positionnihtgefordert, lediglihSignalob oder
ob nihtgefunden
Gegeben: DatenstrukturmitEinträgeneinesTypsder Form:
typedef strut Entry
{ int key;
... ontents;
} EntryTyp;
undein zu suhenderShlüssel int Value;
Gesuht: EintragE der DatenstrukturmitE.key=Value
Konkret: wenn Datenstrukturein Feld der Form
EntryTyp F[n℄, danneinePositioni gesuht,so
dassF[i℄.key=Value
Vereinfaht:
◮
keineontentsgespeihert, lediglihdieShlüsselwerte selbst
◮
Positionnihtgefordert, lediglihSignalob oder
ob nihtgefunden
Beispiele:
12 7 9 8 4 6 + 9 7→ 1
12 7 9 8 4 6 + 5 7→ 0
NaiveIdee: Durhsuhenvonlinks nahrehts
NaiveIdee: Durhsuhenvonlinks nahrehts
Beispiele:
12 7 9 8 4 6
9
NaiveIdee: Durhsuhenvonlinks nahrehts
Beispiele:
12 7 9 8 4 6
9
NaiveIdee: Durhsuhenvonlinks nahrehts
Beispiele:
12 7 9 8 4 6
9
NaiveIdee: Durhsuhenvonlinks nahrehts
Beispiele:
12 7 9 8 4 6
9
NaiveIdee: Durhsuhenvonlinks nahrehts
Beispiele:
12 7 9 8 4 6 9
12 7 9 8 4 6
5
NaiveIdee: Durhsuhenvonlinks nahrehts
Beispiele:
12 7 9 8 4 6 9
12 7 9 8 4 6
5
NaiveIdee: Durhsuhenvonlinks nahrehts
Beispiele:
12 7 9 8 4 6 9
12 7 9 8 4 6
5
NaiveIdee: Durhsuhenvonlinks nahrehts
Beispiele:
12 7 9 8 4 6 9
12 7 9 8 4 6
5
NaiveIdee: Durhsuhenvonlinks nahrehts
Beispiele:
12 7 9 8 4 6 9
12 7 9 8 4 6
5
NaiveIdee: Durhsuhenvonlinks nahrehts
Beispiele:
12 7 9 8 4 6 9
12 7 9 8 4 6
5
NaiveIdee: Durhsuhenvonlinks nahrehts
Beispiele:
12 7 9 8 4 6 9
12 7 9 8 4 6
5
NaiveIdee: Durhsuhenvonlinks nahrehts
Beispiele:
12 7 9 8 4 6 9
12 7 9 8 4 6
5
NaiveIdee: Durhsuhenvonlinks nahrehts
Beispiele:
12 7 9 8 4 6 9
12 7 9 8 4 6 5
InC: int i=0;
while ((i<n) && (F[i℄!=Value)) i++;
found=(i<n);
NaiveIdee: Durhsuhenvonlinks nahrehts
Beispiele:
12 7 9 8 4 6 9
12 7 9 8 4 6 5
InC: int i=0;
while ((i<n) && (F[i℄!=Value)) i++;
found=(i<n);
Komplexität: linearer Aufwand
Voraussetzung: sortiertesFeld
Voraussetzung: sortiertesFeld
Idee: Intervallshahtelung
Voraussetzung: sortiertesFeld
Idee: Intervallshahtelung
Beispiele:
2 3 5 6 8 9 11 12 14 16 17 19 20 22 23
9
Voraussetzung: sortiertesFeld
Idee: Intervallshahtelung
Beispiele:
2 3 5 6 8 9 11 12 14 16 17 19 20 22 23
9
Voraussetzung: sortiertesFeld
Idee: Intervallshahtelung
Beispiele:
2 3 5 6 8 9 11 12 14 16 17 19 20 22 23
9
Voraussetzung: sortiertesFeld
Idee: Intervallshahtelung
Beispiele:
2 3 5 6 8 9 11 12 14 16 17 19 20 22 23
9
Voraussetzung: sortiertesFeld
Idee: Intervallshahtelung
Beispiele:
2 3 5 6 8 9 11 12 14 16 17 19 20 22 23 9
2 3 5 6 8 9 11 12 14 16 17 19 20 22 23
21
Voraussetzung: sortiertesFeld
Idee: Intervallshahtelung
Beispiele:
2 3 5 6 8 9 11 12 14 16 17 19 20 22 23 9
2 3 5 6 8 9 11 12 14 16 17 19 20 22 23
21
Voraussetzung: sortiertesFeld
Idee: Intervallshahtelung
Beispiele:
2 3 5 6 8 9 11 12 14 16 17 19 20 22 23 9
2 3 5 6 8 9 11 12 14 16 17 19 20 22 23
21
Voraussetzung: sortiertesFeld
Idee: Intervallshahtelung
Beispiele:
2 3 5 6 8 9 11 12 14 16 17 19 20 22 23 9
2 3 5 6 8 9 11 12 14 16 17 19 20 22 23
21
Voraussetzung: sortiertesFeld
Idee: Intervallshahtelung
Beispiele:
2 3 5 6 8 9 11 12 14 16 17 19 20 22 23 9
2 3 5 6 8 9 11 12 14 16 17 19 20 22 23
21
Voraussetzung: sortiertesFeld
Idee: Intervallshahtelung
Beispiele:
2 3 5 6 8 9 11 12 14 16 17 19 20 22 23 9
2 3 5 6 8 9 11 12 14 16 17 19 20 22 23 21
InC: int searh(int li,int re)
{ int pos;
if (li>re) return 0;
pos=(li+re)/2;
if (F[pos℄==Value) return 1;
if (F[pos℄<Value) return searh(pos+1,re);
return searh(li,pos-1);
Voraussetzung: sortiertesFeld
Idee: Intervallshahtelung
Beispiele:
2 3 5 6 8 9 11 12 14 16 17 19 20 22 23 9
2 3 5 6 8 9 11 12 14 16 17 19 20 22 23 21
InC: int searh(int li,int re)
{ int pos;
if (li>re) return 0;
pos=(li+re)/2;
if (F[pos℄==Value) return 1;
if (F[pos℄<Value) return searh(pos+1,re);
return searh(li,pos-1);
}
found=searh(0,n-1);
Komplexität: Aufwand log
(
n)
Voraussetzung: sortiertesFeld
Idee: Intervallshahtelung
Beispiele:
2 3 5 6 8 9 11 12 14 16 17 19 20 22 23 9
2 3 5 6 8 9 11 12 14 16 17 19 20 22 23 21
InC: int searh(int li,int re)
{ int pos;
if (li>re) return 0;
pos=(li+re)/2;
if (F[pos℄==Value) return 1;
if (F[pos℄<Value) return searh(pos+1,re);
return searh(li,pos-1);
Problem:
◮
eziente Suhe nurin sortierterDatenstrukturmöglih
Problem:
◮
eziente Suhe nurin sortierterDatenstrukturmöglih
◮
Sortierenvorjedem Suhvorgang keine Option
(n
·
log(
n)
)Problem:
◮
eziente Suhe nurin sortierterDatenstrukturmöglih
◮
Sortierenvorjedem Suhvorgang keine Option
(n
·
log(
n)
)◮
einmaligesSortierennihtgenug, falls
Datenstruktur erweiterbarseinsoll
Problem:
◮
eziente Suhe nurin sortierterDatenstrukturmöglih
◮
Sortierenvorjedem Suhvorgang keine Option
(n
·
log(
n)
)◮
einmaligesSortierennihtgenug, falls
Datenstruktur erweiterbarseinsoll
Lösung:
◮
Verwendung einer sortiertenDatenstruktur,in
welheezient eingefügtwerdenkann, unter
Beibehaltungder Sortierung
Problem:
◮
eziente Suhe nurin sortierterDatenstrukturmöglih
◮
Sortierenvorjedem Suhvorgang keine Option
(n
·
log(
n)
)◮
einmaligesSortierennihtgenug, falls
Datenstruktur erweiterbarseinsoll
Lösung:
◮
Verwendung einer sortiertenDatenstruktur,in
welheezient eingefügtwerdenkann, unter
Beibehaltungder Sortierung
◮
aber: sowohl Feld alsauhverketteteListe zu
unexibel
Problem:
◮
eziente Suhe nurin sortierterDatenstrukturmöglih
◮
Sortierenvorjedem Suhvorgang keine Option
(n
·
log(
n)
)◮
einmaligesSortierennihtgenug, falls
Datenstruktur erweiterbarseinsoll
Lösung:
◮
Verwendung einer sortiertenDatenstruktur,in
welheezient eingefügtwerdenkann, unter
Beibehaltungder Sortierung
◮
aber: sowohl Feld alsauhverketteteListe zu
unexibel
◮
stattdessen: BäumeDenition: fürjeden Knoten:
◮
alle Knotenin linkem Nahfolgerbaummit
kleinerer Zahlbeshriftet
◮
alle Knotenin rehtemNahfolgerbaum mitgröÿerer Zahlbeshriftet
Denition: fürjeden Knoten:
◮
alle Knotenin linkem Nahfolgerbaummit
kleinerer Zahlbeshriftet
◮
alle Knotenin rehtemNahfolgerbaum mitgröÿerer Zahlbeshriftet
Beispiele:
7 3
1 5
4 6
17
8 19
18 20
Denition: fürjeden Knoten:
◮
alle Knotenin linkem Nahfolgerbaummit
kleinerer Zahlbeshriftet
◮
alle Knotenin rehtemNahfolgerbaum mitgröÿerer Zahlbeshriftet
Beispiele:
7 3
1 5
4 6
17
8 19
18 20
7 3
1 5
4 6
17
8 18
19 20
Denition: fürjeden Knoten:
◮
alle Knotenin linkem Nahfolgerbaummit
kleinerer Zahlbeshriftet
◮
alle Knotenin rehtemNahfolgerbaum mitgröÿerer Zahlbeshriftet
Beispiele:
7 3
1 5
4 6
17
8 19
18 20
7 3
1 5
4 6
18
8 19
17 20
Idee: analogzu binäremSuhen
Idee: analogzu binäremSuhen
Beispiele:
7 3
1 5
4 6
17
8 19
18 20
4
Idee: analogzu binäremSuhen
Beispiele:
7 3
1 5
4 6
17
8 19
18 20
4
Idee: analogzu binäremSuhen
Beispiele:
7 3
1 5
4 6
17
8 19
18 20
4
Idee: analogzu binäremSuhen
Beispiele:
7 3
1 5
4 6
17
8 19
18 20
4
Idee: analogzu binäremSuhen
Beispiele:
7 3
1 5
4 6
17
8 19
18 20
4
Idee: analogzu binäremSuhen
Beispiele:
7 3
1 5
4 6
17
8 19
18 20 4
7 3
1 5
4 6
17
8 19
18 20
9
Idee: analogzu binäremSuhen
Beispiele:
7 3
1 5
4 6
17
8 19
18 20 4
7 3
1 5
4 6
17
8 19
18 20
9
Idee: analogzu binäremSuhen
Beispiele:
7 3
1 5
4 6
17
8 19
18 20 4
7 3
1 5
4 6
17
8 19
18 20
9
Idee: analogzu binäremSuhen
Beispiele:
7 3
1 5
4 6
17
8 19
18 20 4
7 3
1 5
4 6
17
8 19
18 20
9
Idee: analogzu binäremSuhen
Beispiele:
7 3
1 5
4 6
17
8 19
18 20 4
7 3
1 5
4 6
17
8 19
18 20 9
Aufwand: entsprehend Entfernungder Blättervon derWurzel
typedef strut Nodeelem *Ptr;
typedef strut Nodeelem { int key;
Ptr left, right;
} Node;
int searh(Ptr t,int x)
{ if (t==NULL) return 0;
if (t->key == x) return 1;
if (t->key < x) return searh(t->right,x);
return searh(t->left,x);
}
Idee: zunähstsuhen; wennnihtvorhanden, neues Blatt
erzeugen
Idee: zunähstsuhen; wennnihtvorhanden, neues Blatt
erzeugen
Beispiel:
8 4 5 10 2 9 6 12
Idee: zunähstsuhen; wennnihtvorhanden, neues Blatt
erzeugen
Beispiel:
4 5 10 2 9 6 12
8
Idee: zunähstsuhen; wennnihtvorhanden, neues Blatt
erzeugen
Beispiel:
5 10 2 9 6 12 8
4
Idee: zunähstsuhen; wennnihtvorhanden, neues Blatt
erzeugen
Beispiel:
5 10 2 9 6 12 8
4
Idee: zunähstsuhen; wennnihtvorhanden, neues Blatt
erzeugen
Beispiel:
10 2 9 6 12 8 4
5
Idee: zunähstsuhen; wennnihtvorhanden, neues Blatt
erzeugen
Beispiel:
2 9 6 12 8 4
5
10
Idee: zunähstsuhen; wennnihtvorhanden, neues Blatt
erzeugen
Beispiel:
2 9 6 12 8 4
5
10
Idee: zunähstsuhen; wennnihtvorhanden, neues Blatt
erzeugen
Beispiel:
9 6 12
8 4
2 5
10
Idee: zunähstsuhen; wennnihtvorhanden, neues Blatt
erzeugen
Beispiel:
9 6 12
8 4
2 5
10
Idee: zunähstsuhen; wennnihtvorhanden, neues Blatt
erzeugen
Beispiel:
6 12
8 4
2 5
10
9
Idee: zunähstsuhen; wennnihtvorhanden, neues Blatt
erzeugen
Beispiel:
6 12
8 4
2 5
10
9
Idee: zunähstsuhen; wennnihtvorhanden, neues Blatt
erzeugen
Beispiel:
6 12
8 4
2 5
10
9
Idee: zunähstsuhen; wennnihtvorhanden, neues Blatt
erzeugen
Beispiel:
12
8 4
2 5
6
10
9
Idee: zunähstsuhen; wennnihtvorhanden, neues Blatt
erzeugen
Beispiel:
12
8 4
2 5
6
10
9
Idee: zunähstsuhen; wennnihtvorhanden, neues Blatt
erzeugen
Beispiel:
8 4
2 5
6 10
9 12
void insert(Ptr *t,int x)
{ if (*t==NULL)
{ *t=(Ptr) mallo(sizeof(Node));
(*t)->key=x;
(*t)->left=NULL;
(*t)->right=NULL;
}
else
{ if ((*t)->key < x) insert(&((*t)->right),x);
else if ((*t)->key > x) insert(&((*t)->left),x);
}
}
Problem: Formder Bäume, undsomitAufwand beimSuhen
undEinfügen, hängt starkvon Einfügereihenfolge ab
Problem: Formder Bäume, undsomitAufwand beimSuhen
undEinfügen, hängt starkvon Einfügereihenfolge ab
Beispiel:
1 2 3 4 5 6
Problem: Formder Bäume, undsomitAufwand beimSuhen
undEinfügen, hängt starkvon Einfügereihenfolge ab
Beispiel:
2 3 4 5 6
1
Problem: Formder Bäume, undsomitAufwand beimSuhen
undEinfügen, hängt starkvon Einfügereihenfolge ab
Beispiel:
3 4 5 6 1
2
Problem: Formder Bäume, undsomitAufwand beimSuhen
undEinfügen, hängt starkvon Einfügereihenfolge ab
Beispiel:
3 4 5 6 1
2
Problem: Formder Bäume, undsomitAufwand beimSuhen
undEinfügen, hängt starkvon Einfügereihenfolge ab
Beispiel:
4 5 6 1
2
3
Problem: Formder Bäume, undsomitAufwand beimSuhen
undEinfügen, hängt starkvon Einfügereihenfolge ab
Beispiel:
4 5 6 1
2
3
Problem: Formder Bäume, undsomitAufwand beimSuhen
undEinfügen, hängt starkvon Einfügereihenfolge ab
Beispiel:
4 5 6 1
2
3
Problem: Formder Bäume, undsomitAufwand beimSuhen
undEinfügen, hängt starkvon Einfügereihenfolge ab
Beispiel:
5 6 1
2 3
4
Problem: Formder Bäume, undsomitAufwand beimSuhen
undEinfügen, hängt starkvon Einfügereihenfolge ab
Beispiel:
5 6 1
2 3
4
Problem: Formder Bäume, undsomitAufwand beimSuhen
undEinfügen, hängt starkvon Einfügereihenfolge ab
Beispiel:
5 6 1
2 3
4
Problem: Formder Bäume, undsomitAufwand beimSuhen
undEinfügen, hängt starkvon Einfügereihenfolge ab
Beispiel:
5 6 1
2 3
4
Problem: Formder Bäume, undsomitAufwand beimSuhen
undEinfügen, hängt starkvon Einfügereihenfolge ab
Beispiel:
6
1 2
3 4
5
Problem: Formder Bäume, undsomitAufwand beimSuhen
undEinfügen, hängt starkvon Einfügereihenfolge ab
Beispiel:
6
1 2
3 4
5
Problem: Formder Bäume, undsomitAufwand beimSuhen
undEinfügen, hängt starkvon Einfügereihenfolge ab
Beispiel:
6
1 2
3 4
5
Problem: Formder Bäume, undsomitAufwand beimSuhen
undEinfügen, hängt starkvon Einfügereihenfolge ab
Beispiel:
6
1 2
3 4
5
Problem: Formder Bäume, undsomitAufwand beimSuhen
undEinfügen, hängt starkvon Einfügereihenfolge ab
Beispiel:
6
1 2
3 4
5
Problem: Formder Bäume, undsomitAufwand beimSuhen
undEinfügen, hängt starkvon Einfügereihenfolge ab
Beispiel:
1 2
3 4
5
6
Problem: Formder Bäume, undsomitAufwand beimSuhen
undEinfügen, hängt starkvon Einfügereihenfolge ab
Beispiel:
1 2
3 4
5
6
Problem: Formder Bäume, undsomitAufwand beimSuhen
undEinfügen, hängt starkvon Einfügereihenfolge ab
Beispiel:
1 2
3 4
5 6
Lösung: Umbalanierenwährend des Einfügens
Ziel: sowohl Suhen alsauhEinfügen mitAufwand log
(
n)
Denition:
◮
SuhbaumDenition:
◮
Suhbaum◮
an jedemKnoten Höhenuntershiedzwishen
rehtem und linkem Nahfolgerbaumniht
gröÿer als Eins
Denition:
◮
Suhbaum◮
an jedemKnoten Höhenuntershiedzwishen
rehtem und linkem Nahfolgerbaumniht
gröÿer als Eins
Beispiel:
5
1
3 1 4 0
7 1 6 0 12 −
1
11 0
Denition:
◮
Suhbaum◮
an jedemKnoten Höhenuntershiedzwishen
rehtem und linkem Nahfolgerbaumniht
gröÿer als Eins
Beispiel:
5
1
3 1 4 0
7 1 6 0 12 −
1
11 0
Balanefaktor: Dierenz sollstets
−
1,0 oder 1sein1.Einfügen: wiebei Suhbäumenalsneues Blatt an(einzig)
geeigneterStelle
1.Einfügen: wiebei Suhbäumenalsneues Blatt an(einzig)
geeigneterStelle
Beispiel:
6
8
0
5 0
3 0 7 0
12 − 1
9 0
1.Einfügen: wiebei Suhbäumenalsneues Blatt an(einzig)
geeigneterStelle
Beispiel:
8 0 5 0
3 0 7 0
6
0
12 −
1
9 0
1.Einfügen: wiebei Suhbäumenalsneues Blatt an(einzig)
geeigneterStelle
Beispiel:
8 0 5 0
3 0 7 0
6
0
12 −
1
9 0
2. Aktualisieren: Balanefaktoren entlangdesSuhpfadesanpassen
1.Einfügen: wiebei Suhbäumenalsneues Blatt an(einzig)
geeigneterStelle
Beispiel:
8 0 5 0
3 0 7 −
1
6
0
12 −
1
9 0
2. Aktualisieren: Balanefaktoren entlangdesSuhpfadesanpassen
1.Einfügen: wiebei Suhbäumenalsneues Blatt an(einzig)
geeigneterStelle
Beispiel:
8 0 5 1
3 0 7 −
1
6
0
12 −
1
9 0
2. Aktualisieren: Balanefaktoren entlangdesSuhpfadesanpassen
1.Einfügen: wiebei Suhbäumenalsneues Blatt an(einzig)
geeigneterStelle
Beispiel:
8 −
1
5
1
3 0 7 − 1 6 0
12 −
1
9 0
2. Aktualisieren: Balanefaktoren entlangdesSuhpfadesanpassen
Variante: Anpassung derBalanefaktoren nihtimmerbiszur
Wurzel nötig
Variante: Anpassung derBalanefaktoren nihtimmerbiszur
Wurzel nötig
Beispiel:
4
8 − 1 5 1
3 0 7 −
1
6
0
12 −
1
9 0
Variante: Anpassung derBalanefaktoren nihtimmerbiszur
Wurzel nötig
Beispiel:
8 −
1
5 1 3 0
4
0
7 −
1
6
0
12 −
1
9 0
Variante: Anpassung derBalanefaktoren nihtimmerbiszur
Wurzel nötig
Beispiel:
8 −
1
5 1 3 1
4
0
7 −
1
6
0
12 −
1
9 0
Variante: Anpassung derBalanefaktoren nihtimmerbiszur
Wurzel nötig
Beispiel:
8 −
1
5
0
3 1 4 0
7 − 1 6 0
12 −
1
9 0
Variante: Anpassung derBalanefaktoren nihtimmerbiszur
Wurzel nötig
Beispiel:
8 −
1
5
0
3 1 4 0
7 − 1 6 0
12 −
1
9 0
Problem: Balanefaktorenkönnen denBereih
−
1, 0,1verlassen
Variante: Anpassung derBalanefaktoren nihtimmerbiszur
Wurzel nötig
Beispiel:
8 −
1
5
0
3 1 4 0
7 − 1 6 0
12 −
1
9 0
Problem: Balanefaktorenkönnen denBereih
−
1, 0,1verlassen
Lösung: Rotationen
Beispiel:
1 2 3 4 5 6
Beispiel:
2 3 4 5 6
1 0
Beispiel:
3 4 5 6 1 0
2 0
Beispiel:
3 4 5 6 1 1
2 0
Beispiel:
4 5 6 1
1
2 0
3 0
Beispiel:
4 5 6 1
1
2 1
3 0
Beispiel:
4 5 6 1
2
2 1
3 0
Beispiel:
4 5 6 1
2
2 1
3 0
Beispiel:
4 5 6 2 0
1 0 3 0
Beispiel:
5 6 2
0
1 0 3 0
4 0
Beispiel:
5 6 2
0
1 0 3 1
4 0
Beispiel:
5 6 2
1
1 0 3 1
4 0
Beispiel:
6
2
1
1 0 3 1
4 0
5 0
Beispiel:
6
2
1
1 0 3 1
4 1
5 0
Beispiel:
6
2
1
1 0 3 2
4 1
5 0
Beispiel:
6
2
1
1 0 3 2
4 1
5 0
Beispiel:
6
2
1
1 0 4 0
3 0 5 0
Beispiel:
2
1
1 0 4 0
3 0 5 0
6 0
Beispiel:
2
1
1 0 4 0
3 0 5 1
6 0
Beispiel:
2
1
1 0 4 1
3 0 5 1
6 0
Beispiel:
2
2
1 0 4 1
3 0 5 1
6 0
Beispiel:
2 2 1
0
4
1
3 0 5 1
6 0
Beispiel:
4 0 2
0
1 0 3 0
5
1
6 0
Problem: einfaheRotationnihtimmerausreihend
Problem: einfaheRotationnihtimmerausreihend
Beispiel:
9 −
1
4 0 2 0
1 0 3 0
7 0 5 0
6
0
8 0
11 0
10 0 12 0
Problem: einfaheRotationnihtimmerausreihend
Beispiel:
9 −
1
4 0 2 0
1 0 3 0
7 0 5 1
6
0
8 0
11 0
10 0 12 0
Problem: einfaheRotationnihtimmerausreihend
Beispiel:
9 −
1
4 0 2 0
1 0 3 0
7 −
1
5 1 6
0
8 0
11 0
10 0 12 0
Problem: einfaheRotationnihtimmerausreihend
Beispiel:
9 −
1
4 1 2 0
1 0 3 0
7 −
1
5 1 6
0
8 0
11 0
10 0 12 0
Problem: einfaheRotationnihtimmerausreihend
Beispiel:
9 −
2
4 1 2 0
1 0 3 0
7 −
1
5 1 6
0
8 0
11 0
10 0 12 0
Problem: einfaheRotationnihtimmerausreihend
Beispiel:
4
2
2 0
1 0 3 0
9 − 1 7 −
1
5 1 6
0
8 0
11 0 10 0 12 0
Rotation an Wurzelführt nihtzu AVL-Baum!
Problem: einfaheRotationnihtimmerausreihend
Beispiel:
4
2
2 0
1 0 3 0
9 − 1 7 −
1
5 1 6
0
8 0
11 0 10 0 12 0
Rotation an Wurzelführt nihtzu AVL-Baum!
Beispiel:
9 −
1
4
0
2 0
1 0 3 0
7 0 5 0
6 0 8 0
11
0
10 0 12 0
Beispiel:
9 −
1
4
0
2 0
1 0 3 0
7 0 5 1
6 0 8 0
11
0
10 0 12 0
Beispiel:
9 −
1
4
0
2 0
1 0 3 0
7 −
1
5 1 6 0
8 0 11
0
10 0 12 0
Beispiel:
9 −
1
4
1
2 0
1 0 3 0
7 −
1
5 1 6 0
8 0 11
0
10 0 12 0
Beispiel:
9 −
2
4
1
2 0
1 0 3 0
7 −
1
5 1 6 0
8 0 11
0
10 0 12 0
Beispiel:
9 −
2
4 1 2 0
1
0
3
0
7 −
1
5
1
6 0 8
0
11 0
10 0 12 0
Beispiel:
9 −
2
7 −
2
4 0 2
0
1 0 3 0
5
1
6 0 8 0
11 0
10 0 12 0
Beispiel:
7 0 4
0
2 0
1 0 3 0
5 1 6 0
9
1
8 0 11 0
10 0 12 0
1. Sofern noh nihtvorhanden, fügedas neueElement alsBlatt
so ein,dassdie Suhbaumeigenshaft erfülltist,und setze
dessenBalanefaktorauf 0.
1. Sofern noh nihtvorhanden, fügedas neueElement alsBlatt
so ein,dassdie Suhbaumeigenshaft erfülltist,und setze
dessenBalanefaktorauf 0.
2. Fallsnoh nihtan derWurzel desBaumes,gehezum
Vorgängerknoten.
1. Sofern noh nihtvorhanden, fügedas neueElement alsBlatt
so ein,dassdie Suhbaumeigenshaft erfülltist,und setze
dessenBalanefaktorauf 0.
2. Fallsnoh nihtan derWurzel desBaumes,gehezum
Vorgängerknoten. Dort,falls
2.1 auslinkemNahfolgerbaumkommend:
1. Sofern noh nihtvorhanden, fügedas neueElement alsBlatt
so ein,dassdie Suhbaumeigenshaft erfülltist,und setze
dessenBalanefaktorauf 0.
2. Fallsnoh nihtan derWurzel desBaumes,gehezum
Vorgängerknoten. Dort,falls
2.1 auslinkemNahfolgerbaumkommend:
2.1.1 wennBalanefaktorgleih1,dannauf0setzenundAbbruh
1. Sofern noh nihtvorhanden, fügedas neueElement alsBlatt
so ein,dassdie Suhbaumeigenshaft erfülltist,und setze
dessenBalanefaktorauf 0.
2. Fallsnoh nihtan derWurzel desBaumes,gehezum
Vorgängerknoten. Dort,falls
2.1 auslinkemNahfolgerbaumkommend:
2.1.1 wennBalanefaktorgleih1,dannauf0setzenundAbbruh
2.1.2 wennBalanefaktorgleih0,dannauf
−
1setzenundzu2.1. Sofern noh nihtvorhanden, fügedas neueElement alsBlatt
so ein,dassdie Suhbaumeigenshaft erfülltist,und setze
dessenBalanefaktorauf 0.
2. Fallsnoh nihtan derWurzel desBaumes,gehezum
Vorgängerknoten. Dort,falls
2.1 auslinkemNahfolgerbaumkommend:
2.1.1 wennBalanefaktorgleih1,dannauf0setzenundAbbruh
2.1.2 wennBalanefaktorgleih0,dannauf
−
1setzenundzu2.2.1.3 wennBalanefaktorgleih
−
1,dannRotation(en)gemäÿ FalluntersheidungbezüglihBalanefaktoramlinkenNahfolgerknoten...
1. Sofern noh nihtvorhanden, fügedas neueElement alsBlatt
so ein,dassdie Suhbaumeigenshaft erfülltist,und setze
dessenBalanefaktorauf 0.
2. Fallsnoh nihtan derWurzel desBaumes,gehezum
Vorgängerknoten. Dort,falls
2.1 auslinkemNahfolgerbaumkommend:
2.1.1 wennBalanefaktorgleih1,dannauf0setzenundAbbruh
2.1.2 wennBalanefaktorgleih0,dannauf
−
1setzenundzu2.2.1.3 wennBalanefaktorgleih
−
1,dannRotation(en)gemäÿ FalluntersheidungbezüglihBalanefaktoramlinkenNahfolgerknoten...,undAbbruh
1. Sofern noh nihtvorhanden, fügedas neueElement alsBlatt
so ein,dassdie Suhbaumeigenshaft erfülltist,und setze
dessenBalanefaktorauf 0.
2. Fallsnoh nihtan derWurzel desBaumes,gehezum
Vorgängerknoten. Dort,falls
2.1 auslinkemNahfolgerbaumkommend:
2.1.1 wennBalanefaktorgleih1,dannauf0setzenundAbbruh
2.1.2 wennBalanefaktorgleih0,dannauf
−
1setzenundzu2.2.1.3 wennBalanefaktorgleih
−
1,dannRotation(en)gemäÿ FalluntersheidungbezüglihBalanefaktoramlinkenNahfolgerknoten...,undAbbruh
2.2 ausrehtemNahfolgerbaumkommend:
...entsprehendumgekehrt
Denition: fürjeden Knoten:
◮
alle Knotenin linkem Nahfolgerbaummit
kleinerer Zahlbeshriftet
◮
alle Knotenin rehtemNahfolgerbaum mitgröÿerer Zahlbeshriftet
Denition: fürjeden Knoten:
◮
alle Knotenin linkem Nahfolgerbaummit
kleinerer Zahlbeshriftet
◮
alle Knotenin rehtemNahfolgerbaum mitgröÿerer Zahlbeshriftet
Beispiel:
7 3
1 5
4 6
17
8 19
18 20
4
Denition: fürjeden Knoten:
◮
alle Knotenin linkem Nahfolgerbaummit
kleinerer Zahlbeshriftet
◮
alle Knotenin rehtemNahfolgerbaum mitgröÿerer Zahlbeshriftet
Beispiel:
7 3
1 5
4 6
17
8 19
18 20
4
Denition: fürjeden Knoten:
◮
alle Knotenin linkem Nahfolgerbaummit
kleinerer Zahlbeshriftet
◮
alle Knotenin rehtemNahfolgerbaum mitgröÿerer Zahlbeshriftet
Beispiel:
7 3
1 5
4 6
17
8 19
18 20
4
Denition: fürjeden Knoten:
◮
alle Knotenin linkem Nahfolgerbaummit
kleinerer Zahlbeshriftet
◮
alle Knotenin rehtemNahfolgerbaum mitgröÿerer Zahlbeshriftet
Beispiel:
7 3
1 5
4 6
17
8 19
18 20
4
Denition: fürjeden Knoten:
◮
alle Knotenin linkem Nahfolgerbaummit
kleinerer Zahlbeshriftet
◮
alle Knotenin rehtemNahfolgerbaum mitgröÿerer Zahlbeshriftet
Beispiel:
7 3
1 5
4 6
17
8 19
18 20
4
Beispiel:
6 12
8 4
2 5
10
9
Beispiel:
6 12
8 4
2 5
10
9
Beispiel:
6 12
8 4
2 5
10
9
Beispiel:
12
8 4
2 5
6
10
9
Denition:
◮
Suhbaum◮
an jedemKnoten Höhenuntershiedzwishen
rehtem und linkem Nahfolgerbaumniht
gröÿer als Eins
Denition:
◮
Suhbaum◮
an jedemKnoten Höhenuntershiedzwishen
rehtem und linkem Nahfolgerbaumniht
gröÿer als Eins
Beispiel:
5
1
3 1 4 0
7 1 6 0 12 −
1
11 0
Balanefaktor: Dierenz sollstets
−
1,0 oder 1seinBeispiel:
4
8 −
1
5 1
3 0 7 −
1
6 0
12 − 1
9 0
Beispiel:
8 −
1
5 1 3 0
4
0
7 −
1
6
0
12 −
1
9 0
Beispiel:
8 −
1
5 1 3 1
4
0
7 −
1
6
0
12 −
1
9 0
Beispiel:
8 −
1
5
0
3 1 4 0
7 − 1 6 0
12 −
1
9 0
Beispiel:
8 −
1
5
0
3 1 4 0
7 − 1 6 0
12 −
1
9 0
Problem: Balanefaktorenkönnen denBereih
−
1, 0,1verlassen
Lösung: Rotationen
Beispiel:
6
2
1
1 0 4 0
3 0 5 0
Beispiel:
2
1
1 0 4 0
3 0 5 0
6 0
Beispiel:
2
1
1 0 4 0
3 0 5 1
6 0
Beispiel:
2
1
1 0 4 1
3 0 5 1
6 0
Beispiel:
2
2
1 0 4 1
3 0 5 1
6 0
Beispiel:
2 2 1
0
4
1
3 0 5 1
6 0
Beispiel:
4 0 2
0
1 0 3 0
5
1
6 0
Beispiel:
9 −
1
4
0
2 0
1 0 3 0
7 0 5 0
6 0 8 0
11
0
10 0 12 0
Beispiel:
9 −
1
4
0
2 0
1 0 3 0
7 0 5 1
6 0 8 0
11
0
10 0 12 0
Beispiel:
9 −
1
4
0
2 0
1 0 3 0
7 −
1
5 1 6 0
8 0 11
0
10 0 12 0
Beispiel:
9 −
1
4
1
2 0
1 0 3 0
7 −
1
5 1 6 0
8 0 11
0
10 0 12 0
Beispiel:
9 −
2
4
1
2 0
1 0 3 0
7 −
1
5 1 6 0
8 0 11
0
10 0 12 0
Beispiel:
9 −
2
4 1 2 0
1
0
3
0
7 −
1
5
1
6 0 8
0
11 0
10 0 12 0
Beispiel:
9 −
2
7 −
2
4 0 2
0
1 0 3 0
5
1
6 0 8 0
11 0
10 0 12 0
Beispiel:
7 0 4
0
2 0
1 0 3 0
5 1 6 0
9
1
8 0 11 0
10 0 12 0
1. Sofern noh nihtvorhanden, fügedas neueElement alsBlatt
so ein,dassdie Suhbaumeigenshaft erfülltist,und setze
dessenBalanefaktorauf 0.
1. Sofern noh nihtvorhanden, fügedas neueElement alsBlatt
so ein,dassdie Suhbaumeigenshaft erfülltist,und setze
dessenBalanefaktorauf 0.
2. Fallsnoh nihtan derWurzel desBaumes,gehezum
Vorgängerknoten.
1. Sofern noh nihtvorhanden, fügedas neueElement alsBlatt
so ein,dassdie Suhbaumeigenshaft erfülltist,und setze
dessenBalanefaktorauf 0.
2. Fallsnoh nihtan derWurzel desBaumes,gehezum
Vorgängerknoten. Dort,falls
2.1 auslinkemNahfolgerbaumkommend:
1. Sofern noh nihtvorhanden, fügedas neueElement alsBlatt
so ein,dassdie Suhbaumeigenshaft erfülltist,und setze
dessenBalanefaktorauf 0.
2. Fallsnoh nihtan derWurzel desBaumes,gehezum
Vorgängerknoten. Dort,falls
2.1 auslinkemNahfolgerbaumkommend:
2.1.1 wennBalanefaktorgleih1,dannauf0setzenundAbbruh