Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Полезная методичка

.pdf
Скачиваний:
89
Добавлен:
01.04.2014
Размер:
1.09 Mб
Скачать

У ля м р о с корн м 24 и списк list . Поскольку список list ïóñò, îï ð öèÿ decrease_key(i; value; H) ê í÷è ò ð îòó.

Им м кучу Фи он ччи, получ нную р ульт т ыполн ния оп р ции decrease_key(i; value; H) :

 

 

 

 

QkmPP

 

 

 

 

 

 

m

 

m

 

 

 

2

Pi

 

 

 

 

 

 

6

 

 

13

 

 

 

 

 

P

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

CO

Q

Q

PP

P

 

 

 

 

 

 

 

 

 

 

 

C

 

 

 

PPP3

m15 m

 

 

710 MBm14

m18 AKm

 

 

 

 

B

 

 

 

A

 

 

 

 

oS

 

 

 

 

B

 

 

 

A

 

 

 

 

 

 

m

m

 

m

 

S

 

 

11

 

12

 

20

 

m m m

 

 

 

 

 

 

 

 

 

 

 

5

 

7

8

 

 

Óïð í íè .

Ð ëè î òü îï ð öèè:

delete(i; H) ;

increase_key(i; value; H);

131

à ë 5

ПОИСКОВ Е ДЕРЕВ

5.1.БИНАРН Е ПОИСКОВ Е ДЕРЕВ

Бин рно поиско о р о это ин рно р о, которо ор-ни о но т ким о р ом, что ля к ой ршины v спр - ли о ут р ни , что с ключи л ом по р ршины v м ньш ключ ршины v , с ключи пр ом по р ольш ключ ршины v ( поиско ом р н т ух ршин с о ин - ко ыми ключ ыми н ч ниями).

Бин рны поиско ы р ья ч сто исполь уются ля пр ст - л ния нных, ля которых осно ными оп р циями я ляются: поиск по ключу (поиск м ксим льно о, миним льно о эл м нто ), о-

л ни эл м нт с нным ключом, у л ни эл м нт с н- ным ключом.

При м р ли цию о ых оп р ций н ин рными поиско ыми р ьями.

Тру о мкость ыполн ния этих оп р ций у т ис ть от ы- соты р h . Если ин рно поиско о р о ытянуто лин й- ный список, то h = n , n колич ст о ршин р . Если

ин рно поиско о р о я ля тся с л нсиро нным, то h =

=log2 n .

Âк ч ст структуры нных ля пр ст л ния р у м

исполь о ть списко ую структуру:

type

search_tree =" tree_node; tree_node=record

element : type_el; left : search_tree; right : search_tree;

end;

132

Б о ы оп р ции н ин рными поиско ыми р ьями

Поиск эл м нт по нному ключу x

Д нн я оп р ция мо т ыть р ли о н сл ующ й функци й.

function find(x:type_el;T :search _ tree):search_tree; begin

if T = nil then find:=nil else

if x < T " :element then find:=find(x; T " :left) else

if x > T " :element then find:=find(x; T " :right) else find := T;

end;

Сл у т отм тить, что поиск миним льно о (м ксим льно о) эл м нт я ля тся ч стным случ м при нной ыш про р м- мы. Миним льный (м ксим льный) эл м нт ин рно о поиско о ор соот тст у т ключ ому н ч нию с мой л ой (пр ой)ршины р . Ни при о ится функция н хо ния эл м нт с миним льным ключ ым н ч ни м.

function find_min(T:search _ tree):search_tree; begin

if T = nil then find_min:=nil else

ifelseT " :left = nil then find_min:=T find_min:=find_min(T " :left)

end;

Тру о мкость проц уры поиск эл м нт с ключом x ñòü

O(h) .

До л ни эл м нт с ключом x

Д нную проц уру ч сто н ы ют поиском по р у с ключ - ни м, т к к к ля то о, что ы о ить н который эл м нт x ,

133

н о хо имо сн ч л опр лить о м стополо ни р . Еслиршин с ключ ым н ч ни м x у сущ ст у т, то о л ни эл м нт н прои о ится, т к к к ин рном поиско ом р

ключ ы н ч ния с х ршин ол ны ыть р личны. При м про р ммную р ли цию проц уры о л ния эл -

м нт с ключом x ин рно поиско о р о.

procedure insert(x:type_el;T :search _ tree); begin

if T = nil then

{

new(T);

T" :left := nil;

T" :right := nil;

T" :element := x;

}

else

if x < T " :element then insert(x; T " :left) else

if x > T " :element then insert(x; T " :right) end;

Тру о мкость проц уры поиск по р у с ключ ни м ху ш м случ сть O(h) .

