
EITC/IS/CCTF Computational Complexity Theory Fundamentals je európsky certifikačný program IT zameraný na teoretické aspekty základov počítačovej vedy, ktoré sú tiež základom klasickej asymetrickej kryptografie s verejným kľúčom široko používanej na internete.
Učebné osnovy EITC/IS/CCTF Základy teórie výpočtovej zložitosti zahŕňajú teoretické poznatky o základoch počítačovej vedy a výpočtových modeloch na základných pojmoch, ako sú deterministické a nedeterministické konečné automaty, regulárne jazyky, bezkontextové gramatiky a teória jazykov, teória automatov, Turing. Stroje, rozhodnosť problémov, rekurzia, logika a zložitosť algoritmov pre základné bezpečnostné aplikácie v rámci nasledujúcej štruktúry, zahŕňajúce komplexné a štruktúrované samovzdelávacie učebné osnovy certifikácie EITCI podporované referenčným didaktickým videom s otvoreným prístupom ako základ pre prípravu na získanie tejto certifikácie EITC absolvovaním príslušnej skúšky.
Výpočtová zložitosť algoritmu je množstvo zdrojov potrebných na jeho prevádzku. Osobitná pozornosť sa venuje časovým a pamäťovým zdrojom. Zložitosť problému je definovaná ako zložitosť najlepších algoritmov na jeho riešenie. Analýza algoritmov je štúdiom zložitosti explicitne daných algoritmov, zatiaľ čo teória výpočtovej zložitosti je štúdiom zložitosti riešení problémov pomocou najznámejších algoritmov. Obe domény sú vzájomne prepojené, pretože zložitosť algoritmu je vždy horným obmedzením zložitosti problému, ktorý rieši. Okrem toho je často potrebné porovnať zložitosť určitého algoritmu so zložitosťou problému, ktorý sa má riešiť, pri zostavovaní efektívnych algoritmov. Vo väčšine prípadov je jedinou dostupnou informáciou o zložitosti problému, že je menšia ako zložitosť najúčinnejších známych techník. Výsledkom je, že medzi analýzou algoritmov a teóriou zložitosti sa veľa prekrýva.
Teória zložitosti hrá dôležitú úlohu nielen v základoch výpočtových modelov ako základu informatiky, ale aj v základoch klasickej asymetrickej kryptografie (tzv. kryptografia s verejným kľúčom), ktorá je široko rozšírená v moderných sieťach, najmä na internete. Šifrovanie pomocou verejného kľúča je založené na výpočtovej náročnosti určitých asymetrických matematických problémov, ako je napríklad faktorizácia veľkých čísel na ich prvočísla (táto operácia je ťažkým problémom v klasifikácii teórie zložitosti, pretože nie sú známe účinné klasické algoritmy na riešenie so zdrojmi, ktoré sa škálujú polynomiálne a nie exponenciálne so zvyšovaním veľkosti vstupu do problému, čo je v kontraste s veľmi jednoduchou spätnou operáciou násobenia známymi prvočíselnými faktormi, aby sa získal pôvodný veľký počet). Použitím tejto asymetrie v architektúre kryptografie s verejným kľúčom (definovaním výpočtovo asymetrického vzťahu medzi verejným kľúčom, ktorý sa dá ľahko vypočítať zo súkromného kľúča, zatiaľ čo súkromný kľúč sa nedá ľahko počítačovo z verejného kľúča, možno verejne oznámiť verejný kľúč a umožniť ostatným komunikačným stranám použiť ho na asymetrické šifrovanie údajov, ktoré je potom možné dešifrovať iba pomocou spojeného súkromného kľúča, ktorý nie je výpočtovo dostupný pre tretie strany, čím je komunikácia bezpečná).
Teória výpočtovej zložitosti bola vyvinutá najmä na základe úspechov priekopníkov počítačovej vedy a algoritmov, akým bol Alan Turing, ktorého práca bola rozhodujúca pre prelomenie šifry Enigma nacistického Nemecka, ktorá zohrala významnú úlohu pri víťazstve spojencov v druhej svetovej vojne. Kryptoanalýza zameraná na navrhnutie a automatizáciu výpočtových procesov analýzy dát (hlavne šifrovanej komunikácie) s cieľom odhaliť skryté informácie bola použitá na prelomenie kryptografických systémov a získanie prístupu k obsahu šifrovanej komunikácie, zvyčajne strategickej vojenskej dôležitosti. Bola to tiež kryptoanalýza, ktorá katalyzovala vývoj prvých moderných počítačov (ktoré boli pôvodne aplikované na strategický cieľ lámania kódov). Britskému kolosu (považovanému za prvý moderný elektronický a programový počítač) predchádzala poľská „bomba“, elektronické výpočtové zariadenie navrhnuté Marianom Rejewskim na pomoc pri prelomení šifier Enigmy, ktoré poľská rozviedka odovzdala Veľkej Británii spolu s zajatý nemecký šifrovací stroj Enigma po napadnutí Poľska Nemeckom v roku 1939. Na základe tohto zariadenia Alan Turing vyvinul jeho pokročilejší náprotivok na úspešné prelomenie nemeckej šifrovanej komunikácie, ktorá sa neskôr vyvinula do moderných počítačov.
Pretože množstvo zdrojov potrebných na spustenie algoritmu sa mení s veľkosťou vstupu, zložitosť sa zvyčajne vyjadruje ako funkcia f(n), kde n je veľkosť vstupu a f(n) je buď najhorší prípad zložitosti ( maximálne množstvo zdrojov požadovaných naprieč všetkými vstupmi veľkosti n) alebo priemerná zložitosť prípadu (priemer množstva zdrojov na všetkých vstupoch veľkosti n). Počet požadovaných elementárnych operácií na vstupe s veľkosťou n sa bežne uvádza ako časová zložitosť, pričom sa predpokladá, že elementárne operácie zaberajú na konkrétnom počítači konštantný čas a menia sa iba konštantným faktorom, keď sú spustené na inom stroji. Množstvo pamäte, ktorú vyžaduje algoritmus na vstupe veľkosti n, sa nazýva priestorová zložitosť.
Čas je najčastejšie považovaný za zdroj. Keď sa výraz „zložitosť“ používa bez kvalifikátora, zvyčajne sa vzťahuje na zložitosť času.
Tradičné jednotky času (sekundy, minúty atď.) sa v teórii zložitosti nepoužívajú, pretože sú príliš závislé od zvoleného počítača a technologického pokroku. Napríklad počítač dnes dokáže vykonať algoritmus podstatne rýchlejšie ako počítač zo 1960-tych rokov XNUMX. storočia, ale je to skôr vďaka technologickým prelomom v počítačovom hardvéri, než kvôli vlastnej kvalite algoritmu. Cieľom teórie zložitosti je kvantifikovať inherentné časové potreby algoritmov alebo základné časové obmedzenia, ktoré by algoritmus uvalil na akýkoľvek počítač. To sa dosiahne spočítaním, koľko základných operácií sa vykoná počas výpočtu. Tieto postupy sa bežne označujú ako kroky, pretože sa predpokladá, že na konkrétnom stroji zaberajú konštantný čas (tj nie sú ovplyvnené množstvom vstupu).
Ďalším dôležitým zdrojom je množstvo počítačovej pamäte potrebnej na vykonávanie algoritmov.
Ďalším často využívaným zdrojom je množstvo aritmetických operácií. V tomto scenári sa používa termín „aritmetická zložitosť“. Časová zložitosť je vo všeobecnosti súčinom aritmetickej zložitosti konštantným faktorom, ak je známe horné obmedzenie veľkosti binárnej reprezentácie čísel, ktoré sa vyskytujú počas výpočtu.
Veľkosť celých čísel použitých počas výpočtu nie je pre mnohé metódy obmedzená a je nereálne predpokladať, že aritmetické operácie vyžadujú pevné množstvo času. V dôsledku toho môže byť časová zložitosť, známa aj ako bitová zložitosť, výrazne vyššia ako aritmetická zložitosť. Aritmetická náročnosť výpočtu determinantu celočíselnej matice nn je napríklad O(n^3) pre štandardné techniky (Gaussova eliminácia). Pretože veľkosť koeficientov sa môže počas výpočtu exponenciálne rozširovať, bitová zložitosť rovnakých metód je exponenciálna v n. Ak sa tieto techniky použijú v spojení s multimodulárnou aritmetikou, bitová zložitosť sa môže znížiť na O(n^4).
Bitová zložitosť vo formálnom vyjadrení označuje počet operácií na bitoch potrebných na spustenie algoritmu. Vo väčšine výpočtových paradigiem sa rovná časovej zložitosti až po konštantný faktor. Počet operácií na strojových slovách požadovaných počítačmi je úmerný bitovej zložitosti. Pre realistické modely výpočtu sú teda časová a bitová zložitosť totožné.
Zdrojom, ktorý sa často zvažuje pri triedení a vyhľadávaní, je množstvo porovnávaní záznamov. Ak sú údaje dobre usporiadané, je to dobrý indikátor časovej zložitosti.
Na všetkých potenciálnych vstupoch nie je možné spočítať počet krokov v algoritme. Pretože zložitosť vstupu rastie s jeho veľkosťou, je bežne reprezentovaný ako funkcia veľkosti vstupu n (v bitoch), takže zložitosť je funkciou n. Pre vstupy rovnakej veľkosti sa však zložitosť algoritmu môže podstatne líšiť. V dôsledku toho sa bežne používajú rôzne funkcie zložitosti.
Zložitosť najhoršieho prípadu je súčet všetkej zložitosti pre všetky vstupy veľkosti n, zatiaľ čo zložitosť priemerného prípadu je súčtom všetkej zložitosti pre všetky vstupy veľkosti n (to dáva zmysel, pretože počet možných vstupov danej veľkosti je konečný). Keď sa výraz „zložitosť“ použije bez toho, aby bol bližšie definovaný, berie sa do úvahy najhorší prípad časovej zložitosti.
Zložitosť najhoršieho a priemerného prípadu je notoricky ťažké správne vypočítať. Okrem toho tieto presné hodnoty majú malé praktické využitie, pretože akákoľvek zmena v stroji alebo výpočtovej paradigme by mierne zmenila zložitosť. Okrem toho využitie zdrojov nie je dôležité pre malé hodnoty n, preto je jednoduchosť implementácie často príťažlivejšia ako nízka zložitosť pre malé n.
Z týchto dôvodov sa väčšina pozornosti venuje správaniu sa zložitosti pre vysoké n, to znamená jej asymptotickému správaniu, keď sa n blíži k nekonečnu. V dôsledku toho sa na označenie zložitosti bežne používa veľká notácia O.
Výpočtové modely
Pri určovaní zložitosti je dôležitý výber výpočtového modelu, ktorý pozostáva zo špecifikácie podstatných operácií, ktoré sa vykonávajú za jednotku času. Toto sa niekedy označuje ako viacpáskový Turingov stroj, keď nie je špecificky opísaná výpočtová paradigma.
Deterministický model výpočtu je model, v ktorom sú nasledujúce stavy stroja a operácie, ktoré sa majú vykonať, úplne definované predchádzajúcim stavom. Rekurzívne funkcie, lambda počet a Turingove stroje boli prvými deterministickými modelmi. Stroje s náhodným prístupom (tiež známe ako RAM-stroje) sú populárnou paradigmou na simuláciu počítačov v reálnom svete.
Keď nie je definovaný výpočtový model, zvyčajne sa predpokladá viacpáskový Turingov stroj. Na multipáskových Turingových strojoch je časová zložitosť rovnaká ako na strojoch RAM pre väčšinu algoritmov, aj keď na dosiahnutie tejto ekvivalencie môže byť potrebná značná pozornosť pri ukladaní údajov v pamäti.
V niektorých krokoch výpočtu v nedeterministickom výpočtovom modeli, ako sú nedeterministické Turingove stroje, možno urobiť rôzne voľby. V teórii zložitosti sa všetky možné možnosti zvažujú súčasne a nedeterministická časová zložitosť je množstvo času potrebného na to, aby sa vždy urobili najlepšie rozhodnutia. Inými slovami, výpočet sa vykonáva súčasne na toľkých (identických) procesoroch, koľko je potrebných, a nedeterministický čas výpočtu je čas, ktorý prvý procesor potrebuje na dokončenie výpočtu. Tento paralelizmus možno použiť v kvantových výpočtoch pomocou superponovaných zapletených stavov pri spúšťaní špecializovaných kvantových algoritmov, ako je napríklad Shorova faktorizácia malých celých čísel.
Aj keď takýto výpočtový model nie je v súčasnosti uskutočniteľný, má teoretický význam, najmä vo vzťahu k problému P = NP, ktorý sa pýta, či triedy zložitosti vytvorené použitím „polynomického času“ a „nedeterministického polynómového času“ sú najmenej vyššie. hranice sú rovnaké. Na deterministickom počítači si simulácia NP-algoritmu vyžaduje „exponenciálny čas“. Ak je možné úlohu vyriešiť v polynomiálnom čase na nedeterministickom systéme, patrí do triedy obtiažnosti NP. Ak je problém v NP a nie je jednoduchší ako ktorýkoľvek iný problém NP, hovorí sa, že je NP-úplný. Problém batohu, problém obchodného cestujúceho a booleovský problém uspokojiteľnosti sú všetky NP-úplné kombinatorické problémy. Najznámejší algoritmus má exponenciálnu zložitosť pre všetky tieto problémy. Ak by sa niektorý z týchto problémov dal vyriešiť v polynomiálnom čase na deterministickom stroji, potom by sa všetky NP problémy dali vyriešiť aj v polynomiálnom čase a bolo by stanovené P = NP. Od roku 2017 sa všeobecne predpokladá, že P NP, čo znamená, že najhoršie situácie problémov NP je zásadne ťažké vyriešiť, tj trvá oveľa dlhšie ako akékoľvek možné časové rozpätie (desaťročia) vzhľadom na zaujímavú dĺžku vstupu.
Paralelné a distribuované výpočty
Paralelné a distribuované výpočty zahŕňajú rozdelenie spracovania medzi viacero procesorov, ktoré všetky pracujú súčasne. Základným rozdielom medzi rôznymi modelmi je spôsob odosielania údajov medzi procesormi. Prenos údajov medzi procesormi je typicky veľmi rýchly pri paralelných výpočtoch, zatiaľ čo prenos údajov medzi procesormi pri distribuovaných výpočtoch prebieha cez sieť a je teda podstatne pomalší.
Výpočet na N procesoroch trvá aspoň podiel N času, ktorý zaberie jeden procesor. V skutočnosti, pretože niektoré čiastkové úlohy nemožno paralelizovať a niektoré procesory môžu musieť čakať na výsledok od iného procesora, táto teoreticky ideálna hranica sa nikdy nedosiahne.
Kľúčovým problémom zložitosti je teda vyvinúť algoritmy tak, aby súčin výpočtového času počtom procesorov bol čo najbližšie k času potrebnému na vykonanie rovnakého výpočtu na jednom procesore.
Kvantový výpočet
Kvantový počítač je počítač s výpočtovým modelom založeným na kvantovej mechanike. Churchova-Turingova téza platí pre kvantové počítače, z čoho vyplýva, že akýkoľvek problém, ktorý kvantový počítač dokáže vyriešiť, môže vyriešiť aj Turingov stroj. Niektoré úlohy by sa však teoreticky dali vyriešiť skôr pomocou kvantového počítača ako klasického počítača s výrazne nižšou časovou zložitosťou. Zatiaľ je to čisto teoretické, keďže nikto nevie, ako vyvinúť praktický kvantový počítač.
Teória kvantovej zložitosti bola vytvorená s cieľom preskúmať rôzne typy problémov, ktoré môžu kvantové počítače vyriešiť. Používa sa v postkvantovej kryptografii, čo je proces vytvárania kryptografických protokolov, ktoré sú odolné voči útokom kvantových počítačov.
Zložitosť problému (dolné hranice)
Minimálna zložitosť algoritmov, ktoré môžu vyriešiť problém, vrátane neobjavených techník, je zložitosť problému. V dôsledku toho sa zložitosť problému rovná zložitosti akéhokoľvek algoritmu, ktorý ho rieši.
V dôsledku toho akákoľvek zložitosť uvedená vo veľkom zápise O predstavuje zložitosť algoritmu aj sprievodného problému.
Na druhej strane je často ťažké získať netriviálne spodné hranice zložitosti problému a existuje len málo stratégií, ako to dosiahnuť.
Na vyriešenie väčšiny problémov je potrebné prečítať všetky vstupné údaje, čo si vyžaduje čas úmerný veľkosti údajov. Výsledkom je, že takéto problémy majú prinajmenšom lineárnu zložitosť alebo vo veľkej omega notácii zložitosť Ω(n).
Niektoré problémy, ako napríklad problémy v počítačovej algebre a výpočtovej algebraickej geometrii, majú veľmi rozsiahle riešenia. Pretože výstup musí byť zapísaný, zložitosť je obmedzená maximálnou veľkosťou výstupu.
Počet porovnaní požadovaných pre triediaci algoritmus má nelineárnu spodnú hranicu Ω(nlogn). V dôsledku toho sú najlepšie triediace algoritmy najefektívnejšie, pretože ich zložitosť je O(nlogn). Skutočnosť, že existuje n! spôsoby organizácie vecí vedú k tejto spodnej hranici. Pretože každé porovnanie rozdeľuje túto zbierku n! objednávky na dva kusy, počet N porovnaní potrebných na rozlíšenie všetkých objednávok musí byť 2N > n!, čo znamená O(nlogn) podľa Stirlingovho vzorca.
Zmenšenie problému na iný problém je bežnou stratégiou na dosiahnutie znížených obmedzení zložitosti.
Vývoj algoritmu
Hodnotenie zložitosti algoritmu je dôležitým prvkom procesu návrhu, pretože poskytuje užitočné informácie o očakávanom výkone.
Je častým nedorozumením, že v dôsledku Moorovho zákona, ktorý predpovedá exponenciálny rast moderného počítačového výkonu, bude hodnotenie zložitosti algoritmov menej relevantné. Toto je nesprávne, pretože zvýšený výkon umožňuje spracovanie obrovského množstva údajov (veľké údaje). Napríklad pri abecednom triedení zoznamu niekoľkých stoviek záznamov, ako je bibliografia knihy, by mal každý algoritmus fungovať dobre za menej ako sekundu. Na druhej strane, pre milión záznamov (napríklad telefónne čísla veľkého mesta) by základné algoritmy, ktoré vyžadujú porovnanie O(n2), museli vykonať bilión porovnaní, čo by trvalo tri hodiny pri rýchlosti 10 milión porovnaní za sekundu. Na druhej strane rýchle triedenie a zlučovacie triedenie vyžadujú iba porovnania nlogn (ako zložitosť priemerného prípadu pre prvé, ako zložitosť najhoršieho prípadu pre druhú). To vytvára približne 30,000,000 1,000,000 3 porovnaní pre n = 10 XNUMX XNUMX, čo by pri XNUMX miliónoch porovnaní za sekundu trvalo len XNUMX sekundy.
V dôsledku toho môže posúdenie zložitosti umožniť elimináciu mnohých neefektívnych algoritmov pred implementáciou. To sa dá použiť aj na doladenie zložitých algoritmov bez toho, aby ste museli testovať všetky možné varianty. Štúdium zložitosti umožňuje zamerať úsilie na zvýšenie efektívnosti implementácie určením najnákladnejších krokov zložitého algoritmu.
Aby ste sa podrobne oboznámili s certifikačným učebným plánom, môžete rozšíriť a analyzovať tabuľku nižšie.
Certifikačný učebný plán EITC/IS/CCTF Základy teórie výpočtovej zložitosti odkazuje na didaktické materiály s otvoreným prístupom vo forme videa. Učebný proces je rozdelený na štruktúru krok za krokom (programy -> lekcie -> témy), ktorá pokrýva príslušné časti kurikula. Účastníci môžu získať prístup k odpovediam a klásť relevantnejšie otázky v sekcii Otázky a odpovede e-learningového rozhrania v rámci aktuálne prebiehajúcej témy študijného programu EITC. Priame a neobmedzené poradenstvo s doménovými odborníkmi je dostupné aj prostredníctvom integrovaného systému online zasielania správ platformy, ako aj prostredníctvom kontaktného formulára.
Podrobnosti o kontrole postupu certifikácie Ako funguje CBD Factum Pet Solution?.
Materiály na čítanie základných podporných učebných osnov
S. Arora, B. Barak, Computational Complexity: A Modern Approach
https://theory.cs.princeton.edu/complexity/book.pdf
Materiály na čítanie sekundárnych podporných učebných osnov
O. Goldreich, Úvod do teórie zložitosti:
https://www.wisdom.weizmann.ac.il/~oded/cc99.html
Podporné učebné materiály na čítanie diskrétnej matematiky
J. Aspnes, Poznámky k diskrétnej matematike:
https://www.cs.yale.edu/homes/aspnes/classes/202/notes.pdf
Podporné učebné materiály na čítanie o teórii grafov
R. Diestel, Teória grafov:
https://diestel-graph-theory.com/
Stiahnite si kompletné offline samovzdelávacie prípravné materiály pre program EITC/IS/CCTF Computational Complexity Theory Fundamentals v súbore PDF
Prípravné materiály EITC/IS/CCTF – štandardná verzia
Prípravné materiály EITC/IS/CCTF – rozšírená verzia o recenzné otázky