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

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

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

Ни при о ится посл о т льность йст ий посл у л - ния миним льно о эл м нт и ин рной кучи ("пр т н н- ты"н с о о но м сто ы л ны).

 

 

10

 

 

 

 

 

 

 

 

Æe

 

-

 

 

 

Æe

 

 

 

 

 

 

 

17 e

16

 

 

 

17 e

16

 

ÆT

 

ÆJ

 

 

 

ÆT

Æ

 

T

 

 

J

 

 

 

J

21

 

 

21

25

 

 

20

60

 

 

 

 

 

 

 

 

 

 

 

 

T

 

J

 

 

ÆÆ Æ

 

 

25

 

20

60

Æ

 

 

 

 

 

 

 

ÆÆ Æ

 

 

 

DÆT

 

D

 

T

 

 

 

 

 

D

 

T

 

D

 

T

 

 

 

 

 

 

 

25 40

33

29

 

 

 

 

 

 

 

 

 

 

25

40

33

29

 

Æ Æ Æ Æ

 

Æ Æ Æ Æ

 

 

16

 

 

 

 

 

 

Æe

-

 

 

16Æe

 

17 e

 

 

 

 

e

 

 

 

 

 

ÆT

ÆJ

 

 

 

17

 

20Æ

 

T

 

J

 

 

 

ÆT

 

J

 

 

 

 

T

 

J

25

21

20

60

 

 

 

 

 

Æ Æ Æ

 

 

 

Æ Æ

Æ

 

 

 

 

 

25

 

 

 

 

 

 

 

21

29

60

 

 

 

 

 

 

 

Æ

 

Æ

D

T

 

 

 

 

 

D

 

 

29

 

 

 

 

D

 

 

 

D

T

 

 

 

 

 

 

 

25 40

33

 

 

 

 

 

 

Æ Æ Æ Æ

 

 

25

40

33

 

 

 

 

 

Æ Æ Æ

 

 

Функция у л ния миним льно о эл м нт и ин рной кучи мо т ыть р ли о н сл ующим о р ом.

91

function delete_min(var H: array [0::n] of integer; var Num; code :integer):integer;

var i; child:integer; last_el:integer; stop:boolean;

begin

if Num = 0 then code := 2 else

{

delete_min := H[1]; last_el := H[Num]; Num := Num 1; i := 1; stop := F alse; while (2 i <= Num) and (not stop) do

{

child := 2 i;

if child < Num then

if H[child + 1] < H[child] then child := child + 1;

if last_el > H[child] then

{

H[i] := H[child]; i := child;

}

else stop := T rue;

}

H[i] := last_el; code := 0;

}

end;

Тру о мкость оп р ции у л ния опр ля тся колич ст омыполн ния цикл while и н пр ыш т колич ст уро н й кучи, которо р но log Num .

3.Ñî íè èí ðíîé êó÷è.

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

92

П р он ч льно ля посл о т льности A è n эл м нто строим полно ин рно р о:

for i := 1 to n do H[i] := A[i]; Num:=n;

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

for i := (n div 2) downto 1 do percolate_down(H; Num; i);

procedure percolate_down(var H: array [0::n] of integer; Num; i:integer);

var child:integer; last_el:integer; stop:boolean;

begin

last_el := H[i]; stop := F alse;

while (2 i <= Num) and (not stop) do { child := 2 i;

if child < Num then

if H[child + 1] < H[child] then child := child + 1; if last_el > H[child] then

{ H[i] := H[child]; i := child;

}

else stop := T rue;

}

H[i] := last_el; end;

Ç ñü percolate_down( H; Num; i ) проц ур , о сп чи ю- щ я ыполн ни ин ри нт ля ршины с ин ксом i . Ä í-

93

н я проц ур состоит п р м щ нии т кущ о эл м нт нио т х пор, пок ля н о н у т о сп ч н ин ри нт.

Ни пок но со ни ин рной кучи с исполь о ни м при нно о ыш л оритм . Н рхн м рисунк и о-р но исхо но ин рно р о; н ни н м рисунк и о р но ин рно р о посл ыполн ния проц уры percolate_down(7).

 

 

 

 

 

!!!!

150

 

 

 

 

 

 

 

 

 

!!

Æaaaa

 

 

 

 

 

 

80

 

aa

 

 

 

 

 

 

 

 

 

a

 

 

 

 

!

 

 

 

 

 

 

 

 

 

 

 

 

ÆA

 

 

 

 

40ÆJ

 

 

 

 

A

 

 

 

 

 

70 JJ

 

A

 

 

30

 

 

 

 

10

 

 

 

 

Æ

 

110

 

Æ

 

Æ

 

 

 

ÆL

 

B

 

 

L

 

 

 

A

 

 

B

 

 

 

L

 

 

 

 

A

 

 

L

100

 

 

 

 

 

 

20

90

 

60

 

 

 

50

120

140

130

ÆÆ Æ

 

 

 

Æ

 

 

 

 

 

 

 

 

 

 

Æ

 

 

Æ ÆÆ

 

 

 

 

!!!!

 

150

 

 

 

 

 

 

 

 

 

!

Æaaaa

 

 

 

 

 

 

 

 

 

 

 

 

a

a

 

 

 

 

 

 

 

 

 

 

 

 

!

 

 

 

 

 

 

 

 

 

!

 

 

 

 

 

 

 

a

 

 

 

 

 

 

80

 

 

 

 

40

 

 

 

 

ÆA

 

 

 

 

 

ÆJ

 

 

A

 

 

 

 

 

70 J110J

30 A10

 

 

Æ

 

 

Æ

 

 

Æ

ÆL

 

B

 

 

 

 

L

 

 

 

 

A

 

B

 

 

 

L

 

 

 

 

A

 

 

L

100

 

 

 

 

 

20

90

 

 

60

 

 

 

50

120

140

 

130

ÆÆ Æ

 

 

 

Æ

 

 

 

 

 

 

 

 

 

 

Æ

 

 

Æ ÆÆ

 

 

 

 

 

 

 

 

 

94

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

!!!!

 

150

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Æaaaa

 

 

 

 

 

 

80

 

!!

aa

 

 

 

 

40

 

 

!

 

 

 

 

 

 

 

 

 

 

 

a

 

 

 

 

 

ÆA

 

 

 

 

 

 

 

 

 

ÆJ

 

 

 

A

 

 

 

 

 

 

 

 

50 JJ

 

A10

 

 

 

30

 

 

Æ

 

 

 

 

Æ

110

 

Æ

 

 

 

 

 

ÆL

 

B

 

L

 

 

 

 

 

 

 

A

 

 

 

 

 

 

 

 

 

 

 

 

 

 

100

20

90

60

 

70

 

A

 

 

B

 

 

 

L

 

 

 

 

 

 

 

 

 

 

 

L

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ÆÆ Æ

 

 

 

 

 

 

120

140

130

 

 

 

 

Æ

 

 

 

 

 

 

 

 

 

 

Æ

 

 

 

 

 

 

Æ ÆÆ

 

 

 

 

 

!!

 

 

150

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

!

Æaa

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

!

a

a

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

!!

 

 

 

 

 

 

 

aa

 

 

 

 

 

 

 

!

 

 

 

 

 

 

 

 

 

 

 

a

 

 

 

 

 

 

80

 

 

 

 

 

 

 

 

 

 

 

40

 

ÆA

 

 

 

 

 

 

 

 

 

 

 

ÆJ

 

 

AA

 

 

 

 

 

 

JJ

 

 

 

 

 

 

 

 

 

10

 

 

 

 

 

 

 

50Æ

 

 

 

30Æ

 

Æ

 

 

 

 

 

110

 

B

 

L

 

 

 

 

 

 

 

A

 

 

 

 

 

 

ÆL

 

 

 

 

 

 

 

 

 

 

100

B

 

 

 

 

 

 

 

 

A

 

 

 

 

 

L

 

 

 

 

 

 

 

 

 

 

 

 

 

 

L

 

20

90

 

60

 

 

 

 

70

 

120

140

 

130

ÆÆ Æ

 

 

 

 

Æ

 

 

 

 

 

 

 

 

 

 

Æ

 

 

 

 

 

Æ ÆÆ

Н рхн м рисунк и о р но ин рно р о посл ы- полн ния проц уры percolate_down(6); н ни н м рисункпосл ыполн ния проц уры percolate_down(5).

95

 

 

 

!!!!

 

 

150

 

 

 

 

 

 

 

 

 

 

 

!

Æaaaa

 

 

 

 

 

 

 

 

 

 

!

a

a

 

 

 

 

 

 

 

80

 

 

 

 

 

 

 

 

40

 

 

!

 

 

 

 

 

 

 

 

 

 

 

 

a

 

 

 

ÆA

 

 

 

 

 

 

 

 

 

 

 

ÆJ

 

 

 

A

 

 

 

 

 

 

 

 

 

 

 

JJ

20 A

 

 

 

 

 

 

 

 

Æ

10Æ

 

 

 

 

 

50Æ

110

 

B

 

 

L

 

 

 

 

 

 

 

 

 

 

A

 

 

 

ÆL

B

 

 

 

L

 

 

 

 

 

 

 

 

 

A

 

 

L

 

30

 

 

 

 

 

 

 

 

 

100

 

90

 

 

 

 

 

70

 

 

 

 

60

 

 

 

 

 

 

 

 

120

140

130

ÆÆ Æ

 

 

 

 

 

 

Æ

 

 

 

 

 

 

 

 

Æ

 

 

 

 

 

 

Æ ÆÆ

 

 

 

 

 

!!

 

 

 

150

 

 

 

 

 

 

 

 

 

 

 

 

 

!

Æaa

 

 

 

 

 

 

 

 

 

 

 

 

 

!

a

a

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

!!

 

 

 

 

 

 

 

 

 

aa

 

 

 

 

 

!

 

 

 

 

 

 

 

 

 

 

 

 

a

 

 

 

80

 

 

 

 

 

 

 

 

 

 

 

 

40

 

 

ÆA

 

 

 

 

 

 

 

 

 

 

 

 

ÆJ

 

 

A

 

 

 

 

 

 

 

 

 

 

JJ

20 A10

 

 

 

 

 

 

Æ

 

Æ

 

 

 

 

 

 

50Æ 110

 

B

 

L

 

 

 

 

 

 

 

 

 

A

 

 

ÆL

 

 

 

 

 

 

 

 

 

 

100

30

90

 

60

 

 

70

 

120

 

B

 

 

L

 

 

 

 

 

 

 

 

 

A

 

 

 

L

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ÆÆ Æ

 

 

 

 

 

 

Æ

140

130

 

 

 

 

 

Æ

 

 

 

 

 

Æ ÆÆ

Н рхн м рисунк и о р но ин рно р о посл ы- полн ния проц уры percolate_down(4); н ни н м рисункпосл ыполн ния проц уры percolate_down(3).

96

 

 

 

!!!!

 

 

150

 

 

 

 

 

 

 

 

 

 

 

!

Æaaaa

 

 

 

 

 

 

 

 

 

 

 

!

a

a

 

 

 

 

 

 

 

 

 

10

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

a

 

 

!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ÆA

 

 

 

 

 

 

 

 

 

40ÆJ

 

 

 

AA

 

 

 

 

 

 

 

 

 

 

 

JJ

 

 

 

60

 

 

 

 

 

 

 

 

 

 

 

 

20

 

 

 

 

 

 

 

 

 

 

Æ

 

Æ

 

 

 

 

50Æ

110

 

B

 

L

 

 

 

 

 

 

 

 

 

A

 

 

 

 

ÆL

 

 

 

 

 

 

 

 

 

 

100

30

90

80

 

 

 

 

A

 

 

B

 

 

 

L

 

 

 

 

 

 

 

 

 

 

L

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ÆÆ Æ

 

 

 

 

 

70

120

140

130

 

 

 

 

 

Æ

 

 

 

 

 

 

 

 

 

Æ

 

 

 

 

 

 

Æ ÆÆ

 

 

 

 

 

!!

 

 

 

10

 

 

 

 

 

 

 

 

 

 

 

 

!!

 

Æaa

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

aa

 

 

 

 

 

 

 

 

 

!!

 

 

 

 

 

 

 

 

aa

 

 

 

 

20

 

 

 

 

 

 

 

 

 

a

 

 

!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ÆA

 

 

 

 

 

 

 

 

 

 

40ÆJ

 

 

A

 

 

 

 

 

 

 

 

 

JJ

 

30 A

 

 

 

 

 

 

Æ

60Æ

 

 

 

 

 

50Æ

110

 

B

 

 

L

 

 

 

 

 

 

 

 

A

 

 

 

ÆL

B

 

L

 

 

 

 

 

 

 

 

A

 

 

 

 

L

100

150

 

 

 

 

 

 

 

 

 

 

90

 

 

 

 

 

 

70

 

 

 

 

 

 

 

80

 

 

 

 

 

 

120

140

 

ÆÆ Æ

 

 

 

 

 

Æ

 

 

130

 

 

 

 

 

 

Æ

 

 

 

 

 

Æ ÆÆ

Н рхн м рисунк и о р но ин рно р о послыполн ния проц уры percolate_down(2); н ни н м рисунк ин рн я куч посл ыполн ния проц уры percolate_down(1).

Оч и но, что колич ст о п р м щ ний ни н которо о эл - м нт н пр осхо ит ысоты, н которой он р споло н. Сл -о т льно, тру о мкость при нно о л оритм со нияин рной кучи н пр осхо ит суммы ысот с х ршин и- н рной кучи.

Сл ующ я т ор м т от т н опрос: ч му р н сумм

97

ûñîò ñ õ ðøèí èí ðíîé êó÷è.

Т ор м 4.5.1. Для ин рной кучи ысоты h , ñî ð ù é 2h+1 1 ðøèí, ñóìì ûñîò ñ õ ðøèí ñòü 2h+1 1

(h + 1) .

Äîê ò ëüñò î.

Ç ì òèì, ÷òî èí ðí ÿ êó÷ ñî ð èò 2i ðøèí í ûñîò h i . Ñë î ò ëüíî, ñóìì ûñîò ñ õ ðøèí ñòü

h

S = X 2i(h i) = h + 2(h 1) + 4(h 2) + 8(h 3) + + 2h 1:

i=0

(4.1)

Óìíî èì ð íñò î (4.1) í :

2S = 2h + 4(h 1) + 8(h 2) + + 2h(1):

(4.2)

Вычт м и р нст (4.2) р нст о (4.1) и, учиты я, что

2h 2(h 1) = 2; 4(h 1) 4(h 2) = 4; : : :

получим

S = h + 2 + 4 + 8 + + 2h 1 + 2h =

( h 1) + (1 + 2 + 4 + + 2h 1 + 2h) = (h + 1) + (2h+1 1):

2

Учиты я, что n = 2h+1 1 , и т ор мы 4.5.1. сл у т, что тру о мкость опис нно о л оритм постро ния ин рной ку- чи сть O(n) .

Ïðèì í íè èí ðíûõ êó÷.

1.Р ссмотр нн я структуру мо но исполь о ть ля сортиро - ки эл м нто . Для это о ост точно н ч л о ить к -ый и них кучу, т м пооч р но у лить. Тру о мкость сортиро ки, р ли о нной т ким о р ом, опр ля тся тру-о мкостью оп р ций о л ния и у л ния миним льно о эл м нт .

98

2.С помощью кучи ыстро н хо ится k -ый эл м нт посл о - т льности. Для это о ну но пом стить с эл м нты кучу,

ò ì îñò òü è êó÷è k эл м нто . Посл ний и них иу т искомым. З м тим, что сли k конст нт , то тру о-

мкость нно о л оритм р н O(n) + O(k log2 n) = O(n) .

Ал оритм т к ост тся лин йным, сли k = O n n .

log2

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

4.5.2D-Êó÷è

Полным d- р ом н ы тся т ко корн о р о, котором к я ршин им т н ол d сыно й, полн ни ршин осущ ст ля тся поря к от рхних уро н й к ни ним, прич м, н о ном уро н полн ни ршин р прои о ится сл н - пр о.

 

 

 

Ñ îéñò d- ð

1.

Í îë dk ðøèí èì þò ëó èíó k .

2.

Í îë

dk+1 1

ðøèí èì þò ëó èíó ì ó 0 è k .

 

 

d 1

 

3. Ãëó èí d- ð , ñî ð ù î n ðøèí, í îë logd n .

При м прим р d- р , d=3 (рис.4.5.11.). В ршин х d-р со р тся н ч ния (ключи).

Õð í íè d- ð

Для р ли ции оп р ций н эл м нт ми полно о d- р

н о хо имо им ть информ цию о пр к х и потомк х d- р . О о н чим ч р P red[i] отц (пр ш ст нник ) ршины i d- ð ; Succ[i] мно ст о сыно й ршины i .

По н ло ии с полным ин рным р ом, d- р о мо но пр - ст ить с помощью м сси . Н прим р, ля d- р н рис.4.5.11. м сси у т ы ля ть сл ующим о р ом:

dHeap = f5; 9; 8; 15; 21; 12; 16; 18; 29; 10;31; 22; 27g:

99

 

 

 

 

 

 

5

 

 

 

 

 

 

 

 

 

 

 

 

Æ

 

 

 

 

 

 

 

 

 

 

 

 

a

a

 

 

 

 

 

 

 

 

 

 

 

 

 

aaaa

 

 

 

 

 

 

 

 

 

 

 

 

 

aa

 

9

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

8

 

 

 

15

 

 

 

ÆA

 

 

 

Æ

 

Æ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

T

 

 

 

A

 

 

 

 

A

 

 

 

 

T

 

 

A

 

 

 

 

AA

 

 

 

 

 

 

 

T

 

 

 

AA

 

 

 

 

 

 

 

 

 

 

T

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

29 31

21

12

16

18

 

 

 

 

 

10

22

27

Æ Æ Æ

Æ Æ Æ

Æ Æ Æ

 

Ðèñ. 4.5.11.: Ïðèì ð d- ð ( d = 3 ).

 

Пусть

last

 

îïð ëÿ ò

число ршин, хр нимых

ì ññè

dHeap . Â ïðèì ð í ðèñ.4.5.11. last = 13 .

Опис нн я сх м хр н ния о л т с ойст ми, по оляющими л ко о р щ ться к отцу лю ой ршины и к ¼ сыно ьям:

1. îò ö

pred[i] ршины i; 0 < i < last , í õî èòñÿ ïî èöèè

i 1

(ïî ñî ë ø íèþ î ñ ÿ ÿõ êîð íü (root) í õî èòñÿ

d

 

ïî èöèè

i = 0 ì ññè dHeap );

2. сыно ья ршины i н хо ятся по ициях id+1; id+2; :::; id+

+ d , ñëè id + 1 < last; id + 2 < last; ; id + d < last .

Н прим р, р ссмотрим ршину с ин ксом 7 ì ññè dHeap . От ц ршины с ин ксом i = 7 ычисля тся по формул

i 1 = 6 = 2:

d 3

Í õî èì key[2] = 8 . Ит к, ршин с ключом 8 ÿ ëÿ òñÿ

отцом ршины с ключом 18. Н й м сыно й ршины i ñ èí êñîì 2. Èõ èí êñû ì ññè ð íû 3i+1; 3i+2; 3i+ + 3 , ò. . 7; 8; 9 .

100

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