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

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

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

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

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