- •"Алгоритмдеу және бағдарламалау негіздері" пәні бойынша
- •"Алгоритмдеу және бағдарламалау негіздері" пәні бойынша
- •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) Тізбектелген, циклдық, тармақталу
- •Мазмұны
- •"Алгоритмдеу және бағдарламалау негіздері" пәні бойынша
18 Дәріс тақырыбы: Бөліп алу көмегімен сұрыптау.
Қосу және таңдау принциптерінде салынған сұрыптаудың екі жетілдірілген әдістерін талдап, біз енді алмастыруға негізделген үшінші жақсартылған әдіске тоқталамыз. Егер көпіршікті сұрыптау тікелей (қатаң) сұрыптаудың барлық үш алгоритмінің орта есеппен ең тиімдісі болғанын ескерсек, онда салыстырмалы елеулі жақсартуды күткен жөн. Мұның бәрі күтпеген нәрсе сияқты көрінеді: алмасуға негізделген әдісті жақсарту, ол туралы біз қазір айтатын боламыз, жиымдар үшін сұрыптау әдісінің қазіргі уақытта белгілілерінің ең жақсысына әкеледі екен. Оның өнімділігі соншалықты таңқаларлықтай, ойлап тапқыш әдісті тез сұрыптау (Quicksort) деп атады.
(Quicksort) ең тиімділікке қол жеткізу үшін ең алдымен үлкен қашықтыққа орын ауыстыруды жүргізген дұрыс деген ұғымнан шығады. Бізде кілттер бойынша кері ретпен орналасқан п элементтер бар деп аламыз. Оларды п/2 алмастыруға сұрыптауға болады: алдымен ең солын ең оңымен орын алмастыру, ал кейін тізбектеп екі жағынан жылжыту. Мұны біз рет шын мәнінде кері екенін білген кезде орындауға болады. Бірақ осы мысалдан үлгі боларлықтай нәрсе алуға болады.
Мынадай алгоритмді птырысайық: ойша кез келген элементті таңдап аламыз (оны х деп атаймыз) және біздің жиымды сол жағынан ai> x элементін тапқанға дейін қарайтын боламыз, одан кейін жиымды оң жағынан aj < х кездестіргенге дейін қараймыз.
Енді осы екі элементтің орнын ауыстырамыз және қарау және алмастыру процесін екі қарау жиымның ортасында бір жерде кездескенге дейін жалғастырамыз. Нәтижесінде жиым х-тан аз кілттермен (немесе тең) сол жақ бөлігіне және оң жағына – х-тан артық (немесе тең) кілттермен бөлінген болып шығады. Енді осы бөлу процесін процедура түрінде (листинг) береміз. > және < қатынасының орнына Листинг екеніне назар аударыңыз. Бөлудің көмегімен сұрыптау
PROCEDURE partition;
VAR i, j: index: w, x: item;
BEGIN i ;= 1; j := n;
х-ты кездейсоқ таңдау;
REPEAT
WHILE a[i] < x DO i := i+1;
WHILE x < a[j] DO j := j-1;
IF i <= j THEN BEGIN
w := a[i]; a[i] := a[j]; a[j]:=w; I:=I+1; j:=j-1
END
UNTIL i > j
END; {partition}
> и < қолданылады, ал WHILE циклының тақырыбында – оларды терістеу: <и>. Мұндай өзгерістер кезінде х осы және басқа қарау үшін барьер рөлін атқарады. Егер салыстыру үшін х ретінде 42 орташа кілтін алсақ, онда кілттер жиымында
44 55 12 42 94 06 18 67
б
өлу
үшін екі алмасу қажет болады: 18
44 и 6 55
18 06 12 |42| 94 55 44 67
Индекстердің соңғы мәні мынадай: i = 5, a j = 3. a1…ai-1 кілттері х = 42 кілтінен аз немесе тең, ал aj+1 ... ап кілттері х-тен үлкен немесе тең. Демек, екі бөлік бар, атап айтқанда:
Ak: 1<k<i: ak<x,
Mk: j<k<n: x<ak.
Суреттелген алгоритм өте қарапайым және тиімді, өйткені, басты салыстырылатын шамалар i, j және х қарау кезінде машинаның тез тіркелімдерінде сақтауға болады. Алайда ол сәтсіз де болуы мүмкін, мысалы, бұл п ұқсас кілттер жағдайында болады: бөлу үшін п/2 алмасуы қажет. Мұндай мүлдем міндетті емес алмасуларды, егер қарау операторларын мыналарға:
WHILE a[i]< x DO i :=i+1;
WHILEx , = A [j] DO j : = j-1;
ауыстырса, болдырмауға болады.
Алайда бұл жағдайда жиымның компонентері арасында орналасқан таңдап алынған х элементі енді екі қарау үшін кедергі болмайды. Нәтижесінде барлық ұқсас кілттері бар жиымды қарау егер олардың аяқталуының барынша күрделі шарттарын пайдаланбаса ғана жиымның шекарасы арқылы өтуге қол жеткізеді. Листингте қолданылған шарттардың қарапайымдылығы орта есеппен салыстырмалы сирек болатын қосымша алмасулар толық дұрыс болып шығады. Алмасудың өзін басқаратын тақырыпты өзгертсе тағы да аздап үнемдеуге болады:
i<=j –ден i<j –ге өту. Алайда бұл өзгеріс мына екі операторға қатысты болмауы тиіс: i: =i+1 j: = j –1. Сондықтан олар үшін жеке шартты оператор талап етіледі. Бөлу алгоритмінің дұрыстығына қарым –қатынас PEREAT циклы операторының инварианты болып табылатын растау арқылы көз жеткізуге болады. Бастапқыда і=1 және j = п болғанда олардың ақиқаттығы тривиальды, ал i>j –ден шығу кезінде олар күткен нәтиже береді.
Енді біздің мақсатымыз - элементтердің бстапқы жиымын бөліктерге бөлуді жүргізу ғана емес, оны сұрыптау да екенін еске саламыз. Сұрыптауды бөліктегіштен шамалы ғана қадам ажыратады: осы процесті алынған екі бөлікке, одан кейін бөліктердің әрқайсысы бір ғана элемент қалғанға дейін бөліктердің бөлігіне қолдану қажет. Бұл әрекет листингпен суреттеледі.
Листинг. Тез сұрыптау.
PROCEDURE Quicksort;
PROCEDURE sort(L,R: index);
VAR i, j: index; w,x: item;
BEGIN i := L; j := R;
x := a[(L+R) DIV 2];
REPEAT
WHILE a[i] < x DO i :=. i+1;
WHILE x < a[j] DO j := j-1;
IF i <= j THEN BEGIN
w:= a[i]; a[i]:= a[j]; a[j] := w; i:= i+1;j:= j-1
END
UNTIL i > j;
IF L < j THEN sort(L,J);
IF i < R THEN sort(I,R);
END; {sort}
BEGIN sort(1,n)
END; {Quicksort}
Sort процедурасы өз-өзіне рекурсивті қатынайды.
