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

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

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

Исполь уя опис нную ыш проц уру, при м про р ммную р ли цию л оритм сортиро ки слияни м.

Сортирок слияни м

procedure sort_sl(a : mas; l; r : index); VAR k : index;

begin

if l =6 r then

{ k := (l + r) div 2; sort_sl(l; k); sort_sl(k + 1; r); sl(a; l; k; r);

}

end.

Р курр нтно ур н ни л оритм сортиро ки слияни м им ти :

T (n) = 2T (n=2) + Cn:

По т ор м о р ш нии р курр нтно о ур н ния, тру о мкость опи- с нно о л оритм сть O(n log n) .

2.6.СОРТИРОВКА С ПОМО РАЗДЕЛЕНИ

Д нный л оритм сортиро ки ыл р р от н Ч.Хо ром и я ля т- ся о ним и с мых ыстрых м то о сортиро ки м сси . Д нныйл оритм ч сто н ы ют ыстрой сортиро кой (Quicksort).

Суть л оритм состоит сл ующ м.

1.Вы р ть н который эл м нт x ëÿ ñð í íèÿ (ýòî ìî òûòü ñð íèé, ï ð ûé èëè ïîñë íèé ýë ì íò).

2.Исполь уя о м ны, ыполнить проц уру р л ния, суть

которой ключ тся сл ующ м: р ить м сси н ч -

ñòè: ë óþ ñ êëþ÷ ìè x è ïð óþ ñ êëþ÷ ìè x . Д нныйст ия мо ут ыть ыполн ны, н прим р, сл ующим л о- ритмом:

просм три м м сси сл , пок н стр тим эл м нт a[i] > x ;

31

просм три м м сси спр , пок н стр тим a[j] < < x ;

ì íÿ ì ì ñò ìè ýòè ýë ì íò ;

про ол м просмотр и о м н о т х пор, пок н у ут просмотр ны с эл м нты м сси (i > j) .

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

При м про р ммную р ли цию л оритм ыстрой сортиро - ки.

Ал оритм ыстрой сортиро ки

procedure quiq(l; r : index); VAR x:item;

begin

x := a[(l + r) div 2]; i := 1; j := r; repeat

{

while a[i] < x do inc(i); while a[j] > x do dec(j); if{i j then

xchg(a[i]; a[j]); inc(i); dec(j);

}

}

until (i > j)

if l < j then quiq(l; j); if i < r then quiq(i; r); end.

Построим р курр нтно ур н ни ля л оритм ыстрой сортиро ки. Проц ур р л ния n ýë ì íòî òð ó ò Cn оп р ций, т к к к к ый эл м нт посл о т льности н о хо имо ср нить

32

с ы р нным эл м нтом, поэтому р курр нтно ур н ни у т им ть и :

T (n) = Cn + T (jA1j) + T (jA2j);

jA1j ð ì ð ë îé ÷ ñòè ì ññè ïîñë ïðîö óðû ð ë - íèÿ, jA2j р м р пр ой ч сти м сси посл проц уры р -л ния. Если пр поло ить, что р л ни ср н м р и т ч сть попол м, то

T (n) = Cn + 2T (n=2)

и по т ор м о р ш нии р курр нтно о ур н ния тру о мкость л-оритм ыстрой сортиро ки ср н м сть O(n log n) .

Õó øèì ñëó÷ ì ÿ ëÿ òñÿ ñèòó öèÿ, êî ê ÷ ñò ñð íè-

мо о эл м нт ы ир тся н и ольший и с х эл м нто р с- см три мой ч сти. В этом случ посл проц уры р л ния jA1j = n 1 è jA2j = 1 . Ð êóðð íòíî óð í íè ó ò èì òü è :

T (n) = Cn + T (n 1) + T(1)

и тру о мкость л оритм ыстрой сортиро ки ху ш м случсть O(n2) .

Ñ ì ×.Õî ð ïð ïîë ò, ÷òî x н о ы ир ть случ йно, ля н ольших ы орок ост н ли ться н м и н .

2.7.НАХОЖДЕНИЕ k-ОГО НАИМЕН ЕГО ЛЕМЕНТА

Ì è íîé ì ññè è n эл м нто н ы тся т кой о эл м нт, который стоит н м ст bn2 c отсортиро нном м сси .

