ASD w10%2Cw11

background image

Notatki do wyk lad´

ow 10 i 11

28 kwiecie´

n, 5 maj 2011

Konstruowanie drzewa BST

z listy

– jako korze´

n drzewa we´

z pierwszy element listy

wstaw kolejno ka˙zdy element listy jako nowy li´

c

(procedura TREE-INSERT)

– dla nowego elementu miejsce na li´

c w drzewie znajduje

sie

,

poprzez wielokrotne por´

ownanie go z we

,

z lami, do kt´

orych

dochodzimy poruszaja

,

c sie

,

w lewo lub w prawo zale˙znie od

wyniku por´

ownania

Przechodzenie drzewa metoda

,

inorder

INORDRE-TREE-WALK(x)

if x

̸=NIL

then INORDER-TREE-WALK(lef t[x])

wypisz key[x]
INORDRE-TREE-WALK(right[x])

Wywo lanie INORDER-TREE-WALK(root[T ]) powoduje
wypisanie wszystkich element´

ow drzewa wyszukiwa´

n binarnych

Typeset by

AMS-TEX

1

background image

2

Wyszukiwanie

Wyszukujemy w drzewie BST we

,

z la, kt´

ory zawiera dany klucz.

Dane: wska´

znik do korzenia oraz klucz k

Wynik: wska´

znik do we

,

z la zawieraja

,

cego klucz k lub NIL, gdy taki

we

,

ze l nie istnieje.

Algorytm:

– rozpocznij wyszukiwanie w korzeniu i schod´

z po ´

scie˙zce

w d´

o l drzewa

– dla ka˙zdego we

,

z la x por´

ownaj klucz k z warto´

scia

,

key[x]

– je˙zeli warto´

sci sa

,

owne, to wyszukiwanie zako´

nczy lo sie

,

sukcesem, je˙zeli x = NIL, to we

,

ze l o takim kluczu nie istnieje

– je˙zeli k < key[x], to przeszukuj lewe poddrzewo we

,

z la x,

je˙zeli natomiast k > key[x], to przeszukuj prawe poddrzewo

TREE-SEARCH(x, k)

if x =NIL or key[x] = k

then return x

if k < key[x]

then TREE-SEARCH(lef t[x], k)
else TREE-SEARCH(right[x], k)

ITERATIVE-TREE-SEARCH(x, k)

while x

̸=NIL and k ̸= key[x]

do if k < key[x]

then x

← left[x]

else x

← right[x]

return x

background image

3

Minimum i maksimum

Procedura TREE-MINIMUM wyznacza wska´

znik do we

,

z la

o najmniejszym kluczu w poddrzewie o korzeniu w we

,

´

zle x

TREE-MINIMUM(x)

while lef t[x]

̸=NIL

do x

← left[x]

return x

Procedura TREE-MAXIMUM wyznacza wska´

znik do

maksymalnego elementu poddrzewa o korzeniu w we

,

´

zle x

TREE-MAXIMUM(x)

while right[x]

̸=NIL

do x

← right[x]

return x

Naste

,

pnik

– procedura TREE-SUCCESSOR wyznacza naste

,

pnika danego

we

,

z la w drzewie BST, tj. naste

,

pnego we

,

z la odwiedzanego

w czasie przechodzenia drzewa w porza

,

dku inorder

– je˙zeli wszystkie klucze sa

,

o ˙zne, to naste

,

pnikiem we

,

z la x

jest we

,

ze l o najmniejszym kluczu wie

,

kszym ni˙z key[x]

– je˙zeli x ma najwie

,

kszy klucz w drzewie, to zostaje wyznaczona

warto´

c NIL

background image

4

Algorytm:

– je˙zeli prawe poddrzewo we

,

z la x jest niepuste, to naste

,

pnikiem

x jest najbardziej na lewo po lo˙zony we

,

ze l w prawym

poddrzewie (we

,

ze l o najmniejszym kluczu w tym poddrzewie);

zastosuj procedure

,

TREE-MINIMUM(right[x])

– je˙zeli we

