Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
dain algoritm dina.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
442.58 Кб
Скачать
  1. Есептердің алгоритмдік күрделілілігін өлшеу.

Күрделілілік тұрғысынан алгоритмдердің екі үлкен класы бар  қайталауы бар алгоритмдер және рекурсивті алгоритмдер. Бір есепті көптеген алгоритммен шешуге болады. Олардың әрқайсысының жұмысының тиімділігі әртүрлі сипаттаулармен сипатталады. Алгоритмді талдамас бұрын ең алдымен берілген алгоритм есепті дұрыс шешетінін дәлелдеуіміз керек. Егер есепті дұрыс шешпесе тиімділік мәселесінің мәні жоқ. Егер алгоритм қойылған есепті шешсе, оның қаншалықты тиімді екенін қарастыруымыз керек. Сондықтан оның тиімділігінін анықтау үшін алгоритмдерді талдауымыз қажет.

Қайталау алгоритмінің негізінде шартты өрнектер мен цикл жатыр; мұндай алгоритмдерді талдауда циклдын ішінде қолданылатын операция саны мен цикл итерациясының санын бағалау керек. Рекурсивтік алгоритмдер үлкен есепті фрагменттерге бөледі және әрбір фрагменттерді жеке қолдануға мүмкінлік береді. Осындай алгоритмдерді кейде «бөліп алда біле» алгоритмі деп айтайды және оларды қолдану өте тиімді болуы мүмкін. Үлкен есептердікішіге бөлу жолымен шешу үрдісінде үлкен емес, қарапайым және түсінікті алгоритм құрылады. Рекурсивті алгоритмді талдауда есепті бөлімге бөлуге қажетті операцияның санын санау, ірбңр бөлімдегі алгоритмнің орындалуы және есепті толық шешудегі әрбір бөлімнің нәтижесін біріктіру керек. Осы ақпараттарды және неше бөлік екенінің саны, олардың өлшемінен алгоритмнің күрделілігінің рекуррентік қатынасын шығарамыз.

Алгоритмдерді әртүрлі белгілер бойынша жіктеуге болады. Мысалы, жалпы комбинаторлық алгоритмдер, тағы алгоритмдер, максимальды ағынды іздеу алгоритмдері, максимальды жұп сәйкестігін іздеу алгоритмдері, іздеу алгоритмдері, Алгоритмы на строках, жолды іздеу алгоритмдері, Бұтақтармен жұмыс алгоритмдері, сұрыптау алгоритмдері, сығу алгоритмдері, үлестірілген жүйелер алгоритмдері, операциялық жүйелердегі алгоритмдер, тиімділеу алгоритмдері және т.б.

Есептеу моделіне байланысты сандық, логикалық, продукциялық, нейрожелілік, параллель, полиномдық, құмырсқа, генетикалық және т.б. бөлінеді.

Алгоритмдердің тиімділігі

Алгоритм қандай да бір машинада командалардың жинағы түрінде орындалады. Бір есепті орындауға арналған екі немесе бірнеше алгоритмдердің орындалу жылдамдығын салыстыру үшін қолданылатын критерий (өлшем) жүйелік тиімділік деп аталады. Бір компьютерде бірдей деректер жинағымен бұл алгоритмдерді орындату арқылы олардың орындалуына кеткен салыстырмалы уақытты анықтауға болады.Ол үшін ішкі жүйелік сағат қолданылады.

Ішкі жүйелік сағатты қолданып уақытты бағалау бұл бір ғана есептің орындалуына арналған алгоритмдердің әрқайсысының жүйелік тиімділігінің өлшемі болады.

Кейбір алгоритмдердің орындалуында жадқа қойылған шектеулер проблема тудырады. Орындалу барысында ұзақ уақыт сақтау үшін бастапқы көлемді қысу қажет болады. Қандай да бір алгоритм пайдаланатын ішкі жадтың салыстырмалы санының өлшемі — бұл кеңістіктің тиімділігі (space efficiency). Бұл критерий алгоритмді қандай типті компьютер орындай алатынын және алгоритмнің толық жүйелік тиімділігін көрсетеді. Жаңа компьютерлік жүйелердің жадтарының көлемінің ұлғаюна байланысты бұл критерий маңызды болмай қалды.

Үшінші тиімділік критерийі — бұл есептеу тиімділігі (computational efficiency), ол алгоритмнің ішкі құрылымын қарастырады, оның жасалуын және алгоритмде қолданылатын итерациялар мен меншіктеу операторларын салыстыратын тесттердің санын да талдайды. Бұл өлшем типі нақты компьютерге тәуелсіз және бұл критерий алгоритмнің есептелу күрделілігін n-ге, яғни коллекциядағы деректер элементеріне қатысты өлшейді.

Тізімдер мен бұтақтар сияқты коллекциялардың жалпы кластарының деректерін өңдеу үшін алгоритмнің тиімділігінің өлшемі ретінде салыстыру қолданылады.

Алгоритмнің қиындығын талдау.

Алгоритмнің қиындығын талдаудың мақсаты берілген есепті шешуге арналған тиімді алгоритмді табу. Алгоритмнің тиімділігінің критерийі ретінде алгоритмнің қиындығы таңдалады. Алгоритмнің қиындығы деп осы алгоритм көмегімен есепті шешуге арналған элементар операциялардың санын айтады. Қиындық функциясы деп алгоритмнің кірістік деректерін элементар операциялардың санымен байланыстыратын қатынасты айтады.

Алгоритмдердің қиындығы кірістік деректерге әртүрлі тәуелді болады. Кейбір алгоритмдер тек деректердің көлеміне, кейбіреуі — деректердің мәндеріне тәуелді болады, кейде деректердің түсу реті де қиындыққа әсерін тигізеді. Алгоритмдердің көпшілігінің қиындығы осы аталған факторлардың барлығына да тәуелді болады.

Практикада қолданылатын талдаудың ең қарапайым түрі алгоритмдерді асимптотикалық талдау. Асимптотикалық талдаудың мақсаты кірістік деректерінің көлемі үлкен болатын бір есепті шешуге арналған әртүрлі алгоритмдердің уақыттық және ресурстық шығындарын салыстыру.

Асимптотикалық талдауда қолданылатын қиындықты бағалаудың функциясы алгоритмнің күрделілігі деп аталады. Асимптотикалық талдауда қолданылатын алгоритмнің қиындылық функциясын бағалау деректер көлемінің артуына байланысты қиындылықтың артуын анықтауға мүмкіндік береді, бұл бағалауды алгоритмнің күрделілігі деп атайды

Алгоритмдерді асимптотикалық талдауда математикалық асимптотикалық талдаудағы қабылданған белгілеулер қолданылады.

  1. Есептеу модельдері. Есептеу теориясы және оның күрделілігі.

Фун­кция есептелетін (осы мо­де­лде) деп аталады, егер оны есептейтін про­грам­ма бар болса. Есепті талдағанда оны шешудің полиномды алгоритмі бар-жоғын білу керек. Бұл сұраққа NP-толықтық теориясы жартылай жауап береді.

Бұл алгоритмнің қиындығын анықтау:

n – кірістің ұзындығы.

A1 алгоритмі P есебін O(n5) қиындықпен шешеді.

A2 алгоритмі P есебін O(2n) қиындықпен шешеді.

ЭВМ - 1 млн. опер./сек.

Онда n = 60 болғанда A1 алгоритмі 13 минут, ал A2 алгоритмі –300 жүзжылдықтан астам уақыт жұмыс істейді. Олай болса, полиномиальды алгоритмдер – тиімді! Ал экспоненциальды алгоритмдер – тиімсіз!

Полиномды күрделілігі бар алгоритмдер «жылдам», ал күрделілігі полиномды алгоритмдерден артық алгоритмдер «баяу» деп саналады. Осы тұрғыдан экспоненциальды алгоритмдер «баяу» деп саналады. Алайда бұл дұрыс емес. Өйткені алгоритм жұмысының уақыты есептің өлшеміне (n) және O-нотацияда жасырылған константаға тәуелді.

Кейбір n-нің аз мәні үшін экспоненциальды уақыттан да артық болуы мүмкін. Дегенмен, n-нің көптеген мәні үшін экспоненциальды күрделіліг бар алгоритмдердің жұмыс уақыты айтарлықтай үлкен болады.

Полиномды уақыттан артық(«сверх-полиномиальное») , бірақ экспоненциальды уақыттан кем («суб-экспоненциальное») жұмыс істейтін алгоритмдер кездеседі. Мысалы, бұған бүтін санды жай көбейткіштерге жіктеу (факторизация) есебі жатады. Мұндай «баяу» алгоритмдерге жатады.

Т(п) уақытында жұмыс істейтін және p ықтималдылығымен дұрыс жауап беретін және тек қана бір жаққа қателесетін алгоритм белгілі болсын. Егер оны ■ p-1 рет қайталайтын болса, онда нәтижесінде қателік ықтималдылығы келесідегідей болады:

(1-p)lP <е

Константтар ескерілмеген соң, кез келген алдын ала берілген константадан кем болатын ықтимал қателікті сұрауға болады. Мысалы, есептеу барысында жаңылысу ықтималдылығы сияқты. Сол себепті тәжірибе жүзінде ықтимал алгоритмдер детерминирленген сияқты кең қолданыста болады.

Полиномдық және экспоненциалдық күрделілік кластарына шолу.

(P класы.NP класы.NP –толық есептер.Р класы (полиномды күрделілігі бар кластар)

P=NP проблемасы), NP толықтық, есептердің эквиваленттілігін дәлелдеу

Классикалық теорияда есептер P-күрделі, NP- күрделі, экспоненциальды күрделі және т.б. сияқты күрделілік кластары бойынша жіктеледі.

P класына детерминделген есептеу машинасында (мысалы Тьюринг машинасында) бастапқы деректер көлеміне полиномды түрде тәуелді болатын уақытта шешілетін есептер жатады.

Ал NP класына детерминделмеген есептеу машинасында, яғни келесі күйі алдыңғысымен әрдайым бірмәнді түрде анықтала бермейтін машинада полиномды түрде анықталатын уақытта шешілетін есептер жатады. Мұндай машина жұмысын тармақталған процесс түрінде көрсетуге болады: қандай да бір процестің бұтағында жауап табылса, онда есеп шешілген болып саналады.

NP класының тағы бір анықтамасы: NP класына есептің шешімін қосымша ақпарат арқылы полиномды уақытта тексеруге болатын есептер жатады, яғни полиномды уақытта шешімін тексеруге болатын барлық есептер жатады. P класы NP класының құрамына кіреді.

NP -есептің мысалына коммивояжёр есебі жатады..

P класы мен NP класының эквиваленттілігі (яғни кез келген NP -есептің P –шешімін табу) туралы сұрақ қазіргі кезде алгоритм күрделілігінң теориясының басты сұрағы.

NP –толық есептер NP –есептердің ішкі класы, еректешелігі барлық NP –есептерді қандай да бір тәсілдермен NP –толық есептерге келтіруге болады.

Бұдан шығатын қорытынды: егер NP –толық есептер үшін P –шешімі табылса, онда барлық NP – класының есептері үшін P –шешім табылады.

NP –толық есептің мысалына конънктивті формадағы есеп жатады.

Р класы (полиномды күрделілігі бар кластар)

Есеп полиномды, яғни P класына жатады деп аталады, егер осы есепті O(nk) уақытта шешетін k константа мен алгоритм бар болса, мұндағы п алгоритмнің битпен берілген ұзындығы.

  • Көптеген P класының нақты есептерінде константа k < 6;

P=NP проблемасы

P класының табиғи тұйықтығы бар (полиномдардың қосындысы мен көбейтіндісі де полином).

NP класы (полиномды уақытта тексерілетін есептер)

Алғаш Эдмондс жұмыстарында қарастырылып, күрделілілік кластарын енгізген соң, күрделілік теориясының негізгі проблемасы Р = NP айтылды. Мәнісі: Шешімі полиномды күрделілікпен тексерілетін барлық есептерді полиномды уақытта шешуге бола ма? Қазіргі кезде екеуінің тең не тең еместігінің теориялық түрде дәлелдеуі жоқ, тек жорамал бар: Р класы NP класының ішкі жиыны, яғни NP \ Р жиыны бос емес. Бұл жорамал негізінде ТУР-толық есептер класы қарастырылады.

Класс NPC класы (ЖР-толық есептер)

NP-толықтық ұғымын алғаш Кук (Stephen Cook, 1971) пенЛевиным (1973) тәуелсіз түрде енгізді. Ол бір есепті екіншісіне келтіруге негізделді:

Егер бірінші есеп пен оны шешетін, нақты проблемаларда дұрыс жауап беретін алгоритм бар болса, ал екінші есептің алгоритмі белгісіз болса, онда екінші есепті бірінші есептің терминдерімен түрлендіріп, бірінші есептің алгоритмімен шешуге болады.

NPC класы мен NP-толық есептері екі шарттың орындалуын талап етеді:

  1. есеп NP класына тиесілі болу керек

  2. оған NP класының барлық есептері полиномды түрде келтірілуі тиіс.

Теорема NPC класына тиесілі полиномды шешу алгоритмі бар есеп бар болса, онда Р класы NP класымен тең болады, яғни P = NP ([2]).

Полиномиалды есептерге мысал.Қарапайым идея бояу туралы есеп үшін ықтимал алгоритмді алуды мүмкін еткізеді. Ол одан да қарапайым есеп үшін полиномиалды шешімді қолданады. Кездейсоқ түрде әрбір төбе үшін оны бояй алатын бірнеше түстер белгілейік. Әрбір төбе үшін сәйкес келетін жұбын табу 2/3 құрайды, ал онда осындай «алдын ала бояуды» табу ықтималдылығы әрбір төбе үшін (2/3) болып келеді. Ал егер әрбір төбе үшін екі түстің бірін таңдау қажет болса, онда полиномиалды алгоритм қолдануға болады.

Сөйтіп, бірнеше рет осындай операцияны қайталау жұмыс уақытын O(1.5")-мен бағалаудың ықтималды алгоритмін береді. Сонымен бірге қате ,тек теріс нәтиже орын алуы мүмкін.

  1. Көпіршікті сұрыптау

)Көпіршікті сұрыптау – қарапайым сұрыптау алгоритмі. Көпіршікті болу себебі – судың бетіне көпіршіктер шығатындай, бұл алгоритмнің де «жеңіл» элементтері массивтің «бетіне» шығып сұрыпталады. Алгоритм идеясы:

Сұрыптау қадамдары массив бойымен төменнен жоғары қарай өтуден тұрады. Жолда жұп элементтер бір-бірімен салыстырылады. Егер жұптың элементтері қате ретпен орналасса, олардың орын ауыстырамыз.

Жақсы жақтары:

  • Орындалу алгоритмі өте жеңіл

Жаман жақтары:

  • Үлкен емес массивтерде ғана тиімді;

  • Алгоритмнің күрделілігі – O(n^2)

Бұл алгоритм практикада қолданылмайды, тек ғана сұрыптау алгоритмдерімен танысуға арналған. Өз кезегінде көпіршікті сұрыптау алгоритмі одан әлдеқайда тиімді шейкерлі сұрыптау, пирамидалық сұрыптау, жылдам сұрыптау алгоритмдерінің негізін қалаушы болып табылады.

  1. Кук теориясы

Кук теоремасы бойынша: не барлық NP-тілдер Р класын тиесілі не олардың ешқайсысы тиесілі емес. Бұдан туындайтын Куктың проблемасы Р мен NP кластары бірдей ме, яғни тең бе (қысқаша P = NP?).

Күрделіліктің төменгі бағасы проблемасын шешуге NP-толықтық теориясы үлес қосуы мүмкін. осы теорияның артықшылығына жататындар:

  • NP-толықтық теория күрделі болады-ау деген тілдердің аса көп түрлерін ұсынады (барлық NP-толық тілдер) и сол арқылы күрделі тілдердің үміткелерінің дефицитін болдырмайды.

  • Полиномдық келтіру ұғымы мен Кук теоремасын дәлелдеу кезінде дамыған техника көп тілдерге (NP класына жатпайтын) арналған күрделіліктің аса жоғары төменгі бағалауын алуға мүмкіндік берді

  • NP-толықтық теориясының терминдерінде көптеген комбинаторлық есептер үшін жуықталған алгоритмдерді құрудың қиындығын түсіндіру мүмкін болды және тиімді жуықталған алгоритмдерді алу мүмкін болатын дәлдік дәрежесін жуықтап көрсету мүмкін болды.

  • NP-толықтық теориясы күрделіліктің төменгі бағалауының проблемасының қиындығын тағы да көрсетті және бұл проблемаға қызығушылық шақырды.

Қазіргі алгоритмдер теориясында көптеген есептердің уақыттық күрделілігінң төменгі бағасы анықталған, олар тиімді алгоритмді таңдауға мүмкіндік береді.

Кук теоремасы:

«NP классы құрамында NP-толық тілдер бар. Бұл тіл диагональды процедурамен жасалмайды, ал NP- толық тіл ретінде нақты тілді —ВЫПОЛНИМОСТЬ КНФ қолдану ұсынылады. Бұл тіл орындалатын конъюнктивті нормальды формалардан тұрады. NP класына жататын кез келген тіл полиномды түрде ВЫПОЛНИМОСТЬ КНФ тіліне келтіріледі»

Алгоритмдердің көпшілігі жоғары деңгейлі процедуралық тілдерде жазылатындықтан, мұндай алгоритмдерді жазу жүйесінде қолданылатын элементар операцияларды анықтайық. Есептеу алгоритмдерінің барлығы дерлік машинада жүзеге асқанда келесі программалық фрагменттерден тұрады:

- сұқбат немесе файл арқылы бастапқы деректерді енгізу;

- бастапқы деректердің дұрыстығын тексеру;

- қойылған есепті шешу;

- алынған нәтижелерді көрсету (шығару).

Процедуралық есептеулер модельдерін талдау нәтижесінде енгізу , тексеру және шығарудың берілген есепті шешуге арналған әртүрлі алгоритмдерде бірдей немесе эквивалентті болатынын байқаймыз. Бұдан алгоритмдерді талдау үшін тікелей шешу алгоритмін талдау қажеттігіне әкеледі. Бастапқы деректердің жедел жадта орналасқаны ескеріледі.Жад ұғымына жедел жад, кэш жад, регистрлер, буферлер ұғымы қоса кіреді.

Формальды жоғары деңгейлі процедуралық тілдерде келесі «элементар» операциялар бар деп есептейміз:

1) қарапайым меншіктеу: а <— 6;

2) бірөлшемді индексация: а[n] : (адрес(о) + n • элемент ұзындығы);

3) арифметикалық операциялар: {*, /, -, +};

4) салыстыру операциялары: а{ <, >, =, <, > }Ь;

5) логикалық операциялар: (/1) {or, and, not} (12);

6) күрделі деректер типтеріндегі адрестеу операциялары: (namel.name2).

Элементар операцияларға өту командасы, цикл командасы кірмейді, бұлар құрылымдық программалау талаптарына сай келу керек, әрі олар элементар операциялардан тұрады

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]