ЕИТЦ/ИС/ЦЦТФ Цомпутатионал Цомплекити Тхеори Фундаменталс је европски програм ИТ сертификације о теоријским аспектима основа рачунарске науке који су такође основа класичне асиметричне криптографије са јавним кључем која се широко користи на Интернету.
Наставни план и програм ЕИТЦ/ИС/ЦЦТФ Цомпутатионал Цомплекити Тхеори Фундаменталс покрива теоријско знање о основама рачунарске науке и рачунарским моделима о основним концептима као што су детерминистичке и недетерминистичке машине коначних стања, регуларни језици, грамери без контекста и теорија језика, теорија аутомата, Туринг Машине, решавање проблема, рекурзија, логика и сложеност алгоритама за фундаменталне безбедносне апликације у оквиру следеће структуре, која обухвата свеобухватан и структуриран ЕИТЦИ сертификациони курикулум, материјале за самоучење, подржане референтним видео дидактичким садржајем отвореног приступа као основа за припрему за стицање овог ЕИТЦ сертификат полагањем одговарајућег испита.
Рачунска сложеност алгоритма је количина ресурса потребних за рад. Времену и меморијским ресурсима се посвећује посебна пажња. Сложеност проблема се дефинише као сложеност најбољих алгоритама за његово решавање. Анализа алгоритама је проучавање сложености експлицитно датих алгоритама, док је теорија сложености рачунарства проучавање сложености решења проблема са најпознатијим алгоритмима. Оба домена су испреплетена јер је сложеност алгоритма увек горње ограничење за сложеност проблема који решава. Штавише, често је потребно поредити сложеност одређеног алгоритма са сложеношћу проблема који се решава приликом конструисања ефикасних алгоритама. У већини случајева, једина доступна информација о тежини проблема је да је он мањи од сложености најефикаснијих познатих техника. Као резултат тога, постоји много преклапања између анализе алгоритама и теорије сложености.
Теорија сложености игра важну улогу не само у основама рачунарских модела као основе за рачунарство, већ иу основама класичне асиметричне криптографије (тзв. криптографија са јавним кључем) која је широко распрострањена у модерним мрежама, посебно на Интернету. Шифровање са јавним кључем је засновано на рачунским тешкоћама одређених асиметричних математичких проблема, као што је на пример факторизација великих бројева у његове просте факторе (ова операција је тежак проблем у класификацији теорије сложености, јер не постоје познати ефикасни класични алгоритми за решавање то са ресурсима који се скалирају полиномски, а не експоненцијално са повећањем улазне величине проблема, што је у супротности са врло једноставном обрнутом операцијом множења на познате просте факторе да би се добио оригинални велики број). Користећи ову асиметрију у архитектури криптографије са јавним кључем (дефинисањем рачунски асиметричне релације између јавног кључа, који се лако може израчунати из приватног кључа, док се приватни кључ не може лако рачунаром из јавног кључа, може се јавно објавите јавни кључ и омогућите другим странама комуникације да га користе за асиметрично шифровање података, који се онда могу дешифровати само повезаним приватним кључем, који није компјутерски доступан трећим странама, чиме се комуникација чини безбедном).
Теорија рачунске сложености развијена је углавном на достигнућима пионира рачунарске науке и алгоритамке, као што је Алан Тјуринг, чији је рад био кључан за разбијање Енигма шифре нацистичке Немачке, која је одиграла важну улогу у победи савезника у Другом светском рату. Криптоанализа са циљем осмишљавања и аутоматизације рачунарских процеса анализе података (углавном шифроване комуникације) у циљу откривања скривених информација коришћена је за пробијање криптографских система и добијање приступа садржају шифроване комуникације, обично од војног стратешког значаја. Криптоанализа је такође била та која је катализирала развој првих модерних рачунара (који су у почетку примењени на стратешки циљ разбијања кода). Британском Цолоссусу (који се сматра првим модерним електронским и програмским рачунаром) претходила је пољска „бомба“, електронски рачунарски уређај који је дизајнирао Маријан Рејевски да помогне у разбијању шифри Енигме, а који су га пољске обавештајне службе предале Великој Британији заједно са заробљена немачка машина за шифровање Енигма, након што је Пољску окупирала Немачка 1939. На основу овог уређаја Алан Туринг је развио свој напреднији пандан за успешно разбијање немачке шифроване комуникације, која је касније развијена у модерне рачунаре.
Пошто количина ресурса потребних за покретање алгоритма варира у зависности од величине улаза, сложеност се обично изражава као функција ф(н), где је н величина улаза, а ф(н) је или сложеност у најгорем случају ( максималну количину потребних ресурса за све улазе величине н) или просечну сложеност случаја (просек количине ресурса за све улазе величине н). Број потребних елементарних операција на улазу величине н обично се наводи као временска сложеност, где се верује да елементарне операције трају константно време на одређеном рачунару и да се мењају само за константан фактор када се покрећу на другој машини. Количина меморије коју алгоритам захтева на улазу величине н позната је као комплексност простора.
Време је ресурс који се најчешће сматра. Када се израз „сложеност“ користи без квалификатора, обично се односи на сложеност времена.
Традиционалне јединице времена (секунде, минуте и тако даље) се не користе у теорији сложености јер се превише ослањају на изабрани рачунар и напредак технологије. На пример, рачунар данас може да изврши алгоритам знатно брже од рачунара из 1960-их, али то је због технолошких открића у рачунарском хардверу, а не због инхерентног квалитета алгоритма. Циљ теорије сложености је да квантификује инхерентне временске потребе алгоритама, или фундаментална временска ограничења која би алгоритам наметнуо било ком рачунару. Ово се постиже пребројавањем колико се основних операција изводи током израчунавања. Ове процедуре се обично називају корацима јер се сматра да трају константно време на одређеној машини (тј. на њих не утиче количина улаза).
Други важан ресурс је количина рачунарске меморије која је потребна за извођење алгоритама.
Други често коришћени ресурс је количина аритметичких операција. У овом сценарију се користи термин „аритметичка сложеност“. Временска сложеност је генерално производ аритметичке сложености са константним фактором ако је познато горње ограничење на величину бинарне репрезентације бројева који се јављају током израчунавања.
Величина целих бројева који се користе током израчунавања није ограничена за многе методе и нереално је претпоставити да је за аритметичке операције потребно одређено време. Као резултат, временска сложеност, такође позната као сложеност бита, може бити знатно већа од аритметичке сложености. Аритметичка потешкоћа израчунавања детерминанте нн целобројне матрице, на пример, је О(н^3) за стандардне технике (Гаусова елиминација). Пошто се величина коефицијената може експоненцијално проширити током израчунавања, сложеност бита истих метода је експоненцијална у н. Ако се ове технике користе заједно са мултимодуларном аритметиком, сложеност бита се може смањити на О(н^4).
Сложеност бита, формално гледано, односи се на број операција над битовима потребних за покретање алгоритма. Она је једнака временској сложености до константног фактора у већини рачунских парадигми. Број операција над машинским речима које захтевају рачунари пропорционалан је сложености бита. За реалистичне моделе прорачуна, временска сложеност и сложеност бита су стога идентични.
Ресурс који се често узима у обзир при сортирању и претраживању је количина поређења уноса. Ако су подаци добро распоређени, ово је добар показатељ временске сложености.
На свим потенцијалним улазима, бројање корака у алгоритму је немогуће. Пошто сложеност улаза расте са његовом величином, он се обично представља као функција величине улаза н (у битовима), тако да је сложеност функција од н. Међутим, за улазе исте величине, сложеност алгоритма може значајно да варира. Као резултат тога, рутински се користе различите функције сложености.
Сложеност најгорег случаја је збир све сложености за све улазе величине н, док је сложеност просечног случаја збир све сложености за све улазе величине н (ово има смисла, пошто је број могућих улаза дате величине коначан). Када се термин „сложеност“ користи без даљег дефинисања, узима се у обзир временска сложеност у најгорем случају.
Познато је да је сложеност најгорег и просечног случаја тешко правилно израчунати. Штавише, ове тачне вредности имају мало практичне примене јер би свака промена у машинској или прорачунској парадигми мало променила сложеност. Штавише, коришћење ресурса није важно за мале вредности н, стога је лакоћа имплементације често привлачнија од ниске сложености за мало н.
Из ових разлога, највише пажње се посвећује понашању сложености за велико н, односно његовом асимптотичком понашању када се н приближава бесконачности. Као резултат тога, велика О нотација се обично користи за означавање сложености.
Рачунски модели
У одређивању сложености важан је избор прорачунског модела, који се састоји од специфицирања битних операција које се изводе у јединици времена. Ово се понекад назива Тјуринг машина са више трака када парадигма рачунања није посебно описана.
Детерминистички модел прорачуна је онај у коме су наредна стања машине и операције које треба да се изврше у потпуности дефинисане претходним стањем. Рекурзивне функције, ламбда рачун и Тјурингове машине су били први детерминистички модели. Машине са случајним приступом (познате и као РАМ машине) су популарна парадигма за симулацију рачунара у стварном свету.
Када рачунски модел није дефинисан, обично се претпоставља Тјурингова машина са више трака. На Тјуринговим машинама са више трака, временска сложеност је иста као на РАМ машинама за већину алгоритама, иако је потребна значајна пажња у начину на који се подаци чувају у меморији да би се постигла ова еквиваленција.
Могу се направити различити избори у неким корацима прорачуна у недетерминистичком моделу рачунарства, као што су недетерминистичке Тјурингове машине. У теорији сложености, све изводљиве опције се разматрају у исто време, а недетерминистичка временска сложеност је количина времена која је потребна када се увек доносе најбољи избори. Другим речима, израчунавање се врши истовремено на онолико (идентичних) процесора колико је потребно, а недетерминистичко време израчунавања је време потребно првом процесору да заврши прорачун. Овај паралелизам се може користити у квантном рачунарству коришћењем суперпонираних заплетених стања при покретању специјализованих квантних алгоритама, као што је Шорова факторизација ситних целих бројева, на пример.
Чак и ако такав модел прорачуна тренутно није изводљив, он има теоријски значај, посебно у вези са П = НП проблемом, који поставља питање да ли су класе сложености произведене коришћењем „полиномског времена“ и „недетерминистичког полиномског времена“ као најмање горње границе су исте. На детерминистичком рачунару, симулација НП-алгоритма захтева „експоненцијално време“. Ако се задатак може решити у полиномском времену на недетерминистичком систему, он припада НП класи тежине. Ако је проблем у НП и није лакши од било ког другог НП проблема, каже се да је НП-потпун. Проблем ранца, проблем трговачког путника и Булов проблем задовољивости су НП-потпуни комбинаторни проблеми. Најпознатији алгоритам има експоненцијалну сложеност за све ове проблеме. Ако би се било који од ових проблема могао решити у полиномском времену на детерминистичкој машини, онда би се сви НП проблеми могли решити и у полиномском времену, и П = НП би се установило. Од 2017. године, широко се претпоставља да је П НП, што имплицира да је најгоре ситуације НП проблема фундаментално тешко решити, тј. да им је потребно много дуже од било ког изводљивог временског распона (деценијама) с обзиром на занимљиве улазне дужине.
Паралелно и дистрибуирано рачунарство
Паралелно и дистрибуирано рачунарство укључује поделу обраде на више процесора који сви раде у исто време. Основна разлика између различитих модела је начин слања података између процесора. Пренос података између процесора је обично веома брз у паралелном рачунарству, док се пренос података између процесора у дистрибуираном рачунарству обавља преко мреже и стога је знатно спорији.
Прорачун на Н процесора узима најмање количник са Н времена потребног једном процесору. У стварности, пошто се неки подзадаци не могу паралелизирати и неки процесори ће можда морати да чекају резултат од другог процесора, ова теоретски идеална граница никада неће бити постигнута.
Кључно питање сложености је стога развити алгоритме тако да производ времена рачунања на број процесора буде што је могуће ближи времену потребном за обављање истог прорачуна на једном процесору.
Квантно рачунање
Квантни рачунар је рачунар са рачунским моделом заснованим на квантној механици. Черч-Тјурингова теза важи за квантне рачунаре, што имплицира да било који проблем који квантни рачунар може да реши може такође бити решен Тјуринговом машином. Међутим, неки задаци би се теоретски могли решити коришћењем квантног рачунара, а не класичног рачунара са знатно нижом временском сложеношћу. За сада, ово је строго теоретски, јер нико не зна како да развије практичан квантни рачунар.
Квантна теорија сложености је створена да истражи различите врсте проблема које могу да реше квантни рачунари. Користи се у пост-квантној криптографији, што је процес стварања криптографских протокола који су отпорни на квантне компјутерске нападе.
Сложеност проблема (доње границе)
Најнижи део сложености алгоритама који могу да реше проблем, укључујући неоткривене технике, је сложеност проблема. Као резултат тога, сложеност проблема је једнака сложености било ког алгоритма који га решава.
Као резултат, свака сложеност дата у великој О нотацији представља сложеност и алгоритма и пратећег проблема.
С друге стране, добијање нетривијалних доњих граница сложености питања је често тешко, а постоји неколико стратегија за то.
Да би се решила већина проблема, сви улазни подаци морају да се прочитају, за шта је потребно време сразмерно величини података. Као резултат, такви проблеми имају најмање линеарну сложеност, или, у великој омега нотацији, сложеност Ω(н).
Неки проблеми, као што су они у компјутерској алгебри и рачунарској алгебарској геометрији, имају веома велика решења. Пошто излаз мора бити написан, сложеност је ограничена максималном величином излаза.
Број поређења потребних за алгоритам сортирања има нелинеарну доњу границу Ω(нлогн). Као резултат тога, најбољи алгоритми за сортирање су најефикаснији јер је њихова сложеност О(нлогн). Чињеница да постоје н! начини организовања н ствари води до ове доње границе. Јер свако поређење дели ову колекцију од н! редоследа на два дела, број Н поређења потребних за разликовање свих редова мора бити 2Н > н!, што имплицира О(нлогн) према Стирлинговој формули.
Свођење проблема на други проблем је уобичајена стратегија за добијање ограничења смањене сложености.
Развој алгоритма
Процена сложености алгоритма је важан елемент процеса пројектовања јер пружа корисне информације о перформансама које се могу очекивати.
Чест је неспоразум да ће, као резултат Муровог закона, који предвиђа експоненцијални раст модерне рачунарске снаге, процена сложености алгоритама постати мање релевантна. Ово је нетачно јер повећана снага омогућава обраду огромних количина података (велики подаци). На пример, било који алгоритам би требало да функционише добро за мање од секунде када сортира по абецедном реду листу од неколико стотина уноса, као што је библиографија књиге. С друге стране, за милион уноса (на пример, телефонски бројеви великог града), основни алгоритми који захтевају О(н2) поређења морали би да изврше трилион поређења, што би трајало три сата при брзини од 10 милион поређења у секунди. Брзо сортирање и сортирање спајањем, с друге стране, захтевају само нлогн поређења (као просечну сложеност случаја за прво, као сложеност најгорег случаја за друго). Ово производи око 30,000,000 поређења за н = 1,000,000, што би трајало само 3 секунде при 10 милиона поређења у секунди.
Као резултат тога, процена сложености може омогућити елиминацију многих неефикасних алгоритама пре имплементације. Ово се такође може користити за фино подешавање сложених алгоритама без потребе за тестирањем свих могућих варијанти. Проучавање сложености омогућава фокусирање напора за повећање ефикасности имплементације одређивањем најскупљих корака сложеног алгоритма.
Да бисте се детаљно упознали са наставним планом и програмом сертификације, можете проширити и анализирати табелу испод.
ЕИТЦ/ИС/ЦЦТФ Курикулум сертификације основа теорије сложености рачунара упућује на дидактичке материјале отвореног приступа у видео облику. Процес учења је подељен на структуру корак по корак (програми -> лекције -> теме) која покрива релевантне делове курикулума. Учесници могу приступити одговорима и поставити релевантнија питања у одељку Питања и одговори на интерфејсу за е-учење у оквиру тренутно напредне теме курикулума ЕИТЦ програма. Директне и неограничене консултације са стручњацима из домена такође су доступне преко платформе интегрисаног система за онлајн размену порука, као и путем контакт форме.
За детаље о процедури сертификације проверите Како то функционише.
Материјали за читање основног наставног плана и програма
С. Арора, Б. Барак, Цомпутатионал Цомплекити: А Модерн Аппроацх
https://theory.cs.princeton.edu/complexity/book.pdf
Материјали за читање секундарног наставног плана и програма
О. Голдреицх, Увод у теорију сложености:
https://www.wisdom.weizmann.ac.il/~oded/cc99.html
Помоћни материјал за читање наставног плана и програма о дискретној математици
Ј. Аспнес, Белешке о дискретној математици:
https://www.cs.yale.edu/homes/aspnes/classes/202/notes.pdf
Помоћни материјал за читање наставног плана и програма о теорији графова
Р. Диестел, Теорија графова:
https://diestel-graph-theory.com/
Преузмите комплетне припремне материјале за самоучење ван мреже за ЕИТЦ/ИС/ЦЦТФ програм Основе теорије сложености рачунара у ПДФ датотеци
ЕИТЦ/ИС/ЦЦТФ припремни материјали – стандардна верзија
ЕИТЦ/ИС/ЦЦТФ припремни материјали – проширена верзија са питањима за преглед