,

ze l x nie ma prawego poddrzewa, to wykorzystujemy

naste

,

puja

,

ca

,

w lasno´

c drzewa BST:

W lasno´

c: Niech T be

,

dzie drzewem wyszukiwa´

n binarnych,

w kt´

orym wszystkie klucze sa

,

o˙zne. Je˙zeli prawe poddrzewo

we

,

z la x z T jest puste i y jest jego naste

,

pnikiem, to y jest

najni˙zszym przodkiem x, kt´

orego lewy syn jest tak˙ze przodkiem

x

Zatem nale˙zy przej´

c w g´

ore

,

drzewa a˙z do napotkania we

,

z la,

kt´

ory jest lewym synem swego ojca; ten ojciec jest naste

,

pnikiem

we

,

z la x

TREE-SUCCESSOR(x)

if right[x]

̸=NIL

then return TREE-MINIMUM(right[x])

y

← p[x]

while y

̸=NIL and x = right[y]

do x

← y

y

← p[y]

return y

background image

5

Wstawianie

Nowa

,

warto´

c v wstawiamy do drzewa T za pomoca

,

procedury

TREE-INSERT. Do procedury przekazujemy jako argument
we

,

ze l z, w kt´

orym key[z] = v, lef t[z] =NIL i right[z] =NIL

Algorytm:

– rozpocznij od korzenia przechodza

,

c po ´

scie˙zce w d´

o l drzewa;

wska´

znik x przebiega po ´

scie˙zce, a zmienna y zawiera wskazanie

na ojca x

– przesuwaj sie

,

w d´

o l a˙z x przyjmie warto´

c NIL

– wstaw z do drzewa, przypisuja

,

c w la´

sciwe warto´

sci

odpowiednim wska´

znikom

TREE-INSERT(T, z)

y

NIL

x

← root[T ]

while x

̸= NIL

do y

← x

if key[z] < key[x]

then x

← left[x]

else x

← right[x]

p[z]

← y

if y = NIL

then root[T ]

← z

else if key[z] < key[y]

then lef t[y]

← z

else right[y]

← z

background image

6

Usuwanie

Procedura TREE-DELETE usuwa zadany we

,

ze l z.

Argumentem procedury jest wska´

znik do z.

To, kt´

ory we

,

ze l zostanie faktycznie usunie

,

ty z BST zale˙zy od

tego ilu syn´

ow ma z.

Algorytm:

– je˙zeli z nie ma syn´

ow, to zasta

,

p wska´

znik do z w jego ojcu

p[z] warto´

scia

,

NIL

– je˙zeli z ma jednego syna, to ustal wska´

znik mie

,

dzy jego ojcem

a tym synem

– je˙zeli z ma dw´

och syn´

ow, to usu´

n naste

,

pnik y we

,

z la z i zasta

,

p

zawarto´

c z zawarto´

scia

,

y

TREE-DELETE(T, z)

if lef t[z]=NIL or right[z]=NIL

then y

← z

else y

TREE-SUCCESSOR(z)

if lef t[y]

̸=NIL

then x

← left[y]

else x

← right[y]

if x

̸= NIL

then p[x]

← p[y]

if p[y] =NIL

then root[T ]

← x

else if y = lef t[p[y]]

then lef t[p[y]]

← x

else right[p[y]]

← x

if y

̸= z

then key[z]

← key[y]

skopiuj zawarto´

c pozosta lych p´

ol z y do z


Wyszukiwarka

Podobne podstrony:
nw asd w10
nowoczesne koncepcje zarządzania W10, W11
UST 12 12 12 W10 20 12 12 W11
W11 Scinanie czyste i techniczne
W11 mod
W11 analiza ekonomiczna
ASD od z Sawanta II Wykład17 6
spoleczna w10
W10
W10 Przetw A Cmin
W10
Filozofia W10 Etyka Zagadnienie norm lepsza wersja2 0bezKanta
W10 Ja Spoleczne
W10 Wpływ różnych metod obróbki wstępnej mięsa

więcej podobnych podstron