
EITC/IS/CCTF Computational Complexity Theory Fundamentals je evropski program IT sertifikacije o teorijskim aspektima osnova računarske nauke koji su takođe osnova klasične asimetrične kriptografije sa javnim ključem koja se široko koristi na Internetu.
Nastavni plan i program EITC/IS/CCTF Computational Complexity Theory Fundamentals pokriva teorijsko znanje o osnovama računarske nauke i računskim modelima o osnovnim konceptima kao što su deterministički i nedeterministički konačni automati, regularni jezici, grameri bez konteksta i teorija jezika, teorija automata, Turing Mašine, odlučivost problema, rekurzija, logika i složenost algoritama za fundamentalne sigurnosne aplikacije u okviru sljedeće strukture, koja obuhvata sveobuhvatan i strukturiran EITCI certifikacijski kurikulum, materijale za samoučenje, podržane referenciranim videodidaktičkim sadržajem otvorenog pristupa kao osnova za pripremu za postizanje ovog EITC sertifikacija polaganjem odgovarajućeg ispita.
Računska složenost algoritma je količina resursa potrebnih za rad. Vremenu i memorijskim resursima se posvećuje posebna pažnja. Složenost problema se definira kao složenost najboljih algoritama za njegovo rješavanje. Analiza algoritama je proučavanje složenosti eksplicitno datih algoritama, dok je teorija složenosti računarstva proučavanje složenosti rješenja problema s najpoznatijim algoritmima. Oba domena su isprepletena jer je složenost algoritma uvijek gornje ograničenje na složenost problema koji rješava. Nadalje, često je potrebno porediti složenost određenog algoritma sa složenošću problema koji se rješava prilikom konstruiranja efikasnih algoritama. U većini slučajeva, jedina dostupna informacija o težini problema je da je on manji od složenosti najefikasnijih poznatih tehnika. Kao rezultat toga, postoji mnogo preklapanja između analize algoritama i teorije složenosti.
Teorija složenosti igra važnu ulogu ne samo u osnovama računarskih modela kao osnove za informatiku, već iu osnovama klasične asimetrične kriptografije (tzv. kriptografija s javnim ključem) koja je široko rasprostranjena u modernim mrežama, posebno na Internetu. Šifriranje s javnim ključem temelji se na računskoj teškoći određenih asimetričnih matematičkih problema kao što je na primjer faktorizacija velikih brojeva u njegove proste faktore (ova operacija je težak problem u klasifikaciji teorije složenosti, jer ne postoje poznati efikasni klasični algoritmi za rješavanje to sa resursima koji se skaliraju polinomski, a ne eksponencijalno sa povećanjem ulazne veličine problema, što je u suprotnosti sa vrlo jednostavnom obrnutom operacijom množenja na poznate proste faktore da bi se dobio originalni veliki broj). Koristeći ovu asimetriju u arhitekturi kriptografije javnog ključa (definiranjem računski asimetrične relacije između javnog ključa, koji se može lako izračunati iz privatnog ključa, dok se privatni ključ ne može lako kompjuterski iz javnog ključa, može se javno objaviti javni ključ i omogućiti drugim komunikacijskim stranama da ga koriste za asimetričnu enkripciju podataka, koji se tada mogu dešifrirati samo povezanim privatnim ključem, koji nije kompjuterski dostupan trećim stranama, čime se komunikacija čini sigurnom).
Teorija računske složenosti razvijena je uglavnom na dostignućima pionira kompjuterske nauke i algoritamice, kao što je Alan Turing, čiji je rad bio ključan za razbijanje Enigma šifre nacističke Njemačke, koja je odigrala duboku ulogu u pobjedi saveznika u Drugom svjetskom ratu. Kriptanaliza koja je imala za cilj osmišljavanje i automatizaciju računskih procesa analize podataka (uglavnom šifrovane komunikacije) u cilju otkrivanja skrivenih informacija korišćena je za probijanje kriptografskih sistema i dobijanje pristupa sadržajima šifrovane komunikacije, obično od vojnog strateškog značaja. Kriptoanaliza je također bila ta koja je katalizirala razvoj prvih modernih kompjutera (koji su u početku primijenjeni za strateški cilj razbijanja koda). Britanskom Colossusu (koji se smatra prvim modernim elektronskim i programskim računarom) prethodila je poljska „bomba“, elektronski računarski uređaj koji je dizajnirao Marian Rejewski da pomogne u razbijanju šifri Enigme, a predata je Velikoj Britaniji od strane poljskih obavještajnih službi zajedno sa zarobljena nemačka mašina za šifrovanje Enigma, nakon što je Poljsku okupirala Nemačka 1939. Na osnovu ovog uređaja Alan Turing je razvio svoj napredniji pandan za uspešno razbijanje nemačke šifrovane komunikacije, koja je kasnije razvijena u moderne računare.
Budući da količina resursa potrebnih za pokretanje algoritma varira s veličinom ulaza, složenost se obično izražava kao funkcija f(n), gdje je n veličina ulaza, a f(n) ili složenost u najgorem slučaju ( maksimalnu količinu potrebnih resursa za sve ulaze veličine n) ili prosječnu složenost slučaja (prosjek količine resursa za sve ulaze veličine n). Broj potrebnih elementarnih operacija na ulazu veličine n obično se navodi kao vremenska složenost, gdje se vjeruje da elementarne operacije traju konstantno vrijeme na određenom računaru i mijenjaju se samo za konstantan faktor kada se izvode na drugoj mašini. Količina memorije koju algoritam zahtijeva na ulazu veličine n poznata je kao kompleksnost prostora.
Vrijeme je resurs koji se najčešće smatra. Kada se izraz „složenost“ koristi bez kvalifikatora, obično se odnosi na složenost vremena.
Tradicionalne jedinice vremena (sekunde, minute i tako dalje) se ne koriste u teoriji složenosti jer se previše oslanjaju na izabrani kompjuter i napredak tehnologije. Na primjer, današnji kompjuter može izvršiti algoritam znatno brže od kompjutera iz 1960-ih, ali to je zbog tehnoloških otkrića u kompjuterskom hardveru, a ne zbog inherentnog kvaliteta algoritma. Cilj teorije složenosti je da kvantifikuje inherentne vremenske potrebe algoritama, ili fundamentalna vremenska ograničenja koja bi algoritam nametnuo bilo kom računaru. Ovo se postiže prebrojavanjem koliko se osnovnih operacija izvodi tokom izračunavanja. Ove procedure se obično nazivaju koracima jer se smatra da traju konstantno vrijeme na određenoj mašini (tj. na njih ne utiče količina inputa).
Drugi važan resurs je količina računarske memorije potrebne za izvođenje algoritama.
Drugi često korišteni resurs je količina aritmetičkih operacija. U ovom scenariju koristi se izraz „aritmetička složenost“. Vremenska složenost je općenito proizvod aritmetičke složenosti pomoću konstantnog faktora ako je poznato gornje ograničenje na veličinu binarne reprezentacije brojeva koji se javljaju tokom izračunavanja.
Veličina celih brojeva koji se koriste tokom izračunavanja nije ograničena za mnoge metode i nerealno je pretpostaviti da aritmetičke operacije zahtevaju fiksno vreme. Kao rezultat toga, vremenska složenost, također poznata kao složenost bita, može biti znatno veća od aritmetičke složenosti. Aritmetička poteškoća izračunavanja determinante nn cjelobrojne matrice, na primjer, je O(n^3) za standardne tehnike (Gausova eliminacija). Budući da se veličina koeficijenata može eksponencijalno proširiti tokom izračunavanja, složenost bita istih metoda je eksponencijalna u n. Ako se ove tehnike koriste zajedno sa multimodularnom aritmetikom, složenost bita se može smanjiti na O(n^4).
Složenost bita, u formalnom smislu, odnosi se na broj operacija nad bitovima potrebnih za pokretanje algoritma. Ona je jednaka vremenskoj složenosti do konstantnog faktora u većini računskih paradigmi. Broj operacija nad mašinskim riječima koje zahtijevaju računari proporcionalan je složenosti bita. Za realistične modele proračuna, vremenska složenost i složenost bita su stoga identični.
Resurs koji se često uzima u obzir pri sortiranju i pretraživanju je količina poređenja unosa. Ako su podaci dobro raspoređeni, to je dobar pokazatelj vremenske složenosti.
Na svim potencijalnim ulazima, brojanje koraka u algoritmu je nemoguće. Budući da složenost ulaza raste s njegovom veličinom, on se obično predstavlja kao funkcija veličine ulaza n (u bitovima), pa je složenost funkcija od n. Međutim, za ulaze iste veličine, složenost algoritma može značajno varirati. Kao rezultat toga, rutinski se koriste različite funkcije složenosti.
Složenost najgoreg slučaja je zbir sve složenosti za sve ulaze veličine n, dok je složenost prosječnog slučaja zbir cjelokupne složenosti za sve ulaze veličine n (ovo ima smisla, jer je broj mogućih ulaza date veličine konačan). Kada se termin „složenost“ koristi bez daljeg definisanja, uzima se u obzir najgori slučaj složenosti vremena.
Složenost najgoreg i prosječnog slučaja je notorno teško ispravno izračunati. Nadalje, ove tačne vrijednosti imaju malo praktične primjene jer bi svaka promjena paradigme stroja ili proračuna neznatno promijenila složenost. Nadalje, korištenje resursa nije važno za male vrijednosti n, stoga je lakoća implementacije često privlačnija od niske složenosti za male vrijednosti n.
Iz ovih razloga, najviše pažnje se posvećuje ponašanju kompleksnosti za veliko n, odnosno njenom asimptotičkom ponašanju kada se n približava beskonačnosti. Kao rezultat toga, velika O notacija se obično koristi za označavanje složenosti.
Računski modeli
Odabir računskog modela, koji se sastoji od specificiranja bitnih operacija koje se izvode u jedinici vremena, važan je u određivanju složenosti. Ovo se ponekad naziva Turing mašina sa više traka kada paradigma računanja nije posebno opisana.
Deterministički model proračuna je onaj u kojem su naredna stanja mašine i operacije koje treba izvršiti u potpunosti definisane prethodnim stanjem. Rekurzivne funkcije, lambda račun i Turingove mašine bili su prvi deterministički modeli. Mašine sa slučajnim pristupom (takođe poznate kao RAM mašine) su popularna paradigma za simulaciju računara u stvarnom svetu.
Kada računski model nije definiran, obično se pretpostavlja Turingova mašina s više traka. Na Tjuringovim mašinama sa više traka, vremenska složenost je ista kao i na RAM mašinama za većinu algoritama, iako je potrebna značajna pažnja u načinu na koji se podaci pohranjuju u memoriju da bi se postigla ova ekvivalentnost.
Mogu se napraviti različiti izbori u nekim koracima izračunavanja u nedeterminističkom modelu računarstva, kao što su nedeterminističke Turingove mašine. U teoriji složenosti, sve izvodljive opcije se razmatraju u isto vrijeme, a nedeterministička vremenska složenost je količina vremena koja je potrebna kada se uvijek donose najbolji izbori. Drugim riječima, izračunavanje se vrši istovremeno na onoliko (identičnih) procesora koliko je potrebno, a nedeterminističko vrijeme izračunavanja je vrijeme potrebno prvom procesoru da završi izračunavanje. Ovaj paralelizam se može koristiti u kvantnom računarstvu korištenjem superponiranih zapletenih stanja pri pokretanju specijalizovanih kvantnih algoritama, kao što je Shorova faktorizacija sitnih cijelih brojeva, na primjer.
Čak i ako takav računski model trenutno nije izvodljiv, on ima teorijski značaj, posebno u odnosu na P = NP problem, koji postavlja pitanje da li su klase složenosti proizvedene korištenjem "polinomskog vremena" i "nedeterminističkog polinomskog vremena" kao najmanje gornje razine. granice su iste. Na determinističkom računaru, simulacija NP-algoritma zahtijeva “eksponencijalno vrijeme”. Ako se zadatak može riješiti u polinomskom vremenu na nedeterminističkom sistemu, on pripada NP klasi težine. Ako je problem u NP i nije lakši od bilo kojeg drugog NP problema, kaže se da je NP-potpun. Problem ranca, problem trgovačkog putnika i problem Booleove zadovoljivosti su NP-potpuni kombinatorni problemi. Najpoznatiji algoritam ima eksponencijalnu složenost za sve ove probleme. Ako bi se bilo koji od ovih problema mogao riješiti u polinomskom vremenu na determinističkoj mašini, onda bi se svi NP problemi mogli riješiti i u polinomskom vremenu, i P = NP bi se uspostavio. Od 2017. godine, široko se pretpostavlja da je P NP, što implicira da je najgore situacije NP problema fundamentalno teško riješiti, tj. da im je potrebno mnogo duže od bilo kojeg izvodljivog vremenskog raspona (decenijama) s obzirom na zanimljive ulazne dužine.
Paralelno i distribuirano računarstvo
Paralelno i distribuirano računarstvo uključuje podelu obrade na više procesora koji svi rade u isto vreme. Osnovna razlika između različitih modela je način slanja podataka između procesora. Prijenos podataka između procesora je obično vrlo brz u paralelnom računarstvu, dok se prijenos podataka između procesora u distribuiranom računarstvu obavlja preko mreže i stoga je znatno sporiji.
Izračunavanje na N procesora uzima najmanje kvocijent za N vremena potrebnog jednom procesoru. U stvarnosti, budući da se neki podzadaci ne mogu paralelizirati i neki procesori će možda morati čekati rezultat od drugog procesora, ova teoretski idealna granica nikada neće biti postignuta.
Ključno pitanje složenosti je stoga razviti algoritme tako da proizvod vremena računanja na broj procesora bude što je moguće bliži vremenu potrebnom za izvođenje istog izračuna na jednom procesoru.
Kvantno računanje
Kvantni kompjuter je računar sa modelom izračunavanja zasnovanim na kvantnoj mehanici. Church-Turingova teza vrijedi za kvantne kompjutere, što implicira da bilo koji problem koji kvantni kompjuter može riješiti može biti riješen i Turingovom mašinom. Međutim, neki zadaci bi se teoretski mogli riješiti korištenjem kvantnog kompjutera umjesto klasičnog računara sa znatno nižom vremenskom složenošću. Za sada je to striktno teoretski, jer niko ne zna kako da razvije praktičan kvantni kompjuter.
Kvantna teorija složenosti stvorena je da istraži različite vrste problema koje mogu riješiti kvantni kompjuteri. Koristi se u post-kvantnoj kriptografiji, što je proces stvaranja kriptografskih protokola otpornih na kvantne kompjuterske napade.
Složenost problema (donje granice)
Najniži dio složenosti algoritama koji mogu riješiti problem, uključujući neotkrivene tehnike, je složenost problema. Kao rezultat toga, složenost problema je jednaka složenosti bilo kog algoritma koji ga rješava.
Kao rezultat, bilo koja složenost data u velikoj O notaciji predstavlja složenost i algoritma i pratećeg problema.
S druge strane, dobijanje netrivijalnih donjih granica složenosti problema je često teško, a postoji nekoliko strategija za to.
Da bi se riješila većina problema, svi ulazni podaci se moraju pročitati, za što je potrebno vrijeme proporcionalno veličini podataka. Kao rezultat, takvi problemi imaju barem linearnu složenost, ili, u velikoj omega notaciji, složenost Ω(n).
Neki problemi, poput onih iz kompjuterske algebre i računske algebarske geometrije, imaju vrlo velika rješenja. Budući da izlaz mora biti napisan, složenost je ograničena maksimalnom veličinom izlaza.
Broj poređenja potrebnih za algoritam sortiranja ima nelinearnu donju granicu Ω(nlogn). Kao rezultat toga, najbolji algoritmi za sortiranje su najefikasniji jer je njihova složenost O(nlogn). Činjenica da postoje n! načini organiziranja n stvari vodi do ove donje granice. Jer svako poređenje dijeli ovu kolekciju od n! redoslijeda na dva dijela, broj N poređenja potrebnih za razlikovanje svih redova mora biti 2N > n!, što implicira O(nlogn) prema Stirlingovoj formuli.
Svođenje problema na drugi problem je uobičajena strategija za postizanje ograničenja smanjene složenosti.
Razvoj algoritma
Procjena složenosti algoritma je važan element procesa dizajna jer pruža korisne informacije o performansama koje se mogu očekivati.
Čest je nesporazum da će, kao rezultat Murovog zakona, koji predviđa eksponencijalni rast moderne računarske snage, procena složenosti algoritama postati manje relevantna. Ovo je netačno jer povećana snaga omogućava obradu ogromnih količina podataka (big data). Na primjer, bilo koji algoritam bi trebao dobro funkcionirati za manje od sekunde kada sortira po abecednom redu listu od nekoliko stotina unosa, kao što je bibliografija knjige. S druge strane, za milion unosa (na primjer, telefonski brojevi velikog grada), osnovni algoritmi koji zahtijevaju O(n2) poređenja morali bi izvršiti trilion poređenja, što bi trajalo tri sata pri brzini od 10 milion poređenja u sekundi. Brzo sortiranje i sortiranje spajanjem, s druge strane, zahtijevaju samo nlogn poređenja (kao složenost prosječnog slučaja za prvo, kao složenost najgoreg slučaja za drugo). Ovo proizvodi oko 30,000,000 poređenja za n = 1,000,000, što bi trajalo samo 3 sekunde pri 10 miliona poređenja u sekundi.
Kao rezultat toga, procjena složenosti može omogućiti eliminaciju mnogih neefikasnih algoritama prije implementacije. Ovo se također može koristiti za fino podešavanje složenih algoritama bez potrebe za testiranjem svih mogućih varijanti. Proučavanje složenosti omogućava fokusiranje napora za povećanje efikasnosti implementacije određivanjem najskupljih koraka složenog algoritma.
Da biste se detaljno upoznali sa nastavnim planom i programom sertifikacije, možete proširiti i analizirati tabelu ispod.
EITC/IS/CCTF Kurikulum sertifikacije osnova teorije složenosti računarstva upućuje na didaktičke materijale otvorenog pristupa u video obliku. Proces učenja je podijeljen u strukturu korak po korak (programi -> lekcije -> teme) koja pokriva relevantne dijelove kurikuluma. Učesnici mogu pristupiti odgovorima i postaviti relevantnija pitanja u odjeljku Pitanja i odgovori na interfejsu za e-učenje u okviru trenutno napredne teme kurikuluma EITC programa. Direktno i neograničeno savjetovanje sa stručnjacima iz domena također je dostupno putem platforme integriranog sistema za online razmjenu poruka, kao i putem kontakt forme.
Za detalje o proceduri certifikacije provjerite Kako funkcionira.
Materijali za čitanje osnovnog nastavnog plana i programa
S. Arora, B. Barak, Computational Complexity: A Modern Approach
https://theory.cs.princeton.edu/complexity/book.pdf
Materijali za čitanje sekundarnog kurikuluma
O. Goldreich, Uvod u teoriju složenosti:
https://www.wisdom.weizmann.ac.il/~oded/cc99.html
Pomoćni materijal za čitanje nastavnog plana i programa o diskretnoj matematici
J. Aspnes, Bilješke o diskretnoj matematici:
https://www.cs.yale.edu/homes/aspnes/classes/202/notes.pdf
Pomoćni materijali za čitanje kurikuluma o teoriji grafova
R. Diestel, Teorija grafova:
https://diestel-graph-theory.com/
Preuzmite kompletne pripremne materijale za vanmrežno učenje za program EITC/IS/CCTF Computational Complexity Theory Fundamentals u PDF datoteci
EITC/IS/CCTF pripremni materijali – standardna verzija
EITC/IS/CCTF pripremni materijali – proširena verzija sa pitanjima za pregled