8 «Дәлелдеу», «Алгоритм», «Анықталғандық» және «Тиімді есептеу» ұғымдары
Алгоритм ұғымын анықтауда негізгі үш бағытты қарастыруға болады.
Бірінші бағыт функцияның тиімді есептелуі ұғымын анықтаумен байланысты. Онымен А. Черч, К. Гедель, С. Клини айналысқан, олар алгоритмды күрделі функцияның қарапайым функциялардың тізбегі ретінде анықтаған. Нәтижесінде жартылай-рекурсивты функциялар деп аталатын класс анықталды. Осы функциялар классына алып келген идеялар анализы негізінде келесі гипотеза туындады, тиімді есептелетін функциялар классы жартылай рекурсивты функциялар классына сәйкес келеді.
Екінші бағыт машиналық математикамен байланысты. Мұнда алгоритм ұғымы машинаның ішінде жүргізілетін үрдістерді қарастыру арқылы арқылы анықталады. Ең алғаш болып оны Тьюринг айтқан болатын, ол барлығына ортақ сонымен қатар ең қарапайым есептеу машинасының концепциясын ойлап тапқан. Оның сипаттамасын Тьюринг 1937 жылы берген. Тьюринг машинаны белгілі бір реттілікпен жүргізілетін есептеу құрылғысы ретінде қарастырған.
Үшінші бағыт орыс математигі А. А. Марков ұсынған қарапайым алгоритмге негізделеді. Алгоритм белгілі бер ережеге байланысты символдар тізбегі арқылы анықталды.
Анықтама 1. Функция тиімді есептеледі деп аталады, егер оның мәнін есептейтін алгоритм бар болса.
Алгоритмнен тиімді есептеуге өтудің өзіндік артықшылығы бар. Себебі, алгоритмге қойылатын барлық талаптар есептелетін функциялардың жиынтығына да қойылады және есептелетін функциялар жиынтығы атауына ие болады.
Есептелетін функциялар классын келесідей көрсетуге болады. Алдымен қарапайым функциялар алынады:
- l(x) = x + 1 (жылжыту операторы),
- O(x) = 0 (нөлге айналдыру операторы),
- Inm(x1, x2,…, xn) = xm (жобалау операторы).
Барлық үш қарапайым функция барлық жерде анықталған және
интуитивты түрде есептеледі.
Тьюринг машинасының жұмысы.
Машинаның жұмысы ең алдымен төмендегілерді анықтау арқылы (бастапқы) жүзеге асырылыады:
- лентадағы сөздер, яғни, торға жазылған символдар тізбег (сөз тордағы осы символдарды солдан оңға қарай оқу арқылы алынады);
- басының орналасуы;
- машинаның ішкі күйі.
Осы үш шарттың жиынтығы (аталмыш жағдайда) конфигурация деп аталады. Әдетте бастапқы уақытта машинаның ішкі күйі q1 жағдайында болады, ал машинаның басы лентаның оң немесе сол жағының бірінші клеткасында орналасы.
Лентаға берілген сөз q1 жағдайында және машинаның басы бірінші сөздің басында берілген жағдайда алғашқы конфигурация деп аталады. Теріс жағдайда Тьюринг машинасы алғашқы конфигурацияға қолданылмайда деп есептеледі.
Басқаша айтқанда, бастапқы жағдайда конфигурация келесі түрде болады: торлардан құралған лентаның әрбір тор көзіне А алфавитінің симолдары орналасады, басы сол немесе оң жақтан бірінші торға орналасады және машина q1 ішкі күйінде болады. Осы команданың орындалуы барысында алынған сөз бен басының орналасуы соңғы конфигурация деп аталады.
Рекурсия – программаның өзін-өзі шақыруы. Рекурсиялық процедураны қолданған программалар өзінің қарапайымдылығымен, көрнектілігімен және шағын мәтінімен ерекшеленеді. Рекурсиялы алгоритмдердің мұндай қасиеті рекурсиялы процедураның не істеу керек екендігін көрсетеді, ал рекурсиялы емес алгоритм қалай істеу керек екендігін көрсетеді.
Бірақ рекурсияны қолданған программа жедел жадыны үнемдемейді, себебі рекурсиялық процедураны қолдану жедел жадының үлкен көлемін қажет етеді. Рекурсияның әрбір шақырылуы кезінде жадыда жаңа ұяшықтар бөлінеді.
Осылайша, белгілі бір локальдды А айнымалысына рекурсияның әрбір деңгейінде жадының әр түрлі ұяшықтары сәйкес келеді және де әр түрлі мәнге ие болады.
Рекурсияның тереңдігі деп рекурсиялы шақырулардың максимал санын айтады.
Кез-келген Rec рекурсиялы процедурасы белгілі бір S операторлар жиынтығынан және бір немесе бірнеше рекурсиялы операторлардан тұрады.
Шартсыз рекурсиялы процедуралар шексіз үрдіске әкеліп соғады, бұл мәселеге аса назар аударған жөн, себебі, процедураны шексіз өзін-өзі шақыру мүмкін емес.
Осылайша, рекурсиялы процедураларға келесідей талап қойылуы қажет – рекурсиялы процедураны шақыру белгілі бір шартқа негізделуі керек және де ол рекурсияның белгілі бір деңгейінде жалған болуы керек.
Егер шарт ақиқат болса, онда рекурсия жалғасады. Жалған болған жағдайда рекурсия тоқтатылады және шақырылған процедуралық үрдістер рет-ретімен қайтарылады. Рекурсиялы процедура үш түрлі формада болуы мүмкін:
рекурсия шақырылмас бұрын әрекеттердің орындалу формасы (рекурсиялық ағында);
procedure Rec; begin
S;
if шарт then Rec; end;
рекурсия шақырылғаннан кейінгі әрекеттердің орындалу формасы (рекурсиялы қайтарым);
procedure Rec; begin
if условие then Rec;
S; end;
рекурсия шақырылғанына дейінгі және кейінгі әрекеттердің орындалу формасы;
procedure Rec; begin
S1;
if шарт then Rec; S2 ; end;
Рекурсиялы процедуралардың барлық формалары практика жүзінде қолданыс тапқан. Көптеген есептер, оның ішінде факториалды есептеу, рекурсиялы процедураның орындалуына көңіл аудармайды. Алайда, программисттың өзінің процедураның және функцияның орындалуын қадағалауды қажет ететін есептер классы бар. Ондай есептер көбінесе тізім түрінде және ағаш тәріздес есептерде кездеседі.
9 Есептерді шешудегі рекурсивты әдісі (программалау)
Есепті модульды шығару кезінде оны блоктарға бөлу арқылы шығарылады, осы орайда абстракция модульдың мазмұнын белгілі бір тілде орындалуына дейін анықтайды. Программалаудың модульды әдістерінің түрлері 9.1-суретте көрсетілген.
9.1-сурет – Программалаудың модульды әдістерінің түрлері
Функционалды (процедуралық) абстракция деп, функцияның міндетін оның іске асырылуынан ажырататын үдерісті айтады. Себебі, дайын функцияны қолдану үшін оның міндеті мен аргументтерінің сипаттамасын білген жеткілікті. Ұжымдық жобаларда функционалды абстракция маңызды рөл атқарады. Ұжымдық жоба кезінде жоба қатысушылары басқа адамдармен құрастырылған функцияны қолдана отырып, оның алгоритіміне мән бере қоймайды.
Бағдарламалаудың модульді (объектіге-бағытталған және «жоғарыдан – төмен») әдісін жақсы меңгеру үшін математиканың негізін білуді қажет етеді. Бағдарламалаудың модульді әдісінің математикалық негізін анықтау мақсатында, оқылатын пәндер мен логика-алгебралық ұғымдарының, терминдерінің арасында тезаурус түрінде салыстыру жүргіздік (9.1 кесте).
9.1-кесте – Бағдарламалаудың модульді әдісінің логика-алгебралық аппараты
Программалаудың модульдық әдісі
|
Логика-алгебралық ұғымы
|
термин
|
анықтама
|
термин/ қасиет
|
анықтама
|
1
|
2
|
3
|
4
|
9.1-кестенің жалғасы
1
|
2
|
3
|
4
|
Абстракция (abstraction)
|
Бағдарламаны әзірлеу деректер жиынтығындағы операциялар жиянын оларды жүзеге асыру тәсілдері бойынша бөлектеуге мүмкіндік беретін қағидасы
|
Абстракция
|
Өтілетін пәндердің кейбір мінездемелерін алғашқы қасиетінен алшақтату (қасиеті, қатынасы);
|
Модуль
|
Бағдарламаның жеке компоненті (мысалы, функция, функцияның тобы, кодтау блогы)
|
Эквиваленттілік классы
|
Х – бос емес жиын болсын. хÎХқатысты Х жиының барлық ішкі жиыны эквиваленттілі класы деп аталады.
|
Модульдық бағдарлама
|
Нақты міндеті және әрекеттегі реті анықталып, компоненттер мен модульдерге бөлінген бағдарлама
|
Класстың қасиеті
Фактор- жиын
|
Эквивалентті жиындардың бірігуі берілген жиынға тең келеді.
|
Деректердің абстрактілі типі (abstractdatatype)
|
Дерекетер мен оларға орындлатын операциялардың нақты жиынтығы
|
Алгебралық жүйе
|
Алгебралық амалдар және қатынастармен анықталған бос емес жиын.
|
Класс (class)
|
Ортақ типке ие объектілер жиынтығы
|
Класс
|
Бір немесе бірнеше ортақ қасиеттерге ие объектілер жиынтығы.
|
Дерекетер-мүшелер (datamembers)
|
Белгілі бір типтің деректрі сақталатын құрылымның, кластың бөлігі
|
Класс элементі
|
Классты құрайтын объектілер
|
Объект (object)
|
Класстың данасы
|
Класс өкілі
|
Класстың кез-келген элементі
|
Достарыңызбен бөлісу: |