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

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

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

2.Второй л оритм осно н н т хник "р ляй и л ст уй". Д лим м сси н ч сти ( л нсиро к ). Н хо им м кси- м льный и миним льный эл м нты ля к ой и ч ст й;ы ир м и м ксим льных эл м нто н и ольший и и миним льных эл м нто н им ньший. Р курр нтно ур н нинно о л оритм им т сл ующий и :

T (n) = 2T (n=2) + 2; n > 2

T (2) = 1:

Построим точно р ш ни нно о ур н ния, исполь уя м -

òî ïî ñò íî êè.

g(n) = 32 n 2

3

3 n

2 + 2 =

3

2n 2 2

2 2

2 n 2:

Т ким о р ом, сло ность л оритм сть

T (n) = 32 n 2:

З м тим, что ссимптотич ски сло ности п р ом и торомл оритм х со п ют и р ны O(n) , но прим н ни т хники отором л оритм т лучшую конст нту.

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

3.2.ДИНАМИЧЕСКОЕ ПРОГРАММИРОВАНИЕ

Ñóòü ííî î ì òî êëþ÷ òñÿ ñë óþù ì.

1.З ч по ру тся с м йст о ч той приро ы. Дру-ими сло ми, р и тся н исимы (мо ут п р с к ться) по чи.

2.К я по ч р ш тся от льно о ин р . Оптим льнын ч ния р ш ний с х по ч помин ются.

41

3.Для исхо ной чи строится о р тно соотнош ни , с я-ы ющ м у со ой оптим льны н ч ния исимых по ч.

Т ким о р ом осно ны отличия нной т хники от т хники "р ляй и л ст уй" ключ ются сл ующ м:

ð ëÿé è ë ñò óé

ин мич ско про р ммиро ни

 

 

н исимы по чи

исимы по чи

 

 

ð ø íèÿ ñ õ ïî ÷

ð ø íèÿ ñ õ ïî ÷

н помин ются

помин ются

 

 

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

н ы ют т личным . О н и кл ток т лицы и т опти- м льно р ш ни исхо ной чи.

Ïðèì ð 1.

З ны строки сим оло A = fa1; a2; ; amg è B = = fb1; b2; ; bng . Í î õî èìî îïð ëèòü d(A; B) миним льно число ст ок, у л ний и м н сим ол , тр у мо ля пр о р -о ния о ной строки ру ую.

Р ссмотрим с о мо ны по чи нной чи AiBj , êî-

торы ключ ются пр о р о нии строки fa1; a2; ; aig строку fb1; b2; ; bjg и пусть d[i; j] миним льно колич ст о оп р ций ля ыполн ния это о пр о р о ния.

Âò ëèö , ïðè ííîé íè , óê íû ñ ïî ÷è ïðè m =

=3; n = 4 .

 

j = 0

j = 1

j = 2

j = 3

j = 4

 

 

 

 

 

 

i = 0

 

b1

b1b2

b1b2b3

b1b2 b3b4

i = 1

a1

a1b1

a1b1b2

a1b1b2b3

a1b1 b2b3b4

i = 2

a1a2

a1a2b1

a1a2b1b2

a1a2b1b2b3

a1a2b1 b2b3b4

i = 3

a1a2a3

a1a2a3b1

a1a2a3b1b2

a1a2a3b1b2b3

a1a2a3b1b2b3b4

Построим м трицу D = d[i; j] ð ì ð (m + 1) (n + 1); i =

= 0; ; n; j = 0; ; m .

Î÷ è íî, ÷òî d[0; j] = j; j = 0; ; n только ст ки и коли- ч ст о ст ок р но лин ц почки Bj , d[i; 0] = i; i = 0; m только у л ния и колич ст о у л ний р но лин ц почки Ai .

42

Р ссмотрим см ны чи:

a1; a2; ai 1b1; b2; bj 1

a1; a2; ai 1b1; b2; bj

a1; a2; aib1; b2; bj 1

a1; a2; ai b1; b2; bj

Пр поло им, что оптим льны р ш ния ч

Ai 1Bj ; Ai 1Bj 1; AiBj 1

у постро ны. Пок м, к к с я ны р ш ния этих ч с р ш - ни м чи AiBj .

Åñëè ó ëèòü ÷ AiBj ýë ì íò ai , то прихо им к -ч Ai 1 Bj ( d[i 1; j] + 1 ).

Ð øèì ÷ó AiBj 1 , ïîñë ÷ î î èì ýë ì íò bj . Получ м р ш ни чи AiBj ( d[i; j 1] + 1 ).