Для посл о т льности эл м нто : 18 24 12 27 19 ì è í ð í 19 .

Оч и но, что ля н хо ния м и ны мо но сн ч л отсор-

òèðî òü ì ññè , ïîñë ýòî î û ð òü ýë ì íò. Òî ýòî ïîòð -ó ò ëó÷ø ì ñëó÷ O(n log n) îï ð öèé.

Поиск м и ны я ля тся ч стным случ м ол о щ й чи: н хо ни k -î î í èì íüø î ýë ì íò è n ýë ì íòî .

Р ссмотрим л оритм ля н хо ния k -î î í èì íüø î ýë - ì íò è n ýë ì íòî , ïð ëî ííûé ×.Õî ðîì.

33

Ал оритм 1

ëÿ í õî íèÿ k -î î í èì íüø î ýë ì íò è n ýë ì íòî

1.Выполня тся оп р ция р л ния н отр к [L; R] , ï ð-îí ÷ ëüíî L = 1; R = n , ê ÷ ñò ñ ï ð òîð ð òñÿ x = a[k] (см. л оритм ыстрой сортиро ки). В р ульт т р л ния получ ются ин ксы i; j ò êè , ÷òî

a[h] < x; h < i; a[h] > x; h > j; i > j;

(a)ñëè j k i , òî ýë ì íò a[k] ð ëÿ ò ì ññè í

ч сти ну ной пропорции; л оритм к нчи т с ою р оту;

(b)ñëè i < k , òî û ð ííî í ÷ íè x ыло слишком м - ло, поэтому проц сс р л ния н о хо имо ыполнить н отр к [i; R] ;

(c)ñëè k < j , òî í ÷ íè x ыло слишком лико, поэтому проц сс р л ния н о хо имо ыполнить н отр к

[L; j] .

2.Проц сс р л ния по торять о т х пор, пок н о никн т ситу ция 1(a). Зн ч ни x ñîîò òñò ó ò í ÷ íèþ í èì íü- ø î ýë ì íò .

Сх м тично л оритм мо т ыть пис н сл ующим о р ом:

L := 1;

R := n;

while (L < R) do

{

x := a[k];

ð ë íè a[L] a[R] if i < k then L:=i;

if k < j then R:=j;

}

34

T (n) = Cn + T (n 1)
T(n) = Cn + T

З пиш м р курр нтно ур н ни опис нно о л оритм .

Åñëè ïð ïîëî èòü, ÷òî ð ë íè ñð í ì ð è ò ÷ ñòü,

н хо ится тр у мый эл м нт попол м, то р курр нтно ур - н ни у т им ть и :

n

2

и по т ор м о р ш нии р курр нтно о ур н ния тру о мкость л-оритм ср н м сть O(n) . Т ким о р ом, получ м я но пр - имущ ст о по ср н нию с прямыми м то ми, сн ч л сортиру тся с мно ст о, т м ы ир тся k -ûé ýë ì íò.

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

и тру о мкость л оритм этом случ O(n2) .

Р ссмотрим т п рь щ о ин л оритм н хо ния k -о о н и- м ньш о эл м нт , тру о мкость которо о сть O(n) õó ø ì ñëó÷ .

Ал оритм 2

ëÿ í õî íèÿ k -î î í èì íüø î ýë ì íò è n ýë ì íòî .

1.Р и м исхо ную посл о т льность S í n5 по посл -о т льност й по пять эл м нто к ой. В к ой т кой по посл о т льности н хо им м и ну. то потр у т C1n îï ð öèé.

2.И н й нных н п р ом ш м и н строим посл о т ль-

ность M и р курси но н хо им м и ну x . Т к к к лин р ссм три мой посл о т льности M ð í n5 , то тру о-мкость н хо ния м и ны ля этой посл о т льности ð í T n5 .

3.Для получ нно о эл м нт x ыполним проц сс р л ния,

который потр у т C2n оп р ций. В р ульт т ся р ссм - три м я посл о т льность S ó ò ð èò í ÷ ñòè: S1 ,

ýë ì íòû í îëüø x ; S2 , ýë ì íòû í ì íüø x .

35

Î í è ÷ ñò é ìî ò ûòü îò ðîø í , ïðè÷ ì í ñëî íî

пок ть, что колич ст о эл м нто к ой и ч ст й н м ньш n4 .

