
Полезная методичка
.pdf
Исполь уя опис нную ыш проц уру, при м про р ммную р ли цию л оритм сортиро ки слияни м.
Сортирок слияни м
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

З пиш м р курр нтно ур н ни опис нно о л оритм .
Åñëè ïð ïîëî èòü, ÷òî ð ë íè ñð í ì ð è ò ÷ ñòü,
н хо ится тр у мый эл м нт попол м, то р курр нтно ур - н ни у т им ть и :
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