Полезная методичка
.pdfУ ля м р о с корн м 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