Д нн я проц ур мо т ыть исполь о н ля постро ния поиско о о р (н о хо имо n р ы ы ть эту проц уруля к о о эл м нт и посл о т льности поступ ющих н хо ключ й). Отм тим, что поиско о р о, постро нно нной про- ц урой, о щ м случ н я ля тся с л нсиро нным. Тру о м- кость постро ния ин рно о поиско о о р сть O(nh) .

Опис нн я ыш проц ур мо т ыть т к прим н н ля сортиро ки посл о т льности и n ключ й. Для это о н о хо-имо построить ля посл о т льности поступ ющих ключ й и- н рно поиско о р о и со ршить о нутр нний о хо . Тру-о мкость л оритм сортиро ки посл о т льности ключ й сть O(nh) . Н сомн нно, что сущ ст уют лучши л оритмы сортиро - ки, но сли ч тр у тся ыполнять поиск и сортиро ку, то лучш р ком н у тся исполь о ть поиск по р у с ключ ни м.

134

У л ни эл м нт с нным ключом x

procedure delete(x:type_el;var T:search _ tree); var tmp : search_tree;

begin

if T = nil then {error(element not found)}; else

{ if x < T " :element then delete(x; T " :left) else

if x > T " :element then delete(x; T " :right) else {found the element to be delete}

{

if T " :left = nil then { only a right child}

{ tmp := T ; T := T " :right; dispose(tmp); } else

if T " :right = nil then { only a left child} { tmp := T ; T := T " :left; dispose(tmp); }

else { 2 children. Replace with smallest in right subtree. } { tmp :=find_min(T " :right);

T " :element := tmp " :element; delete(T " :element; T " :right);

}

}

}

end;

Проц ур у л ния эл м нт сн ч л опр ля т ршину - р v ñ êëþ÷ ûì í ÷ íè ì key(v) = x . Если н й нн я р- шин им т н ол о но о сын , то у л ни и р прои -о ится оч и ным о р ом (к к это тр иционно ыполня тся списко ой структур , ко ля у ля мо о эл м нт и ст н пр -ы ущий и сл ующий эл м нты). Тру ности с у л ни м о ни- к ют ситу ции, ко у у ля мой ршины v ñûí .  ýòîì ñëó÷ êëþ÷ î í ÷ íè x ршины v ну но м нить ли о н м ксим льный ключ ( key(wl) ) л ом по р ля ршины v , ли о н миним льным ключ ( key(wr) ) ïð îì ïî ð ëÿ ð- øèíû v , т м происхо ит у л ни соот тст ующ й ршины ( wl èëè wr ). Î÷ è íî, ÷òî ê ÿ è óê ííûõ ðøèí ( wl èëè wr ), èì ò í îë î íî î ñûí .

135

Тру о мкость проц уры у л ния эл м нт с нным клю- чом сть O(h) .

Н рис.5.1.1. пок ны случ я у л ния. В п р ом случ у ля тся ршин с ключом 4, котор я им т только о но о сын ;о тором случ у ля тся ршин с ключом 2, котор я им тух сыно й (у ля мы ршины ы л ны).

 

 

 

 

 

 

 

 

 

 

 

6

 

 

 

6

 

 

 

 

 

 

 

 

 

 

Æ

 

 

=

 

 

@

 

 

 

 

 

 

 

 

 

 

 

Æ

 

 

 

 

 

 

 

Q

Q

 

 

 

 

 

R@8

 

 

 

 

 

sQ 8

 

 

 

 

 

 

 

2Æ

 

Æ

2

 

@

 

 

 

 

Æ

@

4

1

ÆB

 

 

 

 

 

 

B

 

 

4

 

 

/

@

 

 

 

 

=

 

B

@R

 

 

 

 

R@

 

 

 

 

 

 

B aÆ

 

 

1

 

 

Æ

 

Æ

 

 

 

Æ

 

 

 

 

 

 

a

 

 

 

 

 

3

 

 

 

 

 

 

BN3

 

 

 

 

Æ

 

 

 

 

 

 

Æ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

6

 

 

 

 

 

 

 

 

6

 

 

 

 

ÆH

 

 

 

 

 

 

 

ÆQ

 

 

=

 

 

H

8

 

 

 

 

 

Q

 

 

 

 

 

jH

 

 

 

 

 

 

 

Q

 

 

 

 

 

 

H

 

 

 

 

 

 

sQ

8

2

 

 

 

 

 

 

 

 

 

 

 

 

 

Æ

3

 

 

 

 

 

 

 

Z

 

 

 

 

Q

 

 

 

 

 

 

 

 

 

 

 

 

 

Æ

 

 

 

Æ

Æ

 

 

 

1

 

Q

 

 

 

1

 

4

 

@ 4

 

 

 

Z~

 

 

 

=

 

 

 

 

sQ

 

 

 

 

Æ= Æ

 

Æ Æ

 

 

3

 

 

 

 

 

@

 

 

 

 

 

 

 

 

 

!ÆA

 

 

 

 

Æ

 

 

 

 

 

 

 

 

Z

 

 

 

 

 

 

!

 

 

 

 

 

~Z

 

 

 

UA

 

 

 

 

 

Z

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3.5Æ

 

 

 

3.5Æ

 

 

Рис. 5.1.1.: У л ни ин рном поиско ом р ( пр ом по -р ).

К к ыло по ч ркнуто ыш , тру о мкость р ли ции с х -о ых оп р ций н ин рными поиско ыми р ьями исит от

136

ысоты р h . Â õó ø ì ñëó÷ h = O(n) . Поэтому осо ый инт р с ы ы ют т ки ин ри нты (с ойст ) поиско ых р -ь , которы о сп чи ют ысоту р ь h = O(log2 n) , и при этом тру о мкость по р ния этих ин ри нто н пр ыш т O(log2 n) . Д л у ут при ны н которы ин ри нты поиско-ых р ь .

5.2.СБАЛАНСИРОВАНН Е ДЕРЕВ

О ним и ин ри нто с л нсиро нных поиско ых р ь я - ля тся с ойст о с л нсиро нности по ысот .

5.2.1ÀÂË ð üÿ

АВЛ р о это ин рно поиско о р о, у которо о ля к -ой ршины v ысот по р , корн м которо о я ля тся л ый сын ршины v , отлич тся н ол ч м н иницу от ысоты по р , корн м которо о я ля тся пр ый сын ршины v .

Т ор м 5.2.1. Пусть n число нутр нних ршин АВЛр , h î ûñîò . Òî ñïð ëè û ñë óþùè í ð í- ñò

log(n + 1) h < 1:4404 log(n + 2) 0:328:

(5.1)

Äîê ò ëüñò î.

Ò ê ê ê ÀÂË ð î ÿ ëÿ òñÿ èí ðíûì ð îì, òî îíî í ìî-ò ñî ð òü îë , ÷ ì 2h 1 нутр нних ршин. Поэтому

n 2h 1; h log(n + 1)

и мы получ м л ую ч сть н р нст (5.1).

Опр лим т п рь миним льно колич ст о нутр нних ршинля АВЛ р ысоты h . Î î í ÷èì ÷ ð Th АВЛ р оысоты h с миним льным числом нутр нних ршин Н рис.5.2.2. пр ст л ны р ья T0; T1; T2; T3: Т к к к принцип постро нияр ь н помин т постро ни чис л Фи он ччи, то т ки р -ья о ычно н ы ют р ьями Фи он ччи.

Пусть Nh колич ст о нутр нних ршин р Th . Òî

Nh+1 = Nh 1 + Nh + 1:

137

 

 

 

 

 

 

 

Æ

Æ

 

 

Æ@

 

 

 

 

 

 

@

 

Æ

 

 

 

%% Æ

Æ

 

 

 

 

 

 

 

 

 

T0

T1

 

 

Æ

T2

 

 

 

 

 

 

 

 

 

Æ

 

 

 

 

 

 

e

 

 

 

 

 

 

 

e

 

 

 

 

 

ÆA

Æ

 

 

 

 

A

 

 

 

 

 

 

 

 

 

 

 

Æ ÆÆ

Æ T3

Рис. 5.2.2.: Д р ья Фи он ччи ысоты 0,1,2,3.

Ñ ë ì ì íó ï ð ì ííîé Fi0 = Ni + 1 , òî ûð íè

F

0

 

 

= F 0

+ F 0

 

 

 

 

 

h+1

 

 

 

 

 

 

h

 

 

 

 

h 1

 

 

 

ñîîò òñò ó ò ÷èñë ì Ôè îí ÷÷è.

 

 

 

 

 

 

 

 

 

 

Н помним, что сли Fh h -о число Фи он ччи, то

 

 

 

 

 

 

 

h

 

 

 

^h

 

 

 

 

 

 

Fh

=

 

 

 

 

 

;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

p5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1 +p

 

 

 

 

 

 

 

 

 

 

 

 

p

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

=

5

;

^

 

 

 

1

5

:

 

2

 

 

 

=

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

 

 

 

Í é ì ñîîò òñò è ì ó

 

 

Fi

 

 

è

 

Fi0

. Ò ê ê ê Fi = Fj0 ïðè i =

= 2 + j , òî F2+h = F 0 è

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

h

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

h+2

 

 

 

^h+2

 

 

 

F0

=

 

 

 

 

 

 

 

 

 

 

 

 

 

:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

p5

 

 

 

 

 

p5

 

 

h

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

138

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

h

 

 

 

2

 

 

 

 

 

 

 

 

 

 

Поэтому, силу то о, что Nh = F 0

 

 

1 è

 

1 p5

 

< 1 , èì ì

 

 

 

1+p

 

 

 

 

 

h+2

 

 

1 p

 

 

 

 

h+2

 

 

 

 

1+p

 

 

 

 

 

h+2

 

5

 

 

 

 

 

5

 

 

 

 

5

 

 

 

 

n N = F 0 1 2

 

 

 

 

2

 

 

 

 

 

1

 

 

 

2

 

 

 

 

 

2:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

h h

p

 

 

 

 

p

 

 

 

 

p

 

 

 

 

5

 

5

 

5

 

Ло рифмируя получ нно ыш ыр ни , получ м пр ую ч сть н р нст 5.1.

2

È ò îð ìû ñë ó ò, ÷òî ëÿ ÀÂË- ð ñ n ðøèí ìè ûñîò h = O(log2 n) . Поэтому с о ы оп р ций мо но ыполнить

ð ìÿ O(log2 n) . Т к к к р ульт т ыполн ния о ых оп р - ций ин ри нт (с л нсиро нность по ысот м) мо т н рушить-

ся, то н о хо имо им ть проц уры, о сп чи ющи по р ни ин ри нт . Прич м тру о мкость этих проц ур н ол н пр -осхо ить тру о мкости о ых оп р ций.

Á î û îï ð öèè ñ ÀÂË - ð üÿìè

1.До л ни ршины с нным ключом

Прохо им по пути поиск (см. поиск эл м нт ин рном поиско ом р ) пок н опр лим м сто о л ния ршины с нным ключом.

До ля м но ую ршину и опр ля м прои ошл ли оль пути поиск р л нсиро к . Пусть k2 ршин м кси- м льной лу ины, ля которой н рушился ин ри нт. Л ко про рить, что с ршины, ля которых н рушился ин - ри нт, л т н пути от корня о ршины k2 . òî ñ ÿ íî

ñт м, что поиск м стополо ния ля о ля мой ршины прохо ил им нно по этой ц почк , и только по этой ц почкысоты по р ь мо ли у личиться н 1.

Если прои ошл р л нсиро к , то ыполнить проц уру,осст н ли ющую н руш нный ин ри нт. В льн йш му т пок но, что ост точно ыполн нить проц уру, осст н ли ющую н руш нный ин ри нт, только ля ршины k2 , ò ê ê ê ýòî ïðè ò ê òîìó, ÷òî ëÿ ñ õ ðøèí ó ò

139

ыполн но с ойст о с л нсиро нности по ысот м. Проц -ур о л ния эл м нт рш н .

2.У л ни ршины с нным ключом

Осущ ст ля м поиск и у л ни ршины с нным клю- чом. Д нн я проц ур н ло ичн проц ур у л ния ляин рно о поиско о о р (р ссм три ются ри нты: у ля мый эл м нт им т н ол о но о сын ; у ля мый эл м нт им т ух сыно й).

Опр ля м прои ошл ли оль пути поиск р л нсиро - к . Н руш ни ин ри нт мо ло прои ойти только ля о нойршины н пути поиск , т к к к ысоты только этих ршин мо ли ум ньшиться н 1. Сл у т отм тить, что сли ысотршины ум ньшил сь н 1, то ля н ыполня тся с ойст о с л нсиро нности по ысот м. Пусть k2 ршин , ля которой н рушился ин ри нт ( ысот ршины k2 посл ы- полн ния проц уры у л ния н и м нил сь, т.к. н руш ни ин ри нт ля н прои ошло только при у л нии ршины и по р ршины k2 м ньш й ысоты).

Если прои ошл р л нсиро к , то ыполнить проц уру,осст н ли ющую н руш нный ин ри нт, ля ршины k2 ( z от ц ршины). Посл ыполн ния л нсиро ки ля

ршины k2 , мо л прои ойти р л нсиро к ля ршины н пути от корня о ршины z . Н хо им опять ршину н м ксим льной лу ин , ля которой прои ошло н руш ни ин ри нт и ыполня м л нсиро ку ля н .

Р ссмотрим р личны ситу ции р л нсиро ки и пок м к ки пр о р о ния осст но ят тр у мый ин ри нт.

Проц уры осст но л ния ин ри нт посл ыполн ния оп р ции о л ния но о о эл м нт

1.Пусть k2 ршин м ксим льной лу ины ля которой про- и ошл р л нсиро к посл ыполн ния оп р ции о л - ния но о о эл м нт ( z от ц ршины k2 ) и ля которой:

140

Соседние файлы в предмете Структуры и алгоритмы обработки данных