4.Ð ø ì ÷ó í õî íèÿ k -о о н им ньш о эл м нт ост шихся 34n ýë ì íòî , ÷òî ïîòð ó ò ð ìÿ T ( 34n ) .

Т ким о р ом р курр нтно ур н ни ля опис нно о ышл оритм им т и :

n

 

 

3n

 

T (n) = C1n + T 5

+ C2n + T 4

èëè

n

3n

:

 

 

 

T (n) = Cn + T 5

+ T 4

 

Ð ø ÿ ííî óð í íè ì òî îì ïî ñò íî êè, ïðè g(n) = 20Cn или м то ом р курси ных р ь , получ м, что тру о мкость при нно о ыш л оритм сть O(n) .

Сл у т отм тить, что сли исхо ную посл о т льность р -и ть н с м рки, то р курр нтно ур н ни у т им ть и

n

3n

 

28

 

T (n) = C3n + T 7

+ T 4

3

C1n:

Óïð í íè .

Н пис ть р курр нтно ур н ни , сли эл м нты р и ются н руппы по m эл м нто . Про сти н ли тру о мкости л о- ритм исимости от ы р нно о н ч ния m .

2.8.ЛЕКСИКОГРАФИЧЕСКА СОРТИРОВКА

Пусть S н которо мно ст о н котором н -лин йный поря ок.

Л ксико р фич ским поря ком н мно ст S н ы т- ся т ко про ол ни отнош ния н корт и (списки) эл м нто и S при котором (s1; s2; ; sp) (t1; t2; ; tq) î í ÷ ò ûïîë- í íè î íî î è óñëî èé:

ñóù ñò ó ò ò êî ö ëî j , ÷òî sj tj è ëÿ ñ õ i < j ñïð -

ëè î si = ti ;

36

p q è si = ti ïðè 1 i p .

Оч и но, что лю о ц ло число мо но счит ть k -÷ë ííûì êîðò ì öèôð îò 0 î n 1 , n осно ни сист мы счис- л ния, которой р ссм три ются цифры.

Р ссмотрим сн ч л сортиро ку k -чл нных корт й, эл м н- ты которых ключ нны инт р л от 0a0 î 0z0 .

Сортиро к ыч рпы ни м.

1.Со им исхо ную оч р ь, которую н с м с р ссм - три мы корт и: ch : array[1::n] of string;

2.Ор ни у м колич ст о оч р й, р но колич ст у м л ньких л тинских ук лф ит . К ую т кую оч р ь ó-ì í û òü ÷ ðï êîì: mas : array[0a0::0z0] of TOcher;

3.Колич ст о ит р ций р но лин корт й.

í i -ой ит р ции и т сортиро к по k i+1 компон н- т корт й, т. . н который корт ch[j] î ëÿ òñÿ î÷ ð ü mas[ch[j][k i + 1]] .

посл ыполн ния i -ой ит р ции, исхо ной оч р и н - хо ится посл о т льность корт й, получ нн я р -ульт т "п р писы ния"(у л ния и о л ния) эл - м нто с х н пустых оч р й, н чин я с оч р и, - р с н ч л которой н хо ится п р м нной mas[0a0] , èê í÷è ÿ - mas[0z0] .

Построим р курр нтно ур н ни ля опис нно о л оритм . Пусть m колич ст о ор ни о нных оч р й, то тру о м- кость сортиро ки корт й по н которой компон нт сть O(n+m) (колич ст о корт й n è èõ ìî íî ð ñïð ëèòü ïî î÷ ð -ÿì ð ìÿ O(n) ; ëÿ ñö ïë íèÿ m î÷ ð é òð ó òñÿ ð ìÿ O(m) ). Òî ð êóðð íòíî óð í íè ó ò èì òü è :

T (k) = (n + m) + T (k 1):

Т ким о р ом, тру о мкость опис нно о ыш л оритм цифро-ой сортиро ки корт й о ин ко ой лины сть O(k (n + m)) .

При м про р ммную р ли цию л оритм сортиро ки ы- ч рпы ни м.

37

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

begin

var i; j; k; l:byte; z:char; k := length(ch[1]); for z := 0a0 to 0z0 do

{

mas[z]:con := nil; mas[z]:nach := nil;

}

 

for i := 1 to k do

 

{

 

for j := 1 to n do mas[ch[j][k i + 1]]:in_ocher(ch[j]);

l := 1;

 

for z := 0a0 to 0z0 do

6

 

while mas[z]:nach = nil do

{

 

ch[l] := mas[z]:out_ocher;

inc(l);

 

}

 

}

 

end.

 

Т п рь п р й м к р ссмотр нию л оритм сортиро ки корт -й р ной лины. Сн ч л сортиру мы корт и р спол ютсяпоря к у ы ния лин. Пусть lmax лин с мо о линно-о корт , то сортиро к ыч рпы ни м прои о ится lmax р . Н н ч льном эт п исхо ную оч р ь ля сортиро ки по- м щ ются только корт и лины lmax и н п р ом эт п ля сортиро ки исполь у тся только компон нт lmax . Посл это о исхо ную оч р ь носятся сн ч л с корт и лины lmax 1 ,т м о ляются эл м нты н пустых с н риро нных оч р й, н чин я с оч р и, р с н ч л которой н хо ится п р м нной mas[0a0] , è ê í÷è ÿ - mas[0z0] . Н сл ующих эт п х происхо-ит сортиро к соот тст ующ й компон нты lmax 1; lmax 2; : : :

н ло ичным о р ом. Пусть li ëèí i -î î êîðò , òî îïè-

с нный ыш л оритм упоря очи т корт и р ной лины

n

ð ìÿ O(l + m) , l = Pi=1 li .

38

à ë 3

РАЗРАБОТКА ФФЕКТИВН Х АЛГОРИТМОВ

3.1.МЕТОД РАЗДЕЛ Й И ВЛАСТВУЙ

Ì òî "ð ëÿé è ë ñò óé" êëþ÷ òñÿ ñë óþù ì.

1.З ч р и тся н н исимы по чи (ч сти), которы н п р с к ются (по ч это т ч , но м нь- ш й р м рности).

2.Ê ÿ ïî ÷ ð ø òñÿ îò ëüíî.

3.И от льных р ш ний по ч строится р ш ни исхо ной

֏.

И п р о о пункт ср у о ник т опрос: к к р ить чу н по чи, т. . к кой р м рности ол ны ыть по чи. В т х- ник "р ляй и л ст уй"(и н только н й) ок ы тся пол - ным принцип л нсиро ки, который пр пол т, что ч р -и тся н по чи при ли ит льно р ных р м рност й, т. . и т по р ни р но сия.

Ïðèì ð 1.

Пр поло им, что н о хо имо отсортиро ть м сси и n эл - м нто . Р ссмотрим л оритм сортиро ки, которы исполь у- ют т хнику "р ляй и л ст уй": сортиро ку слияни м ( л н- сиро к ) и сортиро ку ы ором.

1.Р ссмотрим л оритм сортиро ки слияни м: исхо н я ч

р и тся н по чи р ных р м рност й ( n=2 , ïð ïî- ë òñÿ, ÷òî n = 2k ). К я по ч р ш тся от льно ( лим н ч сти и т. .) посл ч о прои о им слияни отсортиро нных по посл о т льност й. Р курр нтно

39

ур н ни им т сл ующий и :

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

T (1) = 1:

По т ор м о р ш нии р кур нтно о ур н ния получ м, что тру о мкость л оритм сть O(n log n) .

2.Р ссмотрим л оритм сортиро ки ы ором: н йти миним льный эл м нт и пом нять о м ст ми с п р ым эл м нтом,

ср и ост шихся n 1 эл м нто но ь н йти миним льный и пом нять о со торым эл м нтом и т. . Р курр нтно ур н ни им т сл ующий и :

T (n) = Cn + T (n 1); n > 1

T (1) = 1:

По т ор м о р ш нии р курр нтно о ур н ния получ м, что тру о мкость л оритм сть O(n2) .

В л оритм сортиро ки ы ором ч р и л сь н н р ны ч сти: 1 è n 1 , т. . н т л нсиро ки, что при-о ит к сло ности ол ху ш й, по ср н нию с л оритмом слияния.

Ïðèì ð 2.

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

л оритм .

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

сл о т льно просм три я эл м нты м сси , ср ни м

к ый посл ующий и n 2 эл м нто с м ксим льным и миним льным эл м нт ми ( 2(n 2) ср н ния). Колич ст о ср н ний, которо ыполня т л оритм, сть

T(n) = 2n 3

.

40

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