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

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

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

Ал оритм 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

Ал оритм сортиро ки с помощью прямо о ключ ния

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

Ñë ó ò îòì òèòü, ÷òî ïð îé ÷ ñòè îòð ê [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

Ал оритм пу ырько ой сортиро ки

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

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

Ал оритм ш йк рной сортиро ки

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

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

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