Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Алгоритмдеу жане багдарламалау негиздери 4 г.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
2.73 Mб
Скачать

16 Дәріс тақырыбы: Ішкі сұрыптау алгоритмдері: Екілік қосылымға талдау жасау.

Егер жаңа элемент қою қажет болатын а1…аі-1 дайын тізбегінің өзі реттелгендігіне назар аударсақ тікелей қосылымы бар алгоритмді оңай жақсартуға болады. Дайын тізбектің ортасымен салыстыру әрекеті жасалатын, ал одан кейін тепе-тең бөлу процесі қосу нүктесі табылғанға дейін жүретін екілік іздеуге тоқталу. Сұрыптаудың мұндай модификацияланған алгоритмі екілік қосылымы бар (binary insertion) деп аталады, және ол листингпен берілген.

Екілік қосылымды талдау. Егер L = Rболса, қосылу орны анықталады. Осылайша іздестіру соңында аралық бірыңғай ұзындықта болуы тиіс; демек, оны тепе-тең бөлу i log i рет жүргізіледі. Осылайша

С

Осы соманы аралықпен аппроксимациялаймыз

Integral (1:n) .. (4)

мұнда с = log e = 1/1n 2 = 1. 4426.... Салыстырмалар саны элементтердің бастапқы ретіне байланысты болмайды. Алайда іздестіру аралығын тепе-тең бөлшектеу кезінде көрінетін бөлу кезінде бөлінген бөліктерді алып тастау жүреді, салыстырмалардың ақиқат саны бір бірлікке көп болуы мүмкін.

Листинг. Екілік қосылысы бар әдіспен сұрыптау

PROCEDURE Binarylnsertion;

VAR i, j, m, L, R: index, x: item;

BEGIN

FOR i := 2 TO n DO BEGIN

x := a[i]; L := 1; R := i;

WHILE L < R DO BEGIN

m := (L+R) DIV 2;

IF a[m] <= x THEN L := m+1 ELSE R := m; END;

FOR j := i DOWNTO R+1 DO a[j] := a[j-1]; a[R] := x

END

END; {Binarylnsertion}

Мұның бәрі тізбектің төменгі бөлігінде қосылу орны жоғарғы бөлікке қарағанда орта есеппен бірқатар шапшаң іздестірілетініне әкеліп соқтырады, сондықтан элементтер аздап реттелген жағдай жақсырақ. Егер бастапқы күйде элементтер кері ретпен орналасқан болса салыстырмалардың ең аз саны талап етіледі, ал егер олар реттеліп қойылған болса – ең жоғарғы сан қажет болады. Демек, іздестіру алгоритмінің жасанды қозғалысы туралы айтуға болады:

Csn*(logn-loge±0.5).

Өкінішке орай екілік іздестіруді енгізумен байланысты пайда болған жақсартулар сандардың қажетті жылжымаларының санына емес тек қана салыстырмалар санына қатысты. Элементтің, яғни түйіннің және онымен байланысты ақпараттың қозғалысы екі түйіннің салыстырмалысына қарағанда едәуір көп уақыт алады, онда нақты жақсару соншалықты елеулі емес, М маңызды мүшесі п2 ретінде қалуды жалғастырады. Сұрыпталған жиымды сұрыптау тікелей қосылысы бар тізбекті сұрыптау жағдайына қарағанда шын мәнінде көп уақытты талап етеді.

Бұл мысал «айқын жақсарту» көбінесе үлкен жетістіктерге жеткізбейді, ал кейбір жағдайларда мұндай «жақсарулар» нашарлатуға әкеліп соқтыруы мүмкін. Осы айтылғандардан кейін қосылыстардың көмегімен сұрыптау цифрлы машиналар үшін соншалықты қолайлы әдіс болып табылмайды: элементтердің тұтас тобын бір позицияға жылжыта отырып бір элементті қосу тиімді емес. Азғантай аралыққа болса да ығыстыру бір жалғыз ғана элементпен байланысты болатын болса мұндай әдіс жақсы нәтиже береді деген әсер қалады.

17 Дәріс тақырыбы: Көпіршікті және шейкерлік сұрыптауды талдау.

12, 18, 42 44 55 67 94 06 жиымын жетілдірілген көпіршікті сұрыптаудың көмегімен бір қарағаннан реттуге болады, ал 94 06 12 18 42 44 55 67 жиымын сұрыптау үшін бұл ретте алынған, листингте жүзеге асырылған алгоритмді біз сәйкесінше шейкерлік сұрыптау (ShakerSort) деп атаймыз. Кесте сұрыптаманы сегіз кілттің жаңа тәсілімен сипаттайды.

L=

2

3

3

4

4

R=

8

8

7

7

4

Dir=

44

06

06

06

06

55

44

44

12

12

12

55

12

44

18

42

12

42

18

42

94

42

55

42

44

18

94

18

55

55

06

18

67

67

67

67

67

94

94

94

Кесте. Шейкерлік сұрыптаудың мысалы

Қатаң алмасу алгоритміндегі салыстырмалар саны

С = (n2-n)/2

ал элементтердің орнын алмастырудың ең аз, орташа және ең жоғарғы саны (меңгеру) сәйкесінше

Mmin=0, Mavg=3*(n2-n)/2, Mmax=3*(n2-n)/4

Жақсартылған әдістерді, әсіресе шейкерлік сұрыптауды талдау барынша күрделі. Салыстырулардың ең төменгі саны Сmin =n-1. Кнут көпіршікті сұрыптауды жақсарту үшін өтулердің орташа саны n-k1 n1/2 пропорциональды, ал салыстырулардың орташа саны 1/2(n2 - n(k2 + ln n)) пропорционалды деп есептейді. Алайда, барлық жоғарыда айтылған жетілдірулер орын алмастырудың санына әсер етпейтініне, олар тек қана артық екі еселі тексерулердің санын қысқартатынына назар аударыңыз. Өкінішке орай, екі элементтің орындарын алмастыру – көбінесе кілттерді салыстыруға қарағанда барынша күрделі операция, сондықтан біздің айқын жақсартулар біз ойша күткендей нәтиже бермейді.

Мұндай талдау алмастырмалы сұрыптау мен оның аздаған жетілдірілуі қосудың көмегімен және таңдаудың көмегімен сұрыптаулардың арасындағы орта деңгей болып табылатынын көрсетеді.

Листинг. Шейкерлік сұрыптау

PROCEDURE ShakerSort;

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 BEGIN

x := a[j-1]; a[j-1] := a[j];

a[j] := x; k := j

END;

L := k+1;

FOR j := L TO R DO

IF a[j-1] > a[j] THEN BEGIN

x := a[j-1]; a[j-1]:= a[j] ;

a[j] := x; k := j

END;

R := k-1

UNTIL L > R

END; {ShakerSort}

Шейкерлік сұрыптау барлық элементтер реттелгені белгілі болған жағдайда сәтті қолданылады, -бұл практикада өте сирек болады.

Сұрыптау кзеінде п элементтердің әрқайсысы қозғалуы тиіс орташа қашықтық n/3 «орынға» тең екенін көрсетуге болады. Бұл цифр жақсартуды іздеудегі, яғни сұрыптаулардың барынша тиімді әдістерін іздеудегі мақсат болып табылады. Сұрыптаудың барлық қатаң әдістері әрбір элементті барлық элементарлық қадамда бір позицияға ығыстырады. Сондықтан мұндай қадамдардың n2 ретін талап етеді. Демек, кез келген жақсартудың негізінде элементтердің әрбір тактісінде үлкен қашықтыққа ығыстыру принципі жатуы керек.