- •"Алгоритмдеу және бағдарламалау негіздері" пәні бойынша
- •"Алгоритмдеу және бағдарламалау негіздері" пәні бойынша
- •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) Тізбектелген, циклдық, тармақталу
- •Мазмұны
- •"Алгоритмдеу және бағдарламалау негіздері" пәні бойынша
14 Дәріс тақырыбы: Көпбайланысқан құрылымдар. Жадыны динамикалық бөлу.
Бұл жады арнайы аймақта программаны орындау барысында еркін бөлінетін және босатылатын айнымалылар үйме деп аталады. Оған қатынау үшін көрсеткіштер пайдаланылады.
Жадыны иемдену New (P) немесе GetMem (Q Size) рәсімімен жүргізіледі. Жадыны босату Dispose(P) немесе FreeMem(Q Size) рәсімімен жүргізіледі. Бұл жерде Р барлық уақытта типтелген көрсеткіш. Q кез-келген көрсеткіш болуы мүмкін, бірақ әдетте типтелмеген көрсеткіш қолданылады. Size – бұл иемленетін немесе босатылатын жадының өлшемін көрсететін тұтас санды өрнек. Программалаудың жақсы стилі динамикалық жадының бұрын иемденілген көлемін босатуды көздейді.
New рәсімін орындаған кезде:
1) Р айнымалысы иемденген өлшемі байттың санына тең динамикалық жады аймағын иемденеді;
2) Р айнымалысы сәтті иемденгеннен кейін өз адресінің мәні ретінде осы аймақтың басын иеленеді, динамикалық айнымалының аты Р болады.
Dispose рәсімін орындаған кезде:
1) Р айнымалысы иемденген өлшемі байттың санына тең динамикалық жады аймағы босатылады;
2) Осыдан кейін Р айнымалысының мәні анықталмайтын болады, сондықтан жадының осы аймағын қайтадан босатуға тыйым салынады және ол қате болып саналады.
Егер динамикалық айнымалыға сілтемені “жоғалтса” (мысалы, көрсеткішке жаңа атау беру), онда бұл аймақ та “жоғалады” және программа жұмысының соңына дейін қол жетімсіз болып қалады. Динамикалық айнымалылармен жұмыс жасаған кездегі қателіктердің бірі – бұл “ілулі тұрған” сілтемелердің пайда болуы:
var
A, B: Integer;
begin
New(A); New(B);
A^ := 10; B^ := 20;
A := B; {1}
Dispose(B); {2}
Dispose(A); {3}
Жолдарға дейін бұл фрагментте қателер жоқ. (1) жолында адресі А-да болған динамикалық айнымалымен байланыс қайтарымсыз жоғалады. Келесі динамикалық айнымалы В атауынан басқа тағы да бір А иеленеді. (2) жолында бұл айнымалы жадыдан алып тасталады, бірақ А-да “ілулі тұрған” сілтеме қалады. (3) жолда босатылған динамикалық жадыны босатуға тырысу қате болып табылады.
Үймедегі бос кеңістіктің өлшемін анықтау үшін екі стандартты функциялар – MaxAvail және MemAvail қолданылады. Ерікті айнымалының байттардағы өлшемін анықтау үшін SizeOf(X) жан-жақты функциясын қолдануға болады, мұнда Х – айнымалының аты немесе типтің де аты.
15 Дәріс тақырыбы: Ішкі сұрыптау алгоритмдері: таңдау, қосу. Тікелей таңдауға талдау.
Негізгі шарттар: жиымдарды сұрыптаудың таңдап алынған әдісі мүмкіндікті жадыны үнемдеп пайдалануы тиіс. Бұл элементтерді ретке келтіретін алмастырулар сол жерде орындалуы тиіс екенін білдіреді, яғни а жиымының элементтері b қорытындылаушы жиымына берілетін әдістер, ол барынша аз қызығушылық тудырады. Жадыны үнемдеу өлшемін шектеп көптеген мүмкіндердің арасынан қажетті әдісті таңдау, біз алдымен олардың тиімділігі бойынша, яғни олардың жұмыс уақыты бойынша, әдістерді жіктейтін боламыз. Тиімділіктің дұрыс өлшемі С – кілттерді қажетті салыстырулар саны және М - элементтерді қайта жіберулер (алмастырулар) саны. Бұл сандар п – сұрыпталатын элементтер саны функцияларының мәні. Дұрыс сұрыптау алгоритмдері n*log n салыстырмалысын талап етеді, біз алдымен бірнеше қарапайым және айқын әдістерді талдаймыз, оларды тікелей таңдау деп атайды, мұнда п2 кілттерді салыстыру реті талап етіледі. Талдауды шапшаң алгоритмдерді қозғамай, тікелей әдістерден бастауға, біздерді мынадай себептер мәжбүрлейді:
1. Тікелей әдістер әсіресе сұрыптаулардың басым көпшілігінің негізгі принциптерінің өзіне тән сипаттамаларын түсіндіру үшін қолайлы.
2. Бұл әдістердің программалары ұғынуға оңай, қысқа болып келеді. Программалардың өзі де жадыдан орын алатынын естеріңізге саламыз.
3. Күрделендірілген әдістер азғантай операцияларды талап етеді, бірақ бұл операциялар әдетте күрделі болып келеді, сондықтан барынша аз п үшін тікелей әдістер тез болып келеді, бірақ үлкен п кезінде оларды пайдаланбаған жөн.
Сол жерде сұрыптау әдісі н оларды анықтайтын принциптерге сәйкес үш категорияға бөліге болады:
1. Қосудың көмегімен сұрыптау (by insertion).
2. Бөлудің көмегімен сұрыптау (by selection).
3. Алмасудың көмегімен сұрыптау (by exchange).
TYPE item= RECORD key: INTEGER;
(* бұл жерде басқа компоненттер суреттелген*)
(2)
END;
Енді біз осы принциптерді зерттеп, оларды салыстырамыз. Барлық программалар а айнымалысына сүйенеді, дәл осы жерде орнына қойылатын элементтер сақталады және төмендегіше анықталатын item (1) және index типтеріне сілтеме жасайды:
TYPE index = INTEGER;
VAR a: ARRAY [1..n] OF item; (2)
“Тікелей қосудың көмегімен сұрыптау” әдісі карт ойыны кезінде кеңінен қолданылады. Элементтер (карттар) a1 … ai-1 “дайын” тізбегіне және аi... аn. бастапқы тізбегіне ойша бөлінеді. i = 2 –ден бастап және і-ні әрбір кезде бір бірлікке көбейте отырып әрбір қадам сайын бастапқы тізбектен і-элемент алып тасталады және дайын тізбекке қайта салынады, осылайша ол қажетті жерге қойылады.
Кілттер салыстыруларының саны (Сi) і-ші таралу кезінде ең үлкені і –1 тең, ең азы –1; егер п кілттерден барлық орын алмастырулар тең ықтималды деп ойласақ, онда салыстырулардың орташа саны –і/2. Қайта жіберулердің (элементтер меншіктеу) Mi саны Ci + 2 (барьерді қосқанда) тең. Сондықтан салыстырулардың жалпы саны және қайта жіберулердің саны мынадай:
Cmin =n- 1, Мmin=3*(n-1),
Cave = (n2 + n - 2)/4, Mavc = (n2 + 9n-10)/4 (3)
С max = (n2 + n - 4)/4, Mmax = (n2 + 3n- 4)/2.
Ең төменгі бағалар элементтердің реттелген бастапқы тізбегі жағдайында, нашар бағалар – олар бастапқыда кері ретпен орналасқанда кездеседі. Кейбір мағынада енгізудің көмегімен сұрыптау шынайы табиғи бағытты көрсетеді. Келтірілген алгоритм орнықты сұрыптау процесін суреттейді: оның кезінде тең кілттері бар элементтердің реті өзгеріссіз қалады.
Тікелей таңдаудың көмегімен сұрыптау келесідей принциптерге негізделген:
1. Ең аз кілтті элемент таңдап алынады.
2. Ол а1 бірінші элементімен орын алмастырады.
3. Бұдан кейін осы процесс қалған n – 1 элементтерімен, п – 2 элементтерімен және ары қарай жалғыз, ең үлкен элемент қалғанға дейін қайталанады.
Тікелей талдауды таңдау. (С) кілттерді салыстыру саны кілттердің алғашқы ретіне байланысты болмайтыны анық. Бұл мағынада осы әдістің бағыты тікелей қосудың бағытына қарағанда барынша қарапайым деуге болады.
С үшін:
C=(n2-n)/2
Орын алмастырулардың саны барынша аз:
Mmin=3*(n-1) (5)
бастапқыда реттелген кілттер жағдайында барынша көп:
Mmax=n2/4+3*(n-1)
Егер бастапқыда кілттер п-ға кері орналасқан болса. Mavg,-ды анықтау үшін біз былайша ойлауымыз керек. Алгоритм жиымды әрбір элементті қазір анықталған ең аз шамамен салыстыра отырып қарайды; егер ол біріншіден аз болса, онда кейбір меншіктеу орындалады. Екінші элемент біріншіден аз болатынының ықтималдығы Н-ға тең, минимумға меншіктеу де осындай ықтималдықпен жүреді. Үшінші элемент алғашқы екі элементтен аз болатынының ықтималдығы 1/3-ке тең, төртіншінің ықтималдығы ең аз болады – ј және т.б. Сондықтан қайта жіберулердің толық күтілетін саны Hn –1-ға тең, мұнда Нn n-e гармониялық сан:
Hn -1 + 1/2+1/3 + ... + 1/n. (6)
Hn былайша білдіруге де болады:
Hn =lnn + g+l/2n-l/12n2+..., (7)
мұнда g= 0.577216... —Эйлер константы. Барынша үлкен п үшін бөлшек құрауыштарды елемеуімізге болады және сондықтан меншіктеудің орташа санын і қарауда төмендегі өрнекпен жуықтау:
Fi=ln i+g+1
Mavg қайта жіберуінің орташа саны таңдамалы сұрыптауда і-мен 1-ден бастап п-ға дейін Fi сомасы:
Mavg = п * (g + 1) + (Si: 1 < z < п : ln i).
Дискреттік мүшелердің осы сомасын интегралмен жаңадан жіктей отырып
Integral (1:n) ln x dx = x* (In x- 1) = п* ln (n) - п + 1, соңында е жақын мәнін аламыз
Mavg=n*(ln(n)+g) (8)
Осыдан тікелей таңдауы бар алгоритм қатаң қосудан артығырақ деген қорытынды жасауға болады. Алайда, егер кілттер бастапқыда реттелген немесе түгел дерлік реттелген болса, тікелей қосу барынша жылдамырақ болып қалады.
