- •"Алгоритмдеу және бағдарламалау негіздері" пәні бойынша
- •"Алгоритмдеу және бағдарламалау негіздері" пәні бойынша
- •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) Тізбектелген, циклдық, тармақталу
- •Мазмұны
- •"Алгоритмдеу және бағдарламалау негіздері" пәні бойынша
24 Дәріс тақырыбы: Жолды өңдеу алгоритмі. Рабин алгоритмі.
Бұл алгоритм қарапайым идеяға негізделген. М ұзындықты сөзде п ұзындығының үлгісін іздейміз. П өлшемді шағын терезе оямыз және оның кірістік сөзі бойымен қозғалатын боламыз. Бізді шағын терезедегі сөз берілген үлгімен сәйкес келіп келмейтіндігі қызықтырады. Әріптер бойынша ұзақ салыстыру. Мұның орнына п ұзындықты сөздерде анықталған кейбір функцияны белгілейміз. Егер осы функцияның мәні шағын терезедегі сөзде және үлгіде әр түрлі болса, онда сәйкестік жоқ. Егер мәндер бірдей болса ғана әріптер бойынша сәйкестікті тексеру қажет.
Мұндай тәсілдің пайдасы қандай. Шағын терезедегі сөзге функцияның мәнін есептеу үшін осы сөздің барлық әрпін оқу қажет. Оларды үлгімен бірден салыстырған дұрыс. Шағын терезені ығыстырған кезде сөз толығымен өзгермейді, тек қана соңына әріп жалғанады және басында алып тасталады.
Функцияны есептеу үшін қолайлы мысал келтіру.
Шешім. Сөздегі және үлгідегі барлық әріптерді тұтас сандар болып табылатын олардың нөмірлерімен ауыстырамыз. Сонда қолайлы функция цифрлар сомасы болып табылады. (Шағын терезені ығыстырған кезде жаңа сан қосу және жоғалғанын шығарып тастау қажет).
Әрбір функция үшін ол нашар қолданылатын сөз болады. Бірақ басқа функция бұл жағдайда жақсы жұмыс жасауы мүмкін. Мынадай идея туындайды: көп функция жинап алу қажет және алгоритм жұмысының басында олардың арасынан кез-келгенін таңдап алу.
Қолайлы функциялар үйіріне мысал келтірейік.
Шешім. Р кез келген санын және р модулі бойынша х кез келген қалдығын таңдап аламыз. П ұзындығының әрбір сөзін бүтін сандардың тізбегі ретінде (әріптерді кодтармен алмастырып) қарастырамыз. Бұл сандарды п-1 дәрежесінің көпмүше коэффициенті ретінде қарастыратын боламыз және осы көпмүшенің мәнін х нүктесінде р модулі бойынша есептейміз. Бұл үйірдің функцияларының бірі болады (р және х әрбір жұбы үшін өз функциясы алынады). Терезені 1-ге ығыстыру үлкен мүшенің азайтуына, х-қа көбейтуге және бос мүше қосуға сәйкес келеді.
Келесі пікір сәйкестік дәл мүмкін еместігін білдіреді. Р саны белгіленген және жай сан, ал Х пен Ү – п ұзындығының екі түрлі сөзі болсын делік. Сонда оларға түрлі көпмүшелер сәйкес келеді (біз барлық әріптердің кодтары түрліше - бұл егер р алфавит әрпі сандарынан үлкен болса мүмкін деп болжаймыз). Функциялар мәнінің сәйкестігі х нүктесінде осы екі түрлі көпмүшелер сәйкес келетінін, яғни олардың айырымы 0-ге айналатынын білдіреді. Айырым п-1 дәрежесінің көпмүшесі және п-1 –ден артық емес түбірі болады. Осылайша, егер р көп кем болса, онда х кездейсоғының сәтсіз нүктеге түсу мүмкіндігі аз.
25 Дәріс тақырыбы: Қайталанбалы алгоритм.
Программалаудың ерекше көңіл бөлетін саласы- жасанды интелект деп аталатын есептер. Бұл жерде біз шешімді берілген есептеу ережелері бойынша емес, байқап көрулер мен қателіктер арқылы іздейтін алгоритмдермен жұмыс жасаймыз. Әдетте байқап көрулер мен қателіктер процесі жеке есептерге бөлінеді. Көбінесе осы есептер рекурсия терминдерінде барынша табиғи көрінеді және ішкі есептің соңғы санын зерттеуді талап етеді. Жалпы түрде барлық процесті ішкі есеп ағашын тұрғызатын (және кесетін) іздеу процесі ретінде ойластыруға болады. Көптеген проблемаларда мұндай іздеу ағашы өте тез өседі, өсу есептің өлшемдеріне байланысты және көбінесе экспоненциальды болады. Сәйкесінше іздеу құны да артады. Кейде кейбір эвристиканы пайдалана отырып, іздеу ағаштарын қысқартуға болады, осылайша есептеу шығындарын белгілі бір шектерге дейін жеткізуге болады.
Біз эвристиканың жалпы ержелерін талқылауды мақсат еткен жоқпыз. Жасанды интелект есебі кіші есептерге бөлінеді, бұл ретте рекурсияны қолдануды талқылаймыз. Негізгі әдістерді көрсетуді жақсы таныс аттың жүрісі туралы есеп мысалынан бастаймыз.
Өлшемі п х п, яғни п2 өрісінен тұратын тақта берілген. Бастапқыда Х0, У0 координаттары бар өрісте әдеттегі шахмат ережесі бойынша алмасып отыратын фигура-ат орналасады. Есеп ат тақтаның барлық өрістерінде дәл бір рет болатын (тақтаны айналып шығады) жүрістер тізбегін іздеуден тұрады, яғни п2-1 жүрістерін есептеу қажет.
п2 өрісін айналып өту есебін ықшамдаудың анық тәсілі – барынша қарапайым шешу: кезекті жүрісті орындау немесе ешқандай жүріс мүмкін еместігін дәлелдеу. Сондықтан кезекті жүрісті орындау алгоритмін анықтаудан бастаймыз. Оның бірінші нұсқасы былайша көрінеді:
PROCEDURE TryNextMove;
BEGIN жүрісті таңдауды иницилизациялау;
REPEAT жүрістер тізімінен кезекті кандидатты таңдау;
IF THEN BEGIN жүріс жазбасына сәйкес келеді;
IF тақта толтырылмаған THEN BEGIN TryNextMove;
IF сәтсіздік THEN BEGIN алдыңғы жүрісті жою
END
END
END
UNTIL сәттілік OR енді кандидаттар жоқ
END; {TryNextMove}
Егер біз бұл алгоритмді барынша егжей-тегжейлі суреттегіміз келсе, онда деректер үшін кейбір түсініктерді таңдау қажет. Тақтаны ең қарапайымы матрица ретінде елестетуге болады, оны һ деп атаймыз. Сонымен қатар
TYPE index = 1. . n;
VAR h; ARRAY index, index OF INTEGER;
мәндерін индекстеу үшін типтер енгіземіз.
Біз тақтамен жылжу тарихын білгіміз келетіндіктен, оның өрісін тек қана өрістің бос болуын анықтауға мүмкіндік беретін булевтік мәндермен емес бүтін сандармен беретін боламыз. Мұндай келісімдерге тоқталуға болады:
h [х, у] = 0: (х, у) өрісіне барылған жоқ;
h [х, у] = i: (х, у) өрісіне і- жүрісте барылды.
Енді сәйкес өлшемдерді таңдау қажет. Олар келесі жүрістің бастапқы шартын және нәтижесін (егер жүріс жасалынған болса) анықтауы тиіс. Бірінші жағдайда (х,у) өрісінің координаттарын сұрау қажет, осыдан жүріс пен жүрістің нөмірін көрсететін і саны шығады (белгілеу үшін). Нәтижесі үшін булев өлшемі талап етіледі; егер ол – “шындық” болса, онда жүріс мүмкін болады. Осылайша біз келесі нұсқаға көшеміз.
Қабылданған шешімдер негізінде қандай операторларды нақтылауға болады? Тақта шарты толтырылмағаны анық, i < п2 сияқты қайта жазуға болады. Мұнан басқа егер мүмкін болатын жүріс үшін аттың «секіруі» ережесіне сәйкес анықталатын u және v екі жергілікті айнымалыларын енгізсек, онда сәйкес “ыңғайлы” предикатын шарттың логикалық конъюнкциясы сияқты көрсетуге болады, жаңа өріс (1<u<n и 1<v<n) тақтасының шегінде болады және (huv = 0) әрі бармаған.
Мүмкін болатын жолдың фиксациясы huv := i меншіктеуінің көмегімен, ал жою - huv := 0 көмегімен орындалады. Егер q1 жергілікті айнымалысын енгізсек және оны осы алгоритмге рекурсивті қатынаулар кезінде параметр-нәтиже ретінде пайдаланса, онда q1 сәттіліктің орнына қоюға болады. Осылайша біз келесі вариантқа келеміз:
PROCEDURE Try(i: INTEGER; х, у: index; VAR q; BOOLEAN);
VAR u, v: INTEGER; q1: BOOLEAN;
BEGIN жүрісті таңдауды инициализациялау;
REPEAT <u, v> - шахмат ережесімен анықталатын келесі жүрістің координаттары;
IF (1 <= u) and (u <= n) and (1 <= v) and (v <= n) and (h[u,v] = 0)
THEN BEGIN
h[u,v] := i;
IF i < n*n THEN Try(i+1, u, v,q1);
IF not q1 THEN h[u,v] =0 ELSE q1:=TRUE
END
UNTIL q1 OR басқа жүрістер жоқ;
q := q1
END; {Try}
