- •"Алгоритмдеу және бағдарламалау негіздері" пәні бойынша
- •"Алгоритмдеу және бағдарламалау негіздері" пәні бойынша
- •1. Пәннің оқу бағдарламасы - syllabus
- •1.1. Оқытушы жөнінде мәліметтер:
- •1.2. Пән бойынша мәліметтер:
- •1.3. Осыған дейінгі пәндер тізімі: Информатика, Математикалық талдау, Алгебра және геометрия, Математикалық логика.
- •1.4. Шектес пәндер тізімі: Сандық әдістер, Бағдарламалау тілі, Компьютерде тәжірибе
- •1.5. Пән мақсаты:
- •1.6. Пән бойынша берілген тапсырмаларды орындау және тапсыру графигі
- •11. Рашбаев ж.М. Массивті реттеу алгоритмдерін программалау. Оқу және методикалық әдебиеттер жөніндегі Республикалық баспа кабинеті. Алматы-1991 ж.
- •1.8. Бағалау ақпараттары
- •1.9. Курс саясаты және процедурасы
- •2. Пән бойынша оқу-әдістемелік кешен материалдары
- •2.1. Курстың тақырыптық жоспары
- •2.2. Дәріс сабақтар
- •1 Дәріс тақырыбы: Алгоритмдер. Алгоритмдерді талдау. Алгоритмдер құру.
- •2 Дәріс тақырыбы: Программа құру тілі. Программа құрылымы. Енгізу және шығару командалары.
- •3 Дәріс тақырыбы: Есептің қойылымы. Математикалық моделін тұрғызу. Алгоритмін құру. Есепті компьютерде шешу. Проектіні тексеру.
- •4 Дәріс тақырыбы: Циклдік алгоритм. Цикл түрлері. Цикл құрылымы.
- •5 Дәріс тақырыбы: Берілгендердің символдық типі. Жолдық тип.
- •6 Дәріс тақырыбы: Берілгендердің фундаментальді типі. Массив, жазба және жиынның қойылымы.
- •7 Дәріс тақырыбы: Рекурсивті алгоритмдер.
- •Мұндай рекурренттік қатынас п- факториалды санының рекурсивтік есептеу алгоритмін шамалайды.
- •8 Дәріс тақырыбы: Қосалқы программа. Функция. Процедуралық тип.
- •9 Дәріс тақырыбы: Ақпараттық құрылым. Сызықты тізім.
- •10 Дәріс тақырыбы: Ақпараттық құрылымдар. Стектер, кезектер.
- •1 Сурет
- •2 Сурет
- •4 Сурет
- •5 Сурет
- •11 Дәріс тақырыбы: Тізбекті үлестіру. Байланысқан үлестіру.
- •12 Дәріс тақырыбы: Бірбағытталған және екібағытталған байланысқан тізімдер. Көрсеткіштер.
- •13 Дәріс тақырыбы: Ақпараттық құрылым. Ағаш. Ағаштардың қойылымы.
- •14 Дәріс тақырыбы: Көпбайланысқан құрылымдар. Жадыны динамикалық бөлу.
- •15 Дәріс тақырыбы: Ішкі сұрыптау алгоритмдері: таңдау, қосу. Тікелей таңдауға талдау.
- •16 Дәріс тақырыбы: Ішкі сұрыптау алгоритмдері: Екілік қосылымға талдау жасау.
- •17 Дәріс тақырыбы: Көпіршікті және шейкерлік сұрыптауды талдау.
- •18 Дәріс тақырыбы: Бөліп алу көмегімен сұрыптау.
- •19 Дәріс тақырыбы: Медиананы табу.
- •20 Дәріс тақырыбы: Сызықты іздеу.
- •21 Дәріс тақырыбы: Екілік іздеу.
- •22 Дәріс тақырыбы: Қатарда іздеу. Кнут - Моррис - Пратт алгоритмі.
- •23 Дәріс тақырыбы: Қатарда іздеу. Боуер-Мура алгоритмі.
- •24 Дәріс тақырыбы: Жолды өңдеу алгоритмі. Рабин алгоритмі.
- •25 Дәріс тақырыбы: Қайталанбалы алгоритм.
- •26 Дәріс тақырыбы: Қайталанбалы алгоритм. Аттың жүрісі туралы есеп.
- •27 Дәріс тақырыбы: Программалаудың кейбір фундаментальді әдістері. Программаны құрастырудың технологиясы және таралуы.
- •28 Дәріс тақырыбы: Есептеуді тиімдеу. Программаны жөндеу және тестілеу әдістемесі.
- •29 Дәріс тақырыбы:
- •30 Дәріс тақырыбы: Объектіге-бағытталған программалау.
- •2.3. Зертханалық сабақ жоспарлары
- •Алгоритм. Қасиеттері. Алгоритм қойылымы.
- •2.4. Оқытушы жетекшілігімен жүргізілетін студенттердің өзбетіндік жұмысы
- •Орындаушы тәжірибе аяқталғаннан кейін шығыс ақпаратын немесе екі хабардың бірін береді.
- •65387 Санында – 5 цифр !
- •Тақырыбы: Ағаш. Ағашты қалыптастыру. Қалыпты ағашты құру.
- •Ноталардың дыбысталу жиілігі
- •Студенттердің өзбетіндік жұмыс жоспары
- •Тақырыбы: Берілгендер. Берілгендер типі, тұрақты және айнымалы. Өрнектер.
- •Тақырыбы: Динамикалық ақпаратты құрылым. Ағаш.
- •Тақырыбы: Ішкі жолдарды іздеу. Текстке сөз енгізу.
- •Тақырыбы: Ішкі сұрыптау алгоритміне программа құру.
- •Тақырыбы: Сұрыптау алгоритмі
- •Тақырыбы: Массивті сұрыптау алгоритмінің таралымы
- •Тақырыбы: Файлдық тип. Тексттік файлдар.
- •Тақырыбы: Файлмен жұмыс
- •Тақырыбы: Кіру және шығу файлдарымен жұмыс.
- •Тақырыбы: Файлдарды сұрыптау және последовательностей
- •Тақырыбы: Кнут-Морис- Пратта алгоритмін қолдану
- •Тақырыбы: Поиск подстроки в строке
- •Тақырыбы: Манипулирование строками
- •Тақырыбы: Рекурсивті алгоритмдердің таралымы. Лабиринт есебі.
- •Тақырыбы: Рекурсивті алгоритмдер құрастыру.
- •2 Мысал:
- •Тақырыбы: Мәтіндік режимде экранды басқару. Crt модулін қою.
- •2 Мысал: Күн жүйесінің динамикалық моделі.
- •2.6. Курс бойынша жазба жұмыстарының тақырыптамалары
- •Курстық жұмыс және проектілер тақырыптамалары
- •Алгоритм дегеніміз -
- •B) Тізбектелген, циклдық, тармақталу
- •Мазмұны
- •"Алгоритмдеу және бағдарламалау негіздері" пәні бойынша
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 ретін талап етеді. Демек, кез келген жақсартудың негізінде элементтердің әрбір тактісінде үлкен қашықтыққа ығыстыру принципі жатуы керек.