Ð øèì ÷ó Ai 1Bj 1 , ïîñë ÷ î î í îï ð öèÿ ì íû ýë ì íò ai í bj , котор я н о хо им лишь случ , ко-

ýòè ýë ì íòû í ñî ï þò , ïðè î èò ê ð ø íèþ ÷è

AiBj ( d[i 1; j 1] + Æ(ai; bj); Æ(ai; bj) = 0 , ñëè ai = bj

è Æ(ai; bj) = 1 ñëè ai 6= bj ).

Т ким о р ом, получ м сл ующ о р тно соотнош ни : d[i; j] = min (d[i 1; j] + 1; d[i; j 1] + 1; d[i 1; j 1] + Æ(ai; bj)) :

Ïðèì ð.

 

 

 

 

 

 

 

 

 

 

 

 

 

A :

p t s l d d f

 

 

 

 

 

B :

 

t s g l d d s

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

1

 

2

 

3

4

5

6

7

 

 

 

 

 

 

 

 

 

 

 

 

 

0

0

1

 

2

 

3

4

5

6

7

 

 

 

 

 

 

 

 

 

 

 

 

 

1

1

1

 

2

 

3

4

5

6

7

 

2

2

1

 

2

 

3

4

5

6

7

 

 

 

 

 

 

 

 

 

 

 

 

 

3

3

2

 

1

 

2

3

4

5

6

 

4

4

3

 

2

 

2

2

3

4

5

 

 

 

 

 

 

 

 

 

 

 

 

 

5

5

4

 

3

 

3

3

2

3

4

 

6

6

5

 

4

 

4

4

3

2

3

 

 

 

 

 

 

 

 

 

 

 

 

 

7

7

6

 

5

 

5

5

4

3

3

 

 

 

 

 

 

43

 

 

 

 

Получ м, что d[7; 7] = 3 миним льно колич ст о тр у-мых оп р ций. Если помин ть чи, н которых ости лся минимум, то мо но осст но ить ц почку оп р ций.

p t s l d d f ! (ó ë íè p) t s l d d f; t s l d d f ! ( ñò ê g) t s g l d d f; t s g l d d f ! ( ì í f) t s g l d d s;

Ïðèì ð 2.

Ç í ðóïï ì òðèö A1 ; A2; ; As . Ê ÿ ì òðèö Ai -í ð ì ð ìè ni; mi , ïðè÷ ì mi = ni+1 . Опр лить, к ко миним льно число оп р ций умно ния тр у тся ля п р мно-ния s м триц, прич м, п р мно ть мо но лю ы ря ом стоящи м трицы.

È ñòíî, ÷òî ëÿ ï ð ìíî íèÿ óõ ì òðèö ð ì ðî [n m] è [m k] òð ó òñÿ n m k îï ð öèé óìíî íèÿ.

Åñëè A = A1(10 20) A2(20 50) A3(50 1) A4(1 100) , тосли п р мно ть м трицы поря к

A1 (A2 (A3 A4)) ;

òî í î õî èìî 125000 îï ð öèé, ñëè èõ ï ð ìíî òü

(A1 (A2 A3)) A4;

òî í î õî èìî 2200 îï ð öèé.

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

му сло ности O(n3) .

 

 

З м тим, что п р мно ть руппы м триц с ном р ми от i

î

j

мо но р личными спосо ми: ля н которо о ы р нно о k

îò

i

î j 1 сн ч л п р мно ются н илучшим о р ом м трицы

ñ íîì ð ìè îò i î k (получ м м трицу р м р ni mk ), - т м м трицы с ном р ми от k+1 î j (получ м м трицу р м р

nk+1 mj ) и т м п р мно м получ нны н пр ы ущих ш х м трицы (получ м м трицу р м р ni mj , тр у мо колич - ст о оп р ций сть ni nk+1 mj ).

44

Ò êèì î ð îì, ñëè î î í ÷èòü F [i; j] миним льно колич - ст о оп р ций ля п р мно ния м триц с ном р ми от i î j , òî

F [i; j] =

 

min

(F [i; k] + F [k + 1; j] + ni

 

nk+1

 

mj) ;

 

i

k

j

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

F[i; i] = 0:

 

 

 

 

 

 

При ин мич ском про р ммиро нии

F [i; j]

ычисляются

поря к о р ст ния р ност й ин ксо , т. . н чин м с ычисл - ния F[i; i] ëÿ ñ õ i , ò ì F [i; i+ 1] ëÿ ñ õ i , ò ì F [i; i+ 2]ëÿ ñ õ i è ò. . òî í î õî èìî ëÿ òî î, ÷òî û F[i; k] è F [k+1; j] у ыли ычисл ны к мом нту ычисл ния F [i; j] . Р ульт т р - ш ния чи соот тст у т личин F [1; s] .

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

begin

for i := 1 to s do F [i; j] := 0; for p := 1 to s 1 do

for i := 1 to s p do

{

kol := 1; j := i + p;

for k := i to j 1 do

if kol > F [i; k] + F [k + 1; j] + ni nk+1 mj then kol := F[i; k] + F[k + 1; j] + ni nk+1 mj;

F [i; j] := kol;

}

end.

Ïðèì ð 3.

Р ссмотрим чу р спо н ния о р о . З н т кст x , í î õî èìî ì íèòü ñëî î y ýòî î ò êñò ê êèì-ëè î ðó èì ñëî-îì, ò. . í î õî èìî í éòè õî íè ñëî y строк x (эт - ч ч сто о ник т при р ктиро нии т ксто , при конт кстнойм н , при поиск ирус п мяти ВМ).

45

Р ссмотрим н которую строку

x = fx1; x2; ; xng:

Для нной строки опр лим ц лочисл нную функцию отк о

F, котор я ля н которо о

 

i

n

сть н и ольш число

 

k < i

ò êî , ÷òî ï ð û k

сим оло по строки x1; x2; ; xi

ñî ï þò

ñ ïîñë íèìè k ñèì îë ìè:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(x1; x2; ; xk) = (xi k+1; xi k+2 ; ; xi):

 

 

 

 

 

(3.1)

Р ссмотрим н сколько прим ро .

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

i

 

 

 

2

 

 

3

 

4

 

5

 

 

6

 

7

 

8

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x

 

a

 

b

 

 

a

 

b

 

c

 

 

a

 

b

 

a

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

F [i]

0

0

1

2

0

1

2

 

3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

i

 

 

 

1

 

2

 

 

3

 

4

 

5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x

 

 

 

a

 

a

 

 

a

 

a

 

a

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

F [i]

 

0

 

1

 

 

2

 

3

 

4

 

 

 

 

 

 

 

 

 

 

 

 

 

Р ссмотрим л оритм постро ния функции отк о .

 

 

 

 

 

 

 

Пр поло им, что функция опр л н ля i = 1; 2; ; k è

í î õî èìî îïð ëèòü F[i] ëÿ i = k + 1 .

 

 

 

 

 

 

 

 

 

 

 

 

 

Пусть F (k) = k0 , ò. . k0

 

п р я по лин ц почк , которую

хот лось ы у личить. Поэтому ср ни м

 

xk0+1 c

 

xi

è ñëè

îíè ñî ï þò, òî ïîë ì

F (i) = k0 + 1 . В проти ном случ

( x

k0+1

= x ) н й м торую по лин ц почку лины k

 

< k

0

, ëÿ

 

6

i

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

 

 

которой ы ыполнялось с ойст о 3.1.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

k0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

k0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

k1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

k1

 

 

 

 

 

 

 

 

 

 

 

b

 

 

 

 

c

 

 

k0c

 

 

 

 

 

 

 

 

d

 

 

 

 

 

c

 

 

 

 

c

 

 

 

 

 

k1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

k

 

 

 

 

 

 

 

 

 

 

k1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Ðèñ. 3.2.1.:

È ðèñ.3.2.1. è íî, ÷òî k1 = F (k0) ( îê òü ê ÷ ñò óïð - í íèÿ).

46

Îïèñ ííû éñò èÿ ïî òîðÿ ì î ò õ ïîð, ïîê

í é òñÿ j 0 , ля которо о ыполня тся с ойст о 3.1 и x(kj +1) = xi ; òî F (i) = kj + 1:

kj = 0 è x1 6= xi ; òî F (i) = 0 .

При м л оритм постро ния функции отк о .

Ал оритм постро ния функции отк о .

begin

F (1) = 0;

for i := 2 to n do

{

k := F [i 1];

while (xk+1 =6 xi) and (k > 0) do k := F [k];

if (k = 0) and (x1 6= xi) then F [i] := 0 else F [i] := k + 1;

}

end.

Оц ним тру о мкость опис нно о ыш л оритм .

Для н которо о i н ч ни функции отк о F [i] ëè î ó ëè÷è-

òñÿ ïî ñð í íèþ ñ ïð û óùèì í ÷ íè ì F [i 1] н иницу ли о ум ньш тся. Прич м н ч ни функции F ум ньш тся (н о я т льно н иницу) столько р , сколько р отр от т цикл while . Но функция F о р нич н сни у нул м, поэтому о щ ко-

лич ст о ум ньш ний функции (оно происхо ит, сли xF [i 1]+1 =6 = xi è í ÷èí òñÿ óì íüø òüñÿ ñî í ÷ íèÿ F [i] ) н пр осхо ит о щ о колич ст у лич ний. Колич ст о у лич ний функции н пр осхо ит n . Сл о т льно, колич ст о ум ньш ний н у-т пр осхо ить n .

Т ким о р ом, тру о мкость л оритм р н колич ст у у - лич ний и ум ньш ний функции отк о F , ò. . O(n) .

Опис нный ыш л оритм мо т ыть исполь о н ля р ш - ния сл ующ й чи: опр лить хо ни н которо о сло yстроку x .

Для р ш ния пост л нной чи сц пля м строки y è x ,ст ляя м у ними н который р лит ль ( y + 0 0 +x ). Òîò

47

èí êñ i , ля которо о F (i) = jxj è ò îò ò ( j = F [i] jxj + 1сть н ч льный ин кс хо ния).

Ч стот стр ч мости нно о сло строк р н колич ст у

èí êñî j

ля которых F (j) = jxj .

 

 

 

 

 

 

 

i

1

2

3

4

5

6

7

8

9

10

11

12

13

14

 

x

ô

ï

ì

*

 

 

ñ

ô

ï

ì

 

ô

ï

ì

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

F [i]

0

0

0

0

0

0

0

1

2

3

0

1

2

3

Если ст ится ч н йти строк x мощности n по строку

yмощности m , то прим н ни т хники ин мич ско о про р м- миро ния по оля т получить л оритм сло ности O(n + m) .

Óïð í íè .

Р шить опис нную ыш чу, пр поло нии, что строк

yìî ò ñî ð òü ñèì îëû '*' è '?', '*' ëþ ÿ ïî ïîñë о-т льность сим оло , '?' н который о иночный сим ол.

48

à ë 4

СТРУКТУР ДАНН Х

Ч сто ч мо т ыть сформулиро н н я ык осно ных м - т м тич ских понятий, н прим р т ких, к к мно ст о, и то

л оритм р ш ния мо т ыть и ло н т рмин х осно ных оп р ций н осно ными о ъ кт ми. Для р р отки эфф кти но-о л оритм р ш ния пост л нной чи ну но про н ли иро-ть н сколько р личных структур нных. Мо т ок ться т к, что к я и структур нных по оля т ыполнять н которую и оп р ций л ко, ру и с ольшим тру ом. В этом случ ч сто ы ир ют ту структуру, котор я лучш с о по хо ит ля р ш ния с й чи ц лом (н л т м ксим льно л ким ы- полн ни ни о ной оп р ции, но по оля т ыполнить сю р оту лучш , ч м при лю ом оч и ном по хо ).

Поэтому р р отк эфф кти но о л оритм н прямую с я - н с р р откой хорош й структуры нных

В этой л о иться ря структур нных : списки, ст ки, оч р и, и пок ы тся, к к с помощью этих структур мо но пр ст лять мно ст , р фы и р ья.

4.1.СТРУКТУР ДАНН Х: СПИСКИ, СТЕКИ, ОЧЕРЕДИ

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

М сси ы относятся к структур м нных со случ йным оступом: ля ы л ния н которой компон нты к им ни м сси о -ля тся ин кс ( н ч ни сп ци льно о тип ), который мо но ы- числить, поэтому эл м нты м сси ино н ы ют п р м нными

ñèí êñ ìè.

Êо ым оп р циям н м сси ми относятся поиск эл м нт и поиск м ксим льно о (миним льно о) эл м нт .

49

1.Поиск эл м нт x .

(a)В прои ольном м сси тру о мкость этой оп р ции

O(n) .

(b)В отсортиро нном м сси тру о мкость этой оп р - ции O(log n) . Поиск эл м нт отсортиро нном м сси-мо но ыполнить р мя O(log n) , ñëè ê ÷ ñò

л оритм поиск исполь у тся поиск л ни м попол м ( оичный поиск), т.к. этом случ м ксим льно число ср н ний р но log n ( ля лин йно о поиск н о ср н м n=2 ñð í íèé).

Пусть L è R о о н ч ют л ый и пр ый концы инт р-л поиск эл м нт x ì ññè a .

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

{

L := 0; R := n;

while (L < R) do

{

m = L+2R ;

if a[m] < x then L = m + 1 else R = m;

}

}

Óïð í íè .

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

2.Поиск м ксим льно о (миним льно о) эл м нт .

(a)В прои ольном м сси тру о мкость этой оп р ции

O(n) .

(b)В отсортиро нном м сси тру о мкость этой оп р ции

O(1) .

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

50

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