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

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

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

у м пом ч ть отриц т льным числом, солютно н ч ни которо о р но колич ст у у ло р . Ко о ъ ин ни р ьыполня тся по ук нному принципу, корн ой у л l р ы- числя тся сл ующим о р ом: P [l] := P[l] + P [q] , l è q - корни о ъ иня мых по р м ру р ь , прич м jP[l]j jP[q]j . При этом отцом ршины q ñò íî èòñÿ ðøèí l , ò. . P [q] := l .

Р ссмотрим сл ующий н ор р ь .

R2

 

 

R3

 

 

R5

 

 

 

 

 

 

 

 

 

 

 

 

 

2

n

 

3

 

n

4 n

 

6

OC

oS

 

 

 

 

 

C

S

 

 

 

 

 

 

C

S

 

 

 

 

 

C

S

 

 

 

 

5

n6

n 1

n7 n8

n

То он у т пр ст л н сл ующим о р ом:

 

i

1

2

3

4

5

6

7

8

 

 

 

 

 

 

 

 

 

 

 

 

 

 

P [i]

3

-2

-5

-1 2

3

3

3

 

 

È ýòîé ò ëèöû ñë ó ò, ÷òî ó ë

i = 3 êîð íü ð

R3 ,

ïðè÷ ì ð 5 ó ëî . Ïîñë î ú èí íèÿ ð ü R2 è

R3

получим P [3] = 7; P[2] = 3 .

 

 

 

 

 

 

 

 

Т ор м 4.4.1. Если при ыполн нии к ой оп р ции ОБ - ЕДИНИТ кор нь р с м ньшим числом у ло (при р нст у ло р тся лю о р о) пр о р у тся сын корня р сольшим числом у ло , то ысот р л су мо т остичьысоты h , только сли оно им т н м н 2h ó ëî .

Док т льст о. Док т льст о про м по ин укции. Для h = = 0 ут р ни рно, т к к к к о р о им т по кр йн й м р о ин у л. Пр поло им, что ут р ни рно ля с хн ч ний п р м тр , м ньших h ( 1 ). Пусть T р о ысоты h с н им ньшим числом у ло . То оно ол но ыло получитьсяр ульт т слияния р ь T1 è T2 , T1 р о ысоты

h 1 è ó í î ó ëî í îëüø , ÷ ì ó T2 . По пр поло нию ин укции, р о T1 èì ò í ì í 2h 1 ó ëî , è, í ÷èò ð î

81

T2 , èì ò í ì í 2h 1 ó ëî . Ñë î ò ëüíî, ð î T èì ò í ì í 2h 1 + 2h 1 = 2h ó ëî .

2

È ò îð ìû ñë ó ò, ÷òî íèê êî ð î è n ó ëî ïðè ÎÁ -

ЕДИНЕНИИ ПО РАЗМЕРУ н мо т им ть ысоту h îëüø , ÷ ì log2 n .

Сл ст и 4.4.1. Сло ность ыполн ния O(n) оп р ций НАЙТИ и ОБ ЕДИНИТ ПО РАЗМЕРУ н пр осхо ит O(n log n) .

3. Ал оритм ОБ ЕДИНЕНИ ПО В СОТЕ н п р с к ющихся мно ст

В н которых ч х н о хо имо ыполнить ОБ ЕДИНЕНИЕ ПО В СОТЕ (слияни ) р ь . В л оритм х о ъ ин ния мно-ст с помощью р ь по ысот ну но сл ить ысотойр , м сто р м р , и при о ъ ин нии кор нь р с м нь- ш й ысотой ст но ится сыном корня р с ольш й ысотой ( ол лу око о р ). Т ким о р ом, о ъ ин ни р ь поысот пр ст ля т со ой эл м нт рно и м н ни л оритм о ъ-ин ния по р м ру.

В л оритм о ъ ин ния р ь по ысот поиск эл м нт тр у т поря к O(log n) оп р ций, слияни р ь тр у т поря к O(1) оп р ций. Сл о т льно, ля ыполн ния посл о - т льности и O(m) оп р ций НАЙТИ и ОБ ЕДИНЕНИЕ ПО В - СОТЕ тр у тся оп р ций поря к O(n log n) .

Ал оритм поиск мно ст с с ти м пути

При р ли ции мно ст с помощью корн ых р ь , осно н я тру ность ключ тся проц ур НАЙТИ ( отличии от пр - ст л ния и списко ). Сущ ст у т усо рш нст о ни л о- ритм ыполн ния проц уры НАЙТИ, состоящ мо рни циир при ыполн нии поиск , которо н ы тся с ти м пути.

Ñ òè ïóòè ëÿ ó ë x корн ом р состоит н н - ч нии к ой ршин н пути от ршины x о корня р r íî î î îòö ó ë r .

82

2

 

-

 

 

 

 

2

 

 

 

 

root YH

 

 

 

root

 

 

 

 

 

 

 

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

I@

 

 

 

 

 

 

*

 

 

6

H

H

H

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

@

z

 

 

 

 

 

H x

 

 

 

z

3

 

 

 

 

 

y

 

 

 

4

Æy

 

Æ

 

 

Æ

Æ

}Z

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Z

 

YHH 4

1

 

 

3

 

 

 

m

 

 

Æ

 

 

 

 

 

 

 

6

 

 

 

 

 

 

 

 

 

5

 

 

x

 

 

 

 

 

 

 

 

 

Æ

 

 

 

 

Æ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

6

 

 

 

 

 

 

 

 

 

 

 

 

m

5

 

 

 

 

 

 

 

 

 

 

 

 

 

Æ

 

 

 

 

 

 

 

 

Ал оритм поиск с с ти м пути мо т ыть р ли о н сл -ующим о р ом.

function НАЙТИ(x); begin

stack = ;;

while P [x] > 0 do

{ x ! stack; x := P[x]; }

 

6 ;

do

while stack =

{ y

stack; P [y] := x; }

НАЙТИ:=x;

 

end

Оц ним тру о мкость ыполн ния посл о т льности и O(n) оп р ций "поиск с с ти м пути"и "о ъ ин ния по р м ру". Для это о р ссмотрим функцию F , котор я опр ля тся сл ующим о р ом:

F (0) = 1

F (i) = 2F (i 1); i > 0:

Функция F р ст т оч нь ыстро: сли F(0) = 1 , то F (4) = 65536 . Опр лим функцию G(n) , к к н им ньш число k , ля которо о

F (k) n . Функция G ð ñò ò î÷ íü ì ë ííî: G(n) 5 ëÿ ñ õ

n 265536 .

Т ор м 4.4.2. Пусть c прои ольн я постоянн я. Н й тсяру я постоянн я c0 , исящ я от c , т к я, что л оритм о ъ-ин ния н п р с к ющихся мно ст по р м ру с с ти м пути

83

ыполнит посл о т льность и c n оп р ций ОБ ЕДИНИТ и НАЙТИ н n ýë ì íò õ ð ìÿ c0 n G(n) .

Опис нн я ыш т хник мо т ыть исполь о н ля р ш - ния широко о кру ч. Н прим р, пусть им тся мно ст о S компьют ро , эл м нты мно ст S с я ны м у со ой н которым о р ом. Если компьют ры i; j 2 S с я ны м у со ой, то с я ь м у ними ун пр л нн я, по оляющ я п р чу ф й- ло от о но о компьют р к ру ому. Мо но ли посл ть ф йл от лю о о компьют р i к лю ому ру ому компьют ру j р ссм - три мой компьют рной с ти? Что ы р шить эту чу, п р он - ч льно пом щ м к ый компьют р i 2 S îò ëüíî ìíî ñò î Ri; i 2 S . Д компьют р (x; y) ï ð þò ô éëû îò î íî î ê ðó-îìó, ñëè îíè í õî ÿòñÿ î íîì ìíî ñò ( î íîì ð ). Äëÿ ê îé ï ðû (x; y) компьют ро x è y , которы с я ны м -у со ой усторонн й с я ью, строим пути от x è y кор нь корн о о р , и, сли корни р ь ля компьют ро x è y р личны, то о ъ иня м р . Если x è y им ют о ин и тоткор нь, то они н хо ятся о ном р . Если посл просмотрс х п р компьют ро получим о но р о, то сть о мо ность посл ть ф йл и лю о о компьют р к лю ому ру ому компьют - ру. Если р ульт т о ъ ин ния р ь получ н л с р ь , то н о мо но посл ть ф йл к прои ольному компьют ру и н которо о ру о о компьют р .

4.5.ПРИОРИТЕТН Е ОЧЕРЕДИ

Куч ми у м н ы ть т ки структуры нных, которы по о- ляют ыполнять осно ны оп р ции: " о л ни эл м нт "и "у л ни миним льно о эл м нт ". Если оп р ция о л ния эл - м нт н тр у т ополнит льных о ъясн ний, то оп р ция "у - л ния миним льно о эл м нт "пр пол т, что ля к о о эл - м нт опр л но н которо н ч ни (ключ), по которому опр - ля тся "миним льность". В с мом простом ри нт н ч ни клю- ч мо т со п ть со н ч ни м эл м нт . В о щ м случ соотно- ш ни н ч ния эл м нт и о ключ мо ут им ть прои ольную

исимость. Н прим р, сли н ч ни ключ соот тст у т р - м ни поступл ния н которой я ки н о слу и ни , то мо но

84

пр пол ть, что миним льно н ч ни ключ им т т я к (эл м нт), котор я поступил р ньш . В этом случ ля мо - лиро ния проц сс о слу и ния мо но исполь о ть структуру нных "оч р ь". Если пр поло ить, что миним льно н - ч ни ключ им т т я к (эл м нт), котор я поступил по , то ля мо лиро ния проц сс о слу и ния мо но исполь о ть структуру нных "ст к". Но сли пр поло ить, что миним льнон ч ни ключ им т т я к (эл м нт), котор я м ньш с о мо т ть, ля мо лиро ния проц сс о слу и ния мо но исполь о ть т кую структуру нных, к к "Куч "(это у у т оч р ь, котор я учиты т приорит ты).

Сущ ст у т мно о спосо о р ли ции структуры нных "Ку- ч ", ни у ут р ссмотр ны н которы и них ( ин рны кучи, d -кучи, иноми льны кучи и кучи Фи он ччи).

4.5.1Áèí ðíû êó÷è

Полным ин рным р ом н ы тся т ко р о, котором к я ршин им т н ол ух "сыно й", полн ниршин осущ ст ля тся поря к от рхних уро н й к ни ним, прич м н о ном уро н полн ни ршин прои о ится сл н - пр о. Н рис.4.5.8. a) и о р но полно ин рно р о, которо

 

 

 

Óð.2

Æ

Æ@

 

 

\\

 

 

@

 

 

 

@

 

 

Óð.1

Æ

Æ

Æ

 

Æ

 

 

 

Óð.0

Æ

 

Æ Æ

 

Рис. 4.5.8.: a) полно ин рно р о; b) н полно ин рно р о.

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

85

шин . Д р о н рис.4.5.8. b) н я ля тся полным ин рным - р ом, т к к к полн ни ршин уро ня 0 осущ ст лялось н сл -н пр о (н полн н ршин м у ршин ми " "и " "). Н тру но у иться, что р о, и о р нно н рис.4.5.8. a), мо но о ить ( полнить) м ксимум три ршины, что ы коли- ч ст о уро н й н м н и м нилось. Если мы о им ( полним) ч тыр ршины, то получится полно ч тыр хуро н о ин рнор о, которо и о р но н рис.4.5.9.. Оч и но, что миним ль-

 

 

 

 

ÆH

 

 

HH

 

 

ÆA

Æ@

 

@

 

 

 

 

Æ Æ

Æ

Æ

Æ

Рис. 4.5.9.: Полно ч тыр хуро н о ин рно р о.

но колич ст о ршин полном тр хуро н ом ин рном р

р но 4, м ксим льно число полностью полн нном 7. Н сло но у и ть, что ля полно о ин рно о р ысоты h

м ксим льно колич ст о ршин сть

 

 

 

h

2h+1 1

 

 

 

 

1 + 2 +

 

+ 2h =

2i =

 

= 2h+1

 

1;

 

 

 

Xi=0

2 1

 

 

 

миним льно колич ст о ршин сть

(1 + 2 +

 

+ 2h 1) + 1 = h 1 2i + 1 =

2h 1

+ 1 = 2h:

 

 

Xi=0

2 1

 

Т ким о р ом, колич ст о ршин полно о ин рно о р ы- соты h è ì íÿ òñÿ îò 2h î (2h+1 1) .

Полно ин рно р о с K ршин ми л ко р ли у тся с помощью просто о м сси . Для это о н о хо имо пр ст ить, что у

86

ýë ì íò ñ èí êñîì i сыно ьями я ляются эл м нты с ин кс ми 2 i è 2 i + 1 , 2 i K; 2 i + 1 K . Т к, полно ин рно р о

Æl

l

l

% ÆL Æ% L

%

Æ Æ Æ

ó ò ïð ñò ë íî è ì ññè :

Èí êñ

1

2

3

4

5

6

 

 

 

 

 

 

 

 ðøèí

 

 

 

 

 

 

 

 

 

 

 

 

 

Кром м сси , н о хо имо им ть п р м нную, котор я опр -ля т колич ст о ршин р . Пусть это у т п р м нн я Num . То ин кс м ст м сси , мо лирующ м полно и- н рно р о, ку оч р ной эл м нт у т о ляться, р н

Num + 1 .

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

Бин рн я куч это полно ин рно р о, ля которо оыполня тся осно но с ойст о структуры нных куч .

Ни и о р ны полных ин рных р , но только л о я ля тся ин рной куч й.

87

 

 

 

 

 

 

 

10

 

 

 

10

 

 

A

 

Æ

 

 

 

 

Æ

 

 

 

 

 

@

 

 

 

l

 

 

21

@

 

UA

21

l

 

 

 

Æ

 

16

 

Æ

16

 

 

B

 

ÆT

 

 

\

Æ

 

 

 

 

 

 

 

L

 

29 60 Sw \29 60

 

 

 

BB

 

T

 

 

 

L

 

 

 

Æ

Æ

ÆC ÆÆÆ

25

 

 

20

 

18

 

20

 

ÆB

 

Æ

 

 

 

 

B

 

 

 

 

 

C

 

 

25

40

 

33

 

 

25

40

33

 

ÆÆ Æ

 

Æ Æ Æ

Пусть H м сси р м р n , который у т исполь о тьсяля р ли ции ин рной кучи, Num колич ст о эл м нто куч , приорит т эл м нт опр ля тся о н ч ни м, прич м, ч м м ньш н ч ни эл м нт , т м ольш о приорит т. Осно - н я и я мо лиро ния состоит том, что "сыно ьями" ршины с ин ксом i я ляются ршины с ин кс ми 2i и 2i + 1 . Отсю-сл у т, что "отцом" ршины с ин ксом j я ля тся ршин с ин ксом bj=2c . Отм тим, что у корн ой ршины "отц "н т. Поэтому осно но с ойст о ин рной кучи о сп чи тся ыпол- н ни м усло ия, что ля лю ой тройки эл м нто с ин кс ми i , 2i , 2i + 1 эл м нт с ин ксом i ол н им ть м ксим льный приорит т ( куч и тр х эл м нто ол сильный с с рху). Ни при о ится спосо по р ния это о с ойст при ыпол- н нии осно ных оп р ций с ин рными куч ми.

Осно ны оп р ции с ин рными куч ми

1.Äî ë íèÿ ýë ì íò ê èí ðíîé êó÷ .

Пр поло им, что кучу, и о р нную н рис.4.5.10., н о - хо имо о ить но ый эл м нт с ключом 17. При ыполн нии оп р ции о л ния эл м нт , он ол н пом стится н с о-о но м сто, т. . по ицию с ин ксом Num + 1 . О н ко эт по иция мо т н соот тст о ть пр ильному поло нию эл м нт куч , т к к к н ним мо т н хо иться эл м нт, им ющий м ньший приорит т. Т к, при о л нии эл м нт с ключом 17, ля ршины с ин ксом 5 н руш тся осно - но с ойст о кучи. Прост йшим спосо ом р р ш ния этой ситу ции я ля тся о м н эл м нто , н которых прои ошло

88

н руш ни осно но о с ойст . При этом эл м нт с ольшим приорит том по ним тся рх, эл м нт с м ньшим приорит том ним т о м сто. Л ко и ть, что при т ком о - м н осно но с ойст о кучи ля ршин, стоящих ни , н н руш тся. Т ко пр о р о ни при о ит к но ому полному ин рному р у (см. рис.4.5.10.), которо щ н у о л - т оря т осно ному с ойст у кучи ( ля ршины с ин ксом 2). Поэтому, прим ня м н ло ичный о м н ля ршины с

 

 

 

 

 

 

 

 

 

 

 

 

 

10Æ@

 

 

 

""10Æ@

 

 

 

21

@16

 

 

 

21

16

 

 

 

 

 

 

 

 

 

 

"

@

 

 

 

ÆL

 

 

ÆT

 

 

 

 

17

Æ

 

 

 

 

 

-

 

ÆA

T

 

 

 

 

20

 

 

 

L

 

 

T

 

 

 

A

 

T

 

 

 

 

 

 

 

 

 

 

 

 

25

29

20

60

 

 

25

 

 

60

 

 

ÆD ÆS

Æ Æ

 

 

 

ÆÆ Æ

 

 

 

ÆB e

 

 

 

 

 

 

 

D

S

 

 

 

 

 

B

 

e

 

25

 

40

33

 

 

 

 

25

40

33

29

 

Æ Æ Æ Æ

 

 

Æ Æ Æ Æ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

17

 

 

 

 

 

 

 

 

 

Ðèñ. 4.5.10.:

èí êñîì 2. Ð óëüò ò ýòî î ïð î ð î íèÿ è î ð í íè .

 

 

 

 

 

 

 

10Æe

 

 

e

 

 

17

 

16

 

 

ÆT

ÆJ

 

 

T

 

J

 

21

 

25

 

20

60

 

 

 

ÆÆ Æ

 

DÆ@

 

 

D

 

@

 

 

25

40

33

29

 

Æ ÆÆ Æ

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

ë íèÿ ýë ì íò ðø í .

89

При м про р ммную р ли цию оп р ции о л ния эл м нт x ê èí ðíîé êó÷ .

procedure insert(x:integer; var H: array [0 : : : n] of integer; var Num; code:integer);

var i:integer; begin

if Num = n then code := 1 else

{

Num := Num + 1; i := Num;

H[0] := x;

while (x < H[i div 2]) do

{

H[i] := H[i div 2]; i := i div 2;

}

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

}

end;

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

2.У л ни миним льно о эл м нт и ин рной кучи.

Р ссмотрим с йч с р ли цию оп р ции у л ния мини- м льно о эл м нт .

В силу осно но о с ойст кучи эл м нт с м ксим льным приорит том н хо ится корн полно о ин рно о р , т. . им т ин кс 1. Поэтому, посл у л ния п р о о эл м нт ,о м сто йм т тот и о сыно й или посл ний эл м нт, кто им т ольший приорит т. Ос о о и ш ся м сто сынйм т о сын или посл ний эл м нт, и т к л . Посл т ких пр о р о ний нутри кучи н ол но ост ться "с о-о ных"м ст.

90

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