Полезная методичка
.pdf
d-êó÷è
d -куч это полно d - р о, ля которо о ыполня тся осно но с ойст о кучи (ин ри нт 1). При d = 2 èì ì èí ð- íóþ êó÷ó.
Бу м исполь о ть сл ующи проц уры, н о хо имы ля р ли ции осно ных оп р ций структур нных d-куч .
Ïðîö óð Swap(i; j) м ня т м ст ми ключи ршин i è j . Í ïðèì ð, ëÿ d-êó÷è ( d = 2 ), ïð ñò ë ííîé ì ññè îì
i |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
|
|
|
|
|
|
|
|
|
dHeap[i] |
5 |
6 |
7 |
4 |
8 |
11 |
12 |
9 |
ïðèì íèì ïðîö óðó |
swap(4; 6) |
(ñì. ðèñ.4.5.12.). |
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
,5 |
Æe |
|
, |
5Æe |
|
||
|
, |
|
|
|
, |
|
e |
|
|
6 e |
|
4 |
|||||
|
ÆJ |
7 l |
|
ÆJ |
7 l |
|
||
|
|
|
Æ |
|
|
|
Æ |
|
|
|
|
l |
|
|
|
l |
|
J J |
||||||||
4 |
8 |
11 |
12 |
6 |
8 |
|
11 |
12 |
Æ ÆÆ Æ Æ ÆÆ Æ |
||
9 |
9 |
|
Æ |
||
Æ |
||
|
||
Ðèñ. 4.5.12.: Ïðèì ð d-êó÷è ï ð ï ð ñò íî êîé swap(4; 6) è ïîñë ïðî ííîé ï ð ñò íî êè.
Ïñ îêî ïðîö óðû Swap(i; j) :
procedure Swap(i; j); begin
k := key[i]; key[i] := key[j]; key[j] := k; end;
101
Тру о мкость проц уры Swap(i; j) ñòü O(1) .
 ïðîö ññ ð îòû í d-êó÷ é ÷ ñòî òð ó òñÿ ì íÿòü í ÷ íèÿ êëþ÷ é, ï ð ñò ëÿòü ýë ì íòû. Ïðè ýòîì ìî ò ð ì ííî í ðó- ø òüñÿ îñíî íî ñ îéñò î êó÷è (èí ðè íò 1).
Пр поло им, что мы ум ньшили н ч ни ключ i -îé ð- øèíû key[i] и и пусть j = P red[i] . То мо ут о никнуть
ñëó÷ ÿ:
1.key[j] key[i] , т. . ин ри нт 1 ыполн н;
2.key[j] > key[i] , т. . ин ри нт 1 н руш н и мы ол ны оосст но ить.
ту чу ыполня т проц ур SiftUp(i) :
procedure SiftUp(i); begin
while (i =6 root) and (key[i] < key[P red[i]]) do
{
Swap(i; P red[i]); i := P red[i];
}
end;
Ïðîö óð SiftUp(i) им т тру о мкость O(logd n) , ò.ê. ïîñë ê îé èò ð öèè öèêë óì íüø òñÿ ëó èí ó ë i , ñî ë ñíî ñ îéñò ó d ð , î í ÷ ëüí ÿ ëó èí O(logd n) .
Пр поло им л , что мы у личили ключ н которой ршины i . Âî ìî íû ñëó÷ ÿ:
1.ñëè ïîñë è ì í íèÿ key[i] key[j]; 8j 2 Succ(i) , то ин ри-нт 1 ыполн н;
2.key[i] > key[j]; 8j 2 Succ(i) , òî í î õî èìî îññò íî èòü îñíî íî ñ îéñò î êó÷è (èí ðè íò 1). òî ìî íî ñ ë òü, ïðèì íè ïðîö óðó SiftDown(i) :
102
procedure SiftDown(i); begin
while (i 6= leaf) and (key[i] > key[minchild(i)]) do
{
Swap(i; minchild(i)); i := minchild(i);
}
end;
Ïðîö óð SiftDown(i) òð ó ò O(d logd n) оп р ций, т.к. н поиск лист тр чи тся O(logd n) оп р ций, ычисл ни minchild(i) òð ó ò O(d) îï ð öèé.
Ð ëè öèÿ îñíî íûõ îï ð öèé d-êó÷
Пок м, что ля d-кучи осно ны оп р ции мо ут ыть р ли-о ны с помощью проц ур SiftUp(i) , SiftDown(i) , Swap(i; j) . Осно ными оп р циями н d-куч й я ляются сл ующи :
create(dHeap) со ть пустую кучу;
find_min(i; dHeap) í éòè ýë ì íò i с миним льным клю- чом куч ;
|
insert(i; dHeap) ñò èòü ýë ì íò i êó÷ó; |
|
delete_min(i; dHeap) ó ëèòü ýë ì íò i с миним льным |
|
ключом и кучи. |
1. |
Н хо ни ршины с миним льным ключом |
|
find_min(i; dHeap): |
|
т оп р ция н хо ит ршину с миним льным ключом. Он |
|
н хо ится корн , поскольку d-куч пр ст л н и |
|
м сси , то миним льный эл м нт н хо ится по иции с ин- |
|
ксом 0. Для н хо ния ршины с миним льным ключ - |
|
ым н ч ни м н о хо имо ыполнить O(1) îï ð öèé í è- |
|
õó ø ì ñëó÷ . |
2. |
Âñò ê ýë ì íò d-êó÷ó |
|
insert(i; dHeap): |
|
103 |
т оп р ция осущ ст ля т ст ку но ой ршины i d- кучу пут м о л ния но ой ршины кон ц м сси
dHeap[i]; i = 0; ; last;
last ин кс посл н о эл м нт п р ст кой но ойршины i d-êó÷ó, ò. . dHeap[last] := key[i] , ïîñë ÷ î last н о у личить н 1. Поскольку о л ни но ой р- шины мо т н рушить ин ри нт 1, то осст н ли м о с помощью проц уры SiftUp(i) .
procedure insert(i; dHeap) begin
dHeap[last] := key[i]; last := last + 1;
SiftUp(last); end;
Тру о мкость этой оп р ции O(logd n) .
3. У л ни миним льно о эл м нт и d-кучи. Оп р ция delete_min(i; dHeap):
У л ни у м прои о ить сл ующим о р ом: м ня м п р ый эл м нт d-кучи (миним льный эл м нт) с посл ним и ум ньш м р м рность d-кучи н 1.
Т к я м н мо т н рушить ин ри нт 1. Для осст но л - ния ин ри нт 1, н чин я с корн ой ршины, и мся поинст нному пути о н которой ршины k , ля которой ин ри нт 1 ыполн н. то прои о ится с помощью проц -уры SiftDown(i) , i = root . Пс око проц уры у л ния миним льно о эл м нт и d-кучи:
procedure delete_min(i; dHeap) begin
Swap(root; last); last := last 1; SiftDown(root); end;
104
Тру о мкость этой проц уры O(logd n) .
Н ря у с осно ными оп р циями d -êó÷ ÷ ñòî ð ññì òðè - þòñÿ îï ð öèè:
delete(i; dHeap) у лить прои ольный эл м нт i è êó÷è;
decrease_key(i; value; dHeap) ум ньшить ключ эл м нт i
í í ÷ íè value ;
increase_key(i; value; dHeap) у личить ключ эл м нт i
í í ÷ íè value .
1.У л ни прои ольно о эл м нт и кучи. Для это о н о õî-èìî í òü ð ñ (èí êñ) ýòî î ýë ì íò . Îï ð öèÿ
delete(i; dHeap)
у ля т и кучи прои ольный эл м нт, соот тст ующийршин i . Для у л ния поступ м сл ующим о р ом. Поло им key[i] := key[root] 1 . С помощью проц уры SiftUp(i) î ñï ÷è ì îñíî íî ñ îéñò î êó÷è. Ä ë ïðè- ì íèì îï ð öèþ delete_min(i; dHeap) ля у л ния и d- кучи эл м нт с миним льным ключом key[root] 1 .
2. Ум ньш ни ключ ршины i í í ÷ íè value decrease_key(i; value; dHeap):
Если посл ыполн ния оп р ции н руш н ин ри нт 1, тоосст н ли м о с помощью проц уры SiftUp(i) .
3. У лич ни ключ ршины i í í ÷ íè value increase_key(i; value; dHeap):
У личи м н ч ни ключ ршины i í ííî í ÷ - íè value è ñëè í ðóø í èí ðè íò 1, òî ïðèì íÿ ì ïðîö -óðó SiftDown(i) .
Т ор м 4.5.2. При исполь о нии структуры нных d-кучи тр у тся O(1) р м ни ля ыполн ния оп р ции find_min , O(logd n) р м ни ля ыполн ния оп р ций insert; decrease_key
èO(d logd n) р м ни ля ыполн ния оп р ций delete_min; delete
èincrease_key .
105
4.5.3Биноми льны кучи
Биноми льный л с это с м йст о иноми льных р ь . Биноми льно р ы ысоты h = 0 состоит и о ной инст ннойршины; иноми льно р о Bk ысоты h = k о р у тся присо ин ни м иноми льно о р ысоты k 1 к корню ру о оиноми льно о р ысоты k 1 . Ни пок ны иноми льныр ья B0; B1; B2; B3 è B4 .
|
|
|
|
|
|
|
|
|
|
|
|
B1 |
|
|
|
|
|
|
|
|
|||||||||
B0 |
|
|
|
|
|
Æ |
|
|
Æ |
|
|
|
|
|
|
|
|
|
|
||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
J |
|
|
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Æ |
|
|
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
B2 |
|
|
|
|
|
|
|
|
|
B3 |
|
|
|
|
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||
|
|
|
|
|
|
|
|
aa |
|
||||||||||||||||||||
|
|
|
|
hh |
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
a |
|
|
|
|
Æ |
|
|
|
|
||||
|
|
|
Æ |
|
|
|
|
|
|
Æ |
|
|
|
|
|
|
a |
|
|
|
|
||||||||
|
|
|
|
J |
|
|
Æ |
|
|
a |
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
J |
|
|
a |
|
|
|
|
Æ |
|
||||||||||||
|
|
|
|
|
|
|
J |
|
|
|
|
|
|
|
|
|
Æ |
|
J |
|
|||||||||
|
|
|
|
|
|
|
|
|
J |
|
Æ |
||||||||||||||||||
|
|
|
|
|
Æ |
Æ |
|
|
|
Æ |
|
|
Æ |
||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Æ |
|
|||||||||
|
|
|
|
|
|
|
|
B4 |
|
|
|
|
|
|
|
|
|
|
|||||||||||
|
b |
|
P |
|
|
|
|
|
|
|
|
|
|
|
H |
|
|
|
|
|
ÆA Q |
|
|
||||||
|
|
PP |
|
|
|
|
|
|
|
|
ÆA |
|
|
|
|
Q |
|
|
|
||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
H |
|
|
|
|
|
|
|
|
|
|
||||||
Æ P |
P |
|
|
|
|
|
|
|
|
A |
|
H |
A |
|
|
|
|||||||||||||
T b |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||
|
T |
|
|
P |
|
|
|
|
|
|
|
|
|
|
|
|
|
ÆJ |
|||||||||||
|
|
|
|
|
|
|
|
|
|
H |
|
|
|
|
|
|
|
|
|
|
Æ |
|
|
||||||
|
|
|
|
|
|
ÆL ÆH |
|
|
|
|
|
|
|
|
|
J |
|
|
|
|
|
J |
|
||||||
|
|
|
ÆL |
|
|
|
T |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Æ |
|
||||||
|
|
|
|
|
|
T |
H |
|
Æ |
|
|
|
|
|
|
||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
J |
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Æ |
|||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
Æ |
|
|
|
|
|
Æ |
|
|
||||||||
|
|
|
|
|
|
|
Æ ÆA |
|
|
|
|
|
|||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
A |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Æ
И рисунк и но, что иноми льно р о Bk состоит и корня,ля которо о сыно ьями я ляются р ья B0; B1; Bk 1 . Биноми льно р о ысоты k со р ит ро но 2k ðøèí.
106
Н ни " иноми льно р о"опр лил тот ф кт, что у лю-о о иноми льно о р ысоты k í ëó èí d í õî èòñÿ ðî - íî Ckd ðøèí, Ckd иноми льный коэффици нт:
(x+a)m = xm +Cm1 xm 1a+ +Cmk xm kak + +Cmm 1xam 1 +am;
Cmn = m (m 1) (m n + 1): 1 2 n
Ò ê ëÿ ð B4 , è î ð ííî î ûø : d = 1; C41 = 4;
d = 2; C42 = 6; d = 3; C43 = 4; d = 4; C44 = 1:
Лю я посл о т льность и n эл м нто мо т ыть пр - ст л н инст нным о р ом к к с м йст о иноми льных - р ь (н ол о но о р к ой ысоты).
Ïð ïîëî èì, ÷òî n = 13 , п р м это число оичную сист му счисл ния:
1 |
1 |
0 |
1 |
23 |
22 |
21 |
20 |
òî í ÷èò, ÷òî ð üÿ B0; B2; B3 |
присутст уют пр ст л нии, |
||
ð î B1 í ò. |
|
|
|
Н прим р, приорит тн я оч р ь и 6 эл м нто ( 6 = 01102 )
пр ст л н сл ующим н ором р ь : B1 |
è B2 . |
|
|||
B1 |
|
B2 |
|
|
|
|
|
|
|
24 |
|
12 P |
|
||||
16P |
|
||||
P |
|
P |
|
P |
|
Æ18 |
Æ21 |
|
P |
||
|
|
|
|
|
|
Æ |
|
Æ Æ65Æ |
|||
Биноми льн я куч это иноми льный л с, ля которо-о ыполня тся осно но с ойст о кучи (ин ри нт 1). Дополни- т льным с ойст ом (ин ри нтом 2) иноми льной кучи я ля т- ся тр о ни , что ы куч н ыло ух иноми льных р ь о ин ко ой ысоты.
107
Ïð ïîëî èì, ÷òî êó÷ ñî ð èò n ýë ì íòî , n 2m . Òî-
íí ÿ êó÷ ìî ò ûòü ïð ñò ë í í îðîì è í îë mиноми льных р ь (н ол о но о к ой ысоты).
Сл о т льно, колич ст о иноми льных р ь сть O(log n) , n колич ст о эл м нто куч .
Осно ны оп р ции с иноми льными куч ми
Поиск миним льно о эл м нт
т проц ур тр у т про рки корн ых н ч ний с х иноми-льных р ь кучи. Для эфф кти ной р ли ции нной про- ц уры н о хо имо, что ы структур нных, исполь у м я ля хр н ния иноми льной кучи, о сп чи л ыстрый оступ к кор- н ым н ч ниям с х иноми льных р ь (н прим р, корн -
ы ршины с х иноми льных р ь о ъ ин ны с я ный список). Т к к к колич ст о р ь поря к O(log n) , то тру о-мкость л оритм поиск миним льно о эл м нт сть O(log n) .
Слияни ух иноми льных куч
Слияни пр пол т получ ни и ух иноми льных куч H1 è H2 но ой иноми льной кучи H3 . Бу м пр пол ть, что мы по р и м ля к ой иноми льной кучи упоря оч нностьиноми льных р ь по их ысот м, что по олит ыполнить проц сс слияния ол эфф кти но.
Р ссмотрим проц сс слияния ух куч, пр ст л нных н рис.4.5.13..
Т к к к иноми льн я куч H2 со р ит р о ысоты 0, H1 í ò, òî î ëÿ ì ýòî ð î êó÷ó H3 .
Т к к к о иноми льны кучи H1 è H2 со р т р ьяысоты 1, то сли м эти р ья, пол я кор нь с ольшим корн ым н ч ни м о ним и сыно й корня с м ньшим кор- н ым н ч ни м. В р ульт т получ м иноми льно р -о ысоты h = 2 (см. рис.4.5.14.a)). Т ким о р ом, но я куч н у т им ть иноми льно о р ысоты 1.
Т к к к с йч с им тся три иноми льных р ысоты h = = 2 (ïî î íîìó H1 è H2 и получ нно н пр ы ущ м
108
|
|
|
n |
|
n |
|
|
|
||
|
|
16 |
|
|
|
12 ``` |
24 |
bn |
|
|
H1 : |
|
|
L |
|
|
S |
|
|
||
|
|
|
L |
|
|
S |
|
|
b |
|
|
|
|
18 |
n |
21 |
n |
b 65 |
n |
||
H2 : |
|
|
ln |
|
|
|
|
|
|
|
|
n |
|
|
n |
|
24 |
n |
|
||
13 |
|
14 |
|
|
|
23 ` |
|
|
|
|
|
|
|
|
|
|
`` |
|
|
|
|
|
|
|
l |
n |
e |
n |
bb |
n |
||
|
|
|
|
26 |
51 |
b65 |
||||
|
Ðèñ. 4.5.13.: |
|
эт п слияния), то о но и них мы пом щ м кучу H3 , |
|
ру их сли м и получ м р о ысоты h = 3 . |
|
Ò ê ê ê íè î í è êó÷ H1 è H2 н им т р ысоты h = |
|
3 , то то пом щ м получ нно р о кучу H3 è ðø ì |
|
проц сс слияния (см. рис. 4.5.14.b)). |
Для эфф кти но о ыполн ния проц уры слияния ух иноми-льных куч н о хо имо, что ы структур нных, р р от нн яля хр н ния иноми льной кучи, им л сл ующий и :
к я ршин со р ит информ цию о ысот ;
иноми льны р ья упоря оч ны по ысот м;
ê ÿ ðøèí èì ò óê ò ëü í ï ð î î ñûí (nil, ñëè ñûíî é í ò), óê ò ëè í ë î î è ïð î î ð ò ;
сыно ья к ой ршины пр ст л ны и ухс я но о списк и упоря оч ны по р м р м их по р ь ; ук т ль л о о р т п р о о сын сть посл ний сын.
Ñуч том р р от нной структуры нных, проц сс слияния ух
иноми льных р ь ыполня тся конст нтно р мя. Т.к. су- щ ст у т н ол log n иноми льных р ь , то тру о мкость проц уры слияния ух иноми льных куч сть O(log n) .
109
|
l |
|
|
|
|
|
|
|
|
14 P |
P 16 l |
|
|
|
|
|
|||
J |
|
|
|
|
|
|
|||
J |
|
T |
|
|
|
|
|
|
|
|
26 |
lT18 l |
|
|
|
|
|
||
|
|
a) |
|
|
|
|
|
|
|
|
l |
|
|
|
|
|
l |
||
|
|
P |
|
P |
|
||||
13 |
23 |
l |
12 |
|
l |
14 |
P |
||
|
|
|
TT P 24Al |
SSP24Jl |
|
||||
|
|
|
eeP 16Jl |
||||||
|
|
b) |
|
51 lA65 l |
|
|
21 lJ65 l |
|
26 lJ18 l |
Ðèñ. 4.5.14.:
Äî ë íè íî î î ýë ì íò êó÷ó
Оч и но, что нн я проц ур мо т р ссм три ться к к ч стный случ й проц уры слияния. Со им о ноэл м нтную кучу, состоящую и инст нно о иноми льно о р B0 и ыполним проц уру слияния.
Тру о мкость проц уры о л ния но о о эл м нт кучусть O(log n) .
Со ни иноми льной кучи
Пр поло им, что н м н о хо имо со ть иноми льную кучу и n ýë ì íòî .
Òî î íèì è î ìî íûõ ðè íòî ð ø íèÿ ÿ ëÿ òñÿ û î n ð ïðîö óðû î ë íèÿ ýë ì íò êó÷ó. Â ýòîì ñëó÷ òðó-
о мкость проц уры со ния кучи сть O(n) , õîòÿ ñë î ëî û î è òü îö íêó ïîðÿ ê O(n log n) .
Äëÿ ýòî î îòì òèì, ÷òî ñëè ó ñî ííîé êó÷ í èì íüø ïî ûñîò í ñóù ñò óþù ð î ñòü Bi , то р мя о л ния эл м нт кучу пропорцион льно i + 1 .
Äëÿ ïðèì ð , ñëè êó÷ H3 н сущ ст у т р ысоты 1, то проц ур о л ния но о о эл м нт у т осущ ст л н
110
