![](/user_photo/1144_wzNgE.jpg)
Полезная методичка
.pdf![](/html/1144/349/html_rS5Bm8Zart.Ng0Z/htmlconvd-iF9jw321x1.jpg)
Ал оритм 3
function F(k:byte):word;
begin
if k = 1 then F := 2; else
if k-÷ òíî then F := SQR (F (k=2)) else F := SQR (F((k 1)=2)) 2;
end;
Ð êóðð íòíî óð í íè : T (1) = 2; T(n) = T(n=2) + 2; n > 1:
По т ор м о р ш нии р курр нтных ур н ний T(n) = (log n) . Ò ê ê ê n = 2l , то тру о мкость опис нно о ыш л оритм сть
O(l) , т. . л оритм 3 я ля тся полиноми льным.
Ïðèì ð 2.
Оц нить тру о мкость л оритм н хо ния н и ольш о о - щ о лит ля ля ух чис л
NOD(a; b) = NOD(b; a mod b):
Áó ì ïð ïîë òü, ÷òî a > b . Для р ш ния пост л ной чи сн ч л ок м, что посл ыполн ния н ол , ч м ух ш ол оритм (по ш ми л оритм мы поним м сл ующи
îï ð öèè: a mod b è b mod c ) ë íûé ÷ë í ( = max(a; b) ) ум ньшится н м н , ч м 2 р .
NOD(a; b) = NOD(b; c) = NOD(c; b mod c);
c = a mod b .
Пусть b > a=2 , òî c = a mod b = a b < a a=2 < a=2 . Т ким о р ом мы получили, что ш л оритм c < a=2 . Åñëè b < a=2 , то у о ин ш л оритм ( a mod b ) л ный чл н ум ньшился н м н , ч м 2 р .
Т п рь построим р курр нтно ур н ни . Пусть n = max(a; b) , òî T(n) = 2 + T (n=2) è T (n) = (log n) . Учиты я, что l log n , получ м, что тру о мкость при нно о л оритм н - хо ния н и ольш о о щ о лит ля сть O(l) , т. . л оритм я ля тся полиноми льным.
21
à ë 2
СОРТИРОВКА
В нной л , н прим р л оритмо сортиро ки, мы про монстриру м спосо получ ния оц нки сло ности л оритмо с исполь-о ни м р курр нтных ур н ний.
2.1. ОСНОВН Е ПОН ТИ И ОПРЕДЕЛЕНИ
В сло рях сло о "сортиро к "(sorting) опр ля тся к к "р спр -л ни , от ор по сорт м; л ни н к т ории, сорт , р ря ы", о н ко, про р ммисты о ычно исполь уют это сло о ол у - ком смысл , о о н ч я им п р руппиро ку эл м нто н котором опр л нном поря к . тот проц сс, по луй, сл о ло ы н -
ть н сортиро кой, упоря очи ни м (ordering) или р н иро-ни м (sequencing). О н ко, сло о "сортиро к "у прочно ошлопро р ммистский р он, поэтому мы у м льн йш м исполь о ть сло о "сортиро к " у ком смысл "сортиро к по поря ку".
Ц ль сортиро ки ключ тся о л ч нии поиск эл м нто отсортиро нном мно ст .
З ч м р ссм три ются л оритмы сортиро ки ?
1.Проц сс сортиро ки мо т ыть осущ ст л н р личными л-оритм ми. Т к к к к ый и л оримо им т с ои пр - имущ ст и н ост тки, то ы ор л оритм ол н осущ - ст ляться исхо я и конкр тной пост но ки чи.
2.Большо р ноо р и л оритмо сортиро ки, при о ит к н о хо имости н ли этих л оритмо (их прои о ит льности).
3.Н прим р л оритмо сортиро ки л ко проиллюстриро-ть, к к пут м усло н ния л оритмо (н смотря н сущ - ст о ни простых и оч и ных м то о ) о иться ыи ры- ш эфф кти ности.
22
В м н которы понятия и о о н ч ния.
Ч стичным поря ком н мно ст S н ы тся т ко и- н рно отнош ни R , ÷òî ëÿ ëþ ûõ a; b; c è S ыполняются сл ующи усло ия:
1. |
a R a |
( R ð ôë êñè íî); |
|
2. |
a R b |
è b Rc ! a R c |
( R òð í èòè íî); |
3. |
a R b |
è b Ra ! a = b |
( R нтисимм трично). |
Ïðèì ð 1.
Отнош ни н мно ст ц лых чис л (1 2 n) .
Ïðèì ð 2.
Отнош ни ключ ния мно ст :
f;gf1gf2gf3gf1; 2gf1; 3gf2; 3gf1; 2; 3g:
Лин йным или полным поря ком н мно ст S н ы -тся т кой ч стичный поря ок R í S ля которо о ля лю ых
óõ ýë ì íòî a è b è S ыполня тся ли о a R b ëè î b R a . Отнош ни н мно ст ц лых чис л лин йный поря ок. Отнош ни ( ключ ния мно ст ) н т (н прим р, н ль я
с я ть отнош ни м эл м нты f2g è f3g .
Сформулиру м т п рь чу сортиро ки. Пусть н посл -о т льность и n ýë ì íòî
a1; a2; ; an;
которы н о м писями, ы р нных и мно ст , н котором
í ëèí éíûé ïîðÿ îê. Ê ÿ ïèñü aj èì ò êëþ÷ kj , который и упр ля т проц ссом сортиро ки (помимо ключ , пись мо т им ть н которую ополнит льную информ цию, котор я нлия т н проц сс сортиро ки, но с присутст у т этой писи). Тр у тся н йти т кую п р ст но ку = ( (1); (2); ; (n)) ýòèõ n пис й, посл которой ключи р споло ились ы н у ы-ющ м поря к :
k (1) k (2) k (n):
М то сортиро ки н ы тся устойчи ым, сли проц сс сортиро ки относит льно р споло ни эл м нто с о ин ко ыми
23
ключ ми н и м ня тся (пр пол тся, что эл м нты у ыли отсортиро ны по н которому торичному ключу):
(i) < (j) , ñëè k (i) k (j) è i < j .
При н ли л оритмо сортиро ки н с у ут инт р со ть м - то ы сортиро ки "н том м ст ", которы н пр пол ют п - р сылку но ый м сси отсортиро нных эл м нто , то сть пр - пол ющи экономно исполь о ни п мяти.
Дост точно хороший о щий л оритм сортиро ки тр чи т н сортиро ку n ïèñ é ð ìÿ ïîðÿ ê n log n ; при этом тр у-тся около log n "прохо о "по нным. Сущ ст уют ол просты "прямы м то ы", которы тр чи ют н сортиро ку р мя поря к n2 (эти м то ы л ко поним ть, они ол коротки и ля м лых н ч ний n ч сто ок ы ются ол ыстро йст ующими).
Вс м то ы сортиро ки "н том м ст "усло но мо но р -ить н три руппы:
1.Сортиро к с помощью ключ ния (by insertion).
2.Сортиро к с помощью ы л ния (by selection).
3.Сортиро к с помощью о м но (by exchange).
2.2. СОРТИРОВКА С ПОМО
ÏÐ ÌÎÃÎ ÂÊË ×ÅÍÈ
Пусть 1 < i n è ýë ì íòû a1; a2; ; ai 1 у упоря оч ны. Н о хо имо ять эл м нт ai и о ит ну но м сто у упоря-
оч нной посл о т льности (поскольку эл м нт ai к к ы "проник т н поло нный ля н о уро нь", то проц сс поиск тр -у мой по иции ч сто н ы ют "прос и ни м").
В исимости от то о, к к происхо ит проц сс ключ ния эл - м нт , р лич ют прямо ключ ни и оично ключ ни .
При м л оритм сортиро ки с помощью прямо о ключ ния. Для то о, что ы м сто ух усло ий оконч ния цикл while (кон ц инт р л ли о н й но м сто ст ки ля эл м нт ) исполь о ть о но, м рь р a[0] .
24
![](/html/1144/349/html_rS5Bm8Zart.Ng0Z/htmlconvd-iF9jw325x1.jpg)
Ал оритм сортиро ки с помощью прямо о ключ ния
begin
var i; j : index; x : item; for i:=2 to n do
{ x:=a[i]; a[0]:=x; j:=i;
while (x < a[j 1]) do { a[j]:=a[j-1]; dec(j); } a[j]:=x;
}
end.
Оц ним тру о мкость при нно о ыш л оритм . Р курр нт-
но ур н ни у т им ть сл ующий и : T (n) = T (n |
|
1) + |
+ Cn; T (1) = 0: Ал оритм им т тру о мкость O(n2) . |
|
З м тим, что т к к к ото я посл о т льность у упоря о- ч н , то ля поиск м ст ключ ния мо но исполь о ть м тоихотомии (поиск л ни м попол м или оичный поиск), ля которо о к ый р исключ тся и р ссмотр ния поло ин эл м н-
то . Если лин йный поиск ср н м тр о л n=2 ñð í íèé í n эл м нт х, то оичный поиск log2 n ñð í íèé ( õó ø ì ñëó÷ ).
При м л оритм оично о ключ ния.
Ал оритм оично о ключ ния
begin
var i; j; L; R; m : index; x : item; for i:=2 to n do
{
x := a[i];L := 1;R := i; while (L < R) do
{ m = L+R ;
if a m < x then L m else R m;
[ ] 2 = + 1 =
}
for j := i downto (R + 1)
{ a[j] := a[j 1]; } a[R]=x;
}
end.
25
![](/html/1144/349/html_rS5Bm8Zart.Ng0Z/htmlconvd-iF9jw326x1.jpg)
Ñë ó ò îòì òèòü, ÷òî ïð îé ÷ ñòè îòð ê [L; R] поиск осу- щ ст ля тся ыстр , ч м л ой. Сл у т т к отм тить, чтол оритм оично о ключ ния н по оля т улучшить оц нку чис- л п р сылок эл м нто , котор я ост тся ху ш м случ O(n) (хотя получ но улучш ни оц нки ля числ ср н ний эл м нто O(log2 n) ). Поэтому р курр нтно ур н ни ля л оритм оич- но о ключ ния ост тся т м .
2.3. СОРТИРОВКА С ПОМО ПР МОГО В - БОРА
Прост йш я сортиро к с помощью прямо о ы ор с о ится к сл -ующ му:
1.Вы р ть эл м нт с н им ньшим ключом и пом нять о с п ð-ûì ýë ì íòîì.
2.По торить йст ия с ост шимися n 1 ýë ì íòîì, ïîê í îñò í òñÿ 1 ýë ì íò.
К к сл у т и опис ния л оритм , м то прямо о ы ор сси- м трич н прямому ключ нию: мы просм три м эл м нты ост - ш йся исхо ной посл о т льности и получ м о ин эл м нт упоря оч нной посл о т льности.
Ал оритм сортиро ки с помощью прямо о ы ор
begin
var i; j; k : index; x : item; for i:=1 to n-1 do
{ k := i;
for j := i + 1 to n do
if a[j] < a[k] then k = j; x := a[k];
a[k] := a[i]; a[i] := x;
}
end.
26
Оц ним тру о мкость при нно о ыш л оритм прямо оы ор . Поиск м ксим льно о эл м нт и n эл м нто и о л - ни о у ото ую упоря оч нную посл о т льность тр у тху ш м случ Cn оп р ций (сл у т отм тить, что колич ст о ср н ний ключ й н исит от н ч льно о р споло ния эл м н- то , колич ст о п р сылок миним льно, ко м сси упоря оч н (=3), и м ксим льно, ко эл м нты р споло ны о р тном поря к ); посл ч о по торя м опис нный проц сс ля ост шихся n 1 ýë ì íòî . Òî ð êóðð íòíî óð í íè ó ò èì òü ñë ó- þùèé è :
T (n) = Cn + T (n 1); T(1) = 0:
Ал оритм прямо о ы ор им т тру о мкость O(n2) . Н пр к- тик , к к пр ило, л оритм с прямым ы ором пр почтит льнл оритм с прямым ключ ни м. О н ко, сли ключи н ч л упоря оч ны или почти упоря оч ны, то прямо ключ ни у т ост ться н сколько ол ыстрым.
2.4.ОБМЕНН Е АЛГОРИТМ
Ал оритм о м н осно ы тся н ср н нии ух сос них эл - м нто и о м н их м ст ми; проц сс по торя тся о т х пор, пок эл м нты н у ут упоря оч ны. Сл у т отм тить, что и ля р с- смотр нных р н л оритмо т к им л м сто о м н эл м нто , о н ко о м ных л оритм х о м н м ст ми ух эл м нто пр - ст ля т со ой х р кт рн йшую осо нность проц сс .
2.4.1Пу ырько я сортиро к
Р ссмотрим стро о о м нный л оритм (пу ырько я сортиро к ).
Ал оритм ключ тся просмотр исхо ной посл о т льности спр н л о и при к ом ш м ньший и ух сос них эл м нто п р м щ тся к л ой по иции. В р ульт т п р о о просмотр с мый м л нький эл м нт у т н хо иться кр йн й л ой по иции. Посл ч о по торя м опис нный ыш проц сс, р с- см три я к ч ст исхо ной посл о т льности м сси , н чи- н я со 2-ой по иции и т. .
27
![](/html/1144/349/html_rS5Bm8Zart.Ng0Z/htmlconvd-iF9jw328x1.jpg)
Ал оритм пу ырько ой сортиро ки
begin
var i; j : index; x : item; for i:=2 to n do
for j := n downto i do if a[j 1] > a[j] then { x := a[j 1];
a[j 1] := a[j]; a[j] := x
}
end.
Оц ним тру о мкость при нно о ыш л оритм пу ырько-ой сортиро ки.
П р м щ ни миним лно о и n ýë ì íòî êð éíþþ ë óþ ïî èöèþ òð ó ò õó ø ì ñëó÷ C (n 1) оп р ций (число ср - н ний ключ й н исит от поря к эл м нто ; число прис и - ний миним льно (=0), сли эл м нты упоря оч ны и м ксим льно,сли они р споло ны о р тном поря к ); посл ч о по торя м ук нный проц сс ля ост шихся n 1 эл м нто . То р кур- р нтно ур н ни у т им ть сл ующий и :
T (n) = C (n 1) + T (n 1); T(1) = 0:
Ал оритм пу ырько ой сортиро ки им т тру о мкость O(n2) .
2.4.2йк рн я сортиро к
Ан ли л оритм пу ырько ой сортиро ки при о ит к сл ующим н лю ниям:
1.Если при н котором и прохо о н т п р ст но ок, то л о- ритм мо но ршить.
2.Если фиксиро ть ин кс k посл н о о м н ( с п ры л это о ин кс у упоря оч ны), то просмотр мо но
ршить н этом ин кс , н и ти о ни н о пр лля ин кс i .
3.Ч р о ни н пр л ний ля просмотр ( сплы т с мый л кий, тон т с мый тя лый).
28
![](/html/1144/349/html_rS5Bm8Zart.Ng0Z/htmlconvd-iF9jw329x1.jpg)
При м про р ммную р ли цию л оритм ш йк рной сортиро ки.
Ал оритм ш йк рной сортиро ки
VAR j; k; L; R : index; x : item; begin
L := 2; R := n; k := n; repeat
for j := R downto L do if a[j 1] > a[j] then { x := a[j 1];
a[j 1] := a[j]; a[j] := x; k := j;
}
L := k + 1;
for j := L to R do
if a[j 1] > a[j] then { x := a[j 1];
a[j 1] := a[j]; a[j] := x; k := j;
}
R := k 1; until (L > R); end.
йк рн я сортиро к с усп хом исполь у тся т х случ ях, ко-
и стно, что эл м нты почти упоря оч ны (н пр ктик этоы т сьм р ко).
2.5.СОРТИРОВКА СЛИ НИЕМ
Сортиро к слияни м ключ тся сл ующ м:
1.лим посл о т льность эл м нто н ч сти;
2.сортиру м от льно к ую и ч ст й;
29
![](/html/1144/349/html_rS5Bm8Zart.Ng0Z/htmlconvd-iF9jw330x1.jpg)
3.прои о им слияни отсортиро нных ч ст й посл о т льности (при слиянии ср ни м н им ньши эл м нты и м ньший и них отпр ля м список ы о ; по торя м опис н- ны йст ия о т х пор, пок н исч рп тся о н и ч ст й;с ост ши ся эл м нты ру ой ч сти п р сыл м списокы о ).
При м сн ч л проц уру слияния отсортиро нных ч ст й посл о т льности.
Слияни отсортиро нных ч ст й посл о т льности
procedure sl(var a : mas; l; z; r : index); VAR c : mas; i; j; k : index;
begin
i := l; j := z + 1; k := 1; while (i z) and (j r) do if a[i] < b[j] then
{ c[k] := a[i]; inc(i); inc(k);
}
else
{ c[k] := b[j]; inc(j); inc(k);
}
while (i z) do { c[k] := a[i]; inc(i); inc(k);
}
while (j r) do { c[k] := b[j]; inc(j); inc(k);
}
k := 0;
for i := l to r do {inc(k);
a[i] := c[k];
}
end.
30