Ang EITC/IS/CCTF Computational Complexity Theory Fundamentals ay ang European IT Certification program sa teoretikal na aspeto ng mga pundasyon ng computer science na isa ring batayan ng classical asymmetric public-key cryptography na malawakang ginagamit sa Internet.
Ang curriculum ng EITC/IS/CCTF Computational Complexity Theory Fundamentals ay sumasaklaw sa teoretikal na kaalaman sa mga pundasyon ng computer science at computational na mga modelo sa mga pangunahing konsepto tulad ng deterministic at nondeterministic finite state machines, regular na wika, context free grammer at language theory, automata theory, Turing Mga machine, decidability ng mga problema, recursion, logic at complexity ng algorithmics para sa mga pangunahing aplikasyon ng seguridad sa loob ng sumusunod na istraktura, na sumasaklaw sa komprehensibong video didactic na nilalaman bilang isang sanggunian para sa EITC Certification na ito.
Ang computational complexity ng isang algorithm ay ang dami ng mga mapagkukunang kinakailangan upang mapatakbo ito. Ang mga mapagkukunan ng oras at memorya ay binibigyan ng espesyal na pansin. Ang pagiging kumplikado ng isang problema ay tinukoy bilang ang pagiging kumplikado ng pinakamahusay na mga algorithm para sa paglutas nito. Ang pagsusuri ng mga algorithm ay ang pag-aaral ng pagiging kumplikado ng mga tahasang ibinigay na mga algorithm, samantalang ang computational complexity theory ay ang pag-aaral ng pagiging kumplikado ng mga solusyon sa problema na may pinakakilalang mga algorithm. Ang parehong mga domain ay magkakaugnay dahil ang pagiging kumplikado ng isang algorithm ay palaging isang nakatataas na hadlang sa pagiging kumplikado ng problemang nalulutas nito. Higit pa rito, madalas na kinakailangan upang ihambing ang pagiging kumplikado ng isang tiyak na algorithm sa pagiging kumplikado ng problema na lutasin habang gumagawa ng mahusay na mga algorithm. Sa karamihan ng mga pagkakataon, ang tanging impormasyon na magagamit tungkol sa kahirapan ng isang problema ay na ito ay mas mababa kaysa sa pagiging kumplikado ng mga pinaka mahusay na kilalang pamamaraan. Bilang resulta, maraming magkakapatong sa pagitan ng pagsusuri ng algorithm at teorya ng pagiging kumplikado.
Ang teorya ng pagiging kumplikado ay gumaganap ng isang mahalagang hindi lamang sa mga pundasyon ng mga modelo ng computational bilang batayan para sa agham ng kompyuter kundi pati na rin sa mga pundasyon ng klasikal na asymmetric cryptography (tinatawag na public-key cryptography) na malawakang ipinakalat sa mga modernong network, lalo na sa Internet. Ang public-key encryption ay nakabatay sa computational difficult ng ilang asymmetric mathematical na problema tulad ng halimbawa ng factorization ng malalaking numero sa mga pangunahing salik nito (ang operasyong ito ay isang mahirap na problema sa complexity theory classification, dahil walang alam na mahusay na mga klasikal na algorithm upang malutas ito na may mga mapagkukunang scaling polynomially sa halip na exponentially sa pagtaas ng laki ng input ng problema, na kung saan ay kabaligtaran sa isang napaka-simpleng reverse operation ng multiply sa mga kilalang prime factor upang bigyan ang orihinal na malaking bilang). Gamit ang asymmetry na ito sa isang arkitektura ng public-key cryptography (sa pamamagitan ng pagtukoy sa isang computationally asymmetric na ugnayan sa pagitan ng pampublikong key, na madaling makalkula mula sa isang pribadong key, habang ang pribadong key ay hindi madaling mai-computer mula sa isang pampublikong key, ang isa ay maaaring pampublikong ipahayag ang pampublikong susi at bigyang-daan ang iba pang panig ng komunikasyon na gamitin ito para sa walang simetrya na pag-encrypt ng data, na maaari lamang i-decrypt gamit ang pinagsamang pribadong key, hindi magagamit sa computationally sa mga third party, kaya ginagawang secure ang komunikasyon).
Ang computational complexity theory ay binuo pangunahin sa mga tagumpay ng computer science at algorithmics pioneers, tulad ni Alan Turing, na ang gawain ay kritikal sa pagsira sa Enigma cipher ng Nazi Germany, na gumanap ng malalim na papel sa mga kaalyado na nanalo sa Ikalawang Digmaang Pandaigdig. Ang Cryptanalysis na naglalayong gumawa at mag-automate ng mga proseso ng computational ng pagsusuri ng data (pangunahin ang naka-encrypt na komunikasyon) upang matuklasan ang nakatagong impormasyon ay ginamit upang labagin ang mga cryptographic system at makakuha ng access sa mga nilalaman ng naka-encrypt na komunikasyon, kadalasang may kahalagahang pang-militar. Ito rin ay cryptanalysis na nag-catalyzed sa pag-unlad ng mga unang modernong computer (na unang inilapat sa isang estratehikong layunin ng codebreaking). Ang British Colossus (itinuring na unang modernong electronic at program computer) ay nauna sa Polish na "bomba", isang elektronikong computational device na idinisenyo ni Marian Rejewski upang tumulong sa pagsira ng mga Enigma cipher, at ibinigay sa Great Britain ng Polish intelligence kasama ng ang nakunan na German Enigma encryption machine, matapos ang Poland ay invaded ng Germany noong 1939. Sa batayan ng device na ito, binuo ni Alan Turing ang mas advanced na katapat nito upang matagumpay na masira ang German encrypted na komunikasyon, na sa kalaunan ay ginawang modernong mga computer.
Dahil ang halaga ng mga mapagkukunan na kinakailangan upang magpatakbo ng isang algorithm ay nag-iiba sa laki ng input, ang pagiging kumplikado ay karaniwang ipinahayag bilang isang function na f(n), kung saan ang n ay ang laki ng input at ang f(n) ay alinman sa pinakamasamang kaso na kumplikado ( ang maximum na halaga ng mga mapagkukunan na kinakailangan sa lahat ng mga input ng laki n) o ang average-case na kumplikado (ang average ng dami ng mga mapagkukunan sa lahat ng mga input ng laki n). Ang bilang ng mga kinakailangang elementarya na operasyon sa isang input na may sukat na n ay karaniwang isinasaad bilang pagiging kumplikado ng oras, kung saan ang mga elementaryang operasyon ay pinaniniwalaang tumatagal ng pare-parehong tagal ng oras sa isang partikular na computer at nagbabago lamang sa pamamagitan ng isang pare-parehong salik kapag tumatakbo sa ibang makina. Ang dami ng memorya na kinakailangan ng isang algorithm sa isang input ng laki n ay kilala bilang pagiging kumplikado ng espasyo.
Ang oras ay ang pinakakaraniwang itinuturing na mapagkukunan. Kapag ang terminong "kumplikado" ay ginamit nang walang qualifier, karaniwan itong tumutukoy sa pagiging kumplikado ng oras.
Ang mga tradisyonal na yunit ng oras (segundo, minuto, at iba pa) ay hindi ginagamit sa teorya ng pagiging kumplikado dahil sila ay masyadong umaasa sa computer na pinili at sa pagsulong ng teknolohiya. Halimbawa, ang isang computer ngayon ay maaaring magsagawa ng isang algorithm na mas mabilis kaysa sa isang computer mula noong 1960s, ngunit, ito ay dahil sa mga teknolohikal na tagumpay sa computer hardware sa halip na isang likas na kalidad ng algorithm. Ang layunin ng teorya ng pagiging kumplikado ay upang mabilang ang mga likas na pangangailangan ng oras ng mga algorithm, o ang mga pangunahing limitasyon sa oras na ipapataw ng isang algorithm sa anumang computer. Nagagawa ito sa pamamagitan ng pagbibilang kung gaano karaming mga pangunahing operasyon ang ginagawa sa panahon ng pagkalkula. Ang mga pamamaraang ito ay karaniwang tinutukoy bilang mga hakbang dahil ang mga ito ay itinuturing na tumatagal ng patuloy na oras sa isang partikular na makina (ibig sabihin, hindi sila naaapektuhan ng dami ng input).
Ang isa pang mahalagang mapagkukunan ay ang dami ng memorya ng computer na kinakailangan upang magsagawa ng mga algorithm.
Ang isa pang madalas na ginagamit na mapagkukunan ay ang dami ng mga operasyon sa aritmetika. Sa sitwasyong ito, ginagamit ang terminong "arithmetic complexity". Ang pagiging kumplikado ng oras ay karaniwang produkto ng pagiging kumplikado ng aritmetika sa pamamagitan ng isang pare-parehong salik kung ang isang mataas na hadlang sa laki ng binary na representasyon ng mga numero na nagaganap sa panahon ng isang pagtutuos ay kilala.
Ang laki ng mga integer na ginamit sa panahon ng pag-compute ay hindi pinipigilan para sa maraming pamamaraan, at hindi makatotohanang ipagpalagay na ang mga pagpapatakbo ng aritmetika ay nangangailangan ng isang nakapirming dami ng oras. Bilang resulta, ang pagiging kumplikado ng oras, na kilala rin bilang pagiging kumplikado ng bit, ay maaaring mas mataas kaysa sa pagiging kumplikado ng aritmetika. Ang aritmetika na kahirapan sa pag-compute ng determinant ng isang nn integer matrix, halimbawa, ay O(n^3) para sa mga karaniwang pamamaraan (Gaussian elimination). Dahil ang laki ng mga coefficient ay maaaring lumawak nang exponential sa panahon ng pagkalkula, ang bit complexity ng parehong mga pamamaraan ay exponential sa n. Kung ang mga diskarteng ito ay ginagamit kasabay ng multi-modular arithmetic, ang bit complexity ay maaaring bawasan sa O(n^4).
Ang bit complexity, sa mga pormal na termino, ay tumutukoy sa bilang ng mga operasyon sa mga bit na kinakailangan upang magpatakbo ng isang algorithm. Ito ay katumbas ng temporal na kumplikado hanggang sa isang pare-parehong kadahilanan sa karamihan ng mga paradigm sa pagkalkula. Ang bilang ng mga operasyon sa machine words na kailangan ng mga computer ay proporsyonal sa bit complexity. Para sa mga makatotohanang modelo ng pagkalkula, ang pagiging kumplikado ng oras at ang pagiging kumplikado ng bit ay magkapareho.
Ang mapagkukunan na madalas na isinasaalang-alang sa pag-uuri at paghahanap ay ang dami ng mga paghahambing ng mga entry. Kung maayos ang pagkakaayos ng data, isa itong magandang indicator ng pagiging kumplikado ng oras.
Sa lahat ng mga potensyal na input, ang pagbibilang ng bilang ng mga hakbang sa isang algorithm ay imposible. Dahil ang pagiging kumplikado ng isang input ay tumataas sa laki nito, ito ay karaniwang kinakatawan bilang isang function ng laki ng input na n (sa mga bit), at kaya ang pagiging kumplikado ay isang function ng n. Para sa parehong laki ng mga input, gayunpaman, ang pagiging kumplikado ng isang algorithm ay maaaring mag-iba nang malaki. Bilang resulta, ang iba't ibang mga function ng pagiging kumplikado ay karaniwang ginagamit.
Ang pinakamasamang kaso na kumplikado ay ang kabuuan ng lahat ng kumplikado para sa lahat ng laki n input, habang ang average na kaso kumplikado ay ang kabuuan ng lahat ng kumplikado para sa lahat ng laki n input (makatuwiran ito, dahil ang bilang ng mga posibleng input ng isang partikular na laki ay may hangganan). Kapag ang terminong "kumplikado" ay ginamit nang hindi karagdagang tinukoy, ang pinakamasamang kaso ng pagiging kumplikado ng oras ay isinasaalang-alang.
Ang pinakamasama at karaniwang kumplikadong kaso ay kilalang-kilala na mahirap kalkulahin nang tama. Higit pa rito, ang mga eksaktong halagang ito ay may kaunting praktikal na aplikasyon dahil ang anumang pagbabago sa makina o paradigm sa pagkalkula ay bahagyang mag-iiba sa pagiging kumplikado. Higit pa rito, ang paggamit ng mapagkukunan ay hindi mahalaga para sa maliliit na halaga ng n, samakatuwid ang kadalian ng pagpapatupad ay kadalasang mas nakakaakit kaysa sa mababang kumplikado para sa maliit na n.
Para sa mga kadahilanang ito, ang karamihan sa pansin ay binabayaran sa pag-uugali ng pagiging kumplikado para sa mataas na n, iyon ay, ang asymptotic na pag-uugali nito habang ang n ay lumalapit sa infinity. Bilang resulta, ang malaking O notation ay karaniwang ginagamit upang ipahiwatig ang pagiging kumplikado.
Mga modelong computational
Ang pagpili ng modelo ng pagkalkula, na binubuo ng pagtukoy sa mahahalagang operasyon na ginagawa sa isang yunit ng oras, ay napakahalaga sa pagtukoy sa pagiging kumplikado. Minsan ito ay tinutukoy bilang isang multitape Turing machine kapag ang computation paradigm ay hindi partikular na inilarawan.
Ang isang deterministikong modelo ng pagkalkula ay isa kung saan ang mga kasunod na estado ng makina at ang mga operasyong isasagawa ay ganap na tinukoy ng nakaraang estado. Ang mga recursive function, lambda calculus, at Turing machine ay ang mga unang deterministic na modelo. Ang mga random-access na machine (kilala rin bilang RAM-machine) ay isang sikat na paradigm para sa pagtulad sa mga real-world na computer.
Kapag ang modelo ng pagkalkula ay hindi tinukoy, ang isang multitape Turing machine ay karaniwang ipinapalagay. Sa mga multitape Turing machine, ang pagiging kumplikado ng oras ay kapareho ng sa mga RAM machine para sa karamihan ng mga algorithm, kahit na malaking pansin sa kung paano iniimbak ang data sa memorya ay maaaring kailanganin upang makamit ang katumbas na ito.
Ang iba't ibang mga pagpipilian ay maaaring gawin sa ilang mga hakbang ng pagtutuos sa isang hindi deterministikong modelo ng pag-compute, tulad ng mga hindi deterministikong Turing machine. Sa teorya ng pagiging kumplikado, ang lahat ng posible na opsyon ay isinasaalang-alang sa parehong oras, at ang hindi tiyak na pagiging kumplikado ng oras ay ang dami ng oras na kinakailangan kapag ang pinakamahusay na mga pagpipilian ay palaging ginagawa. Upang ilagay ito sa ibang paraan, ang pag-compute ay ginagawa nang sabay-sabay sa maraming (magkapareho) na mga processor na kinakailangan, at ang hindi tiyak na oras ng pag-compute ay ang oras na kinuha ng unang processor upang makumpleto ang pagkalkula. Ang parallelism na ito ay maaaring gamitin sa quantum computing sa pamamagitan ng paggamit ng superposed entangled states kapag nagpapatakbo ng mga espesyal na quantum algorithm, tulad ng Shor's factorization ng maliliit na integer halimbawa.
Kahit na ang naturang modelo ng pagtutuos ay kasalukuyang hindi praktikal, mayroon itong teoretikal na kahalagahan, partikular na may kaugnayan sa problemang P = NP, na nagtatanong kung ang mga klase ng pagiging kumplikado na ginawa sa pamamagitan ng paggamit ng "polynomial time" at "non-deterministic polynomial time" bilang hindi bababa sa itaas ang mga hangganan ay pareho. Sa isang deterministikong computer, ang pagtulad sa isang NP-algorithm ay nangangailangan ng "exponential time." Kung ang isang gawain ay maaaring lutasin sa polynomial time sa isang non-deterministic na sistema, ito ay kabilang sa klase ng kahirapan ng NP. Kung ang isang isyu ay nasa NP at hindi mas madali kaysa sa anumang iba pang problema sa NP, ito ay sinasabing NP-kumpleto. Ang problema sa Knapsack, ang problema sa paglalakbay ng salesman, at ang problema sa Boolean satisfiability ay lahat ng NP-complete combinatorial problem. Ang pinakakilalang algorithm ay may exponential complexity para sa lahat ng mga problemang ito. Kung ang alinman sa mga isyung ito ay maaaring malutas sa polynomial time sa isang deterministic na makina, ang lahat ng mga problema sa NP ay maaaring malutas din sa polynomial time, at ang P = NP ay maitatag. Noong 2017, malawak na ipinapalagay na ang P NP, na nagpapahiwatig na ang pinakamasamang sitwasyon ng mga problema sa NP ay sa panimula ay mahirap lutasin, ibig sabihin, mas matagal kaysa sa anumang posibleng tagal ng oras (mga dekada) na ibinigay sa mga kawili-wiling haba ng input.
Parallel at distributed computing
Ang parallel at distributed computing ay kinabibilangan ng paghahati ng pagproseso sa maraming mga processor na lahat ay gumagana nang sabay-sabay. Ang pangunahing pagkakaiba sa pagitan ng iba't ibang mga modelo ay ang paraan ng pagpapadala ng data sa pagitan ng mga processor. Ang paghahatid ng data sa pagitan ng mga processor ay karaniwang napakabilis sa parallel computing, samantalang ang paglipat ng data sa pagitan ng mga processor sa distributed computing ay ginagawa sa isang network at sa gayon ay mas mabagal.
Ang pag-compute sa N mga processor ay tumatagal ng hindi bababa sa quotient ng N sa oras na aabutin sa isang processor. Sa katotohanan, dahil ang ilang mga subtask ay hindi maaaring parallelize at ang ilang mga processor ay maaaring kailanganing maghintay para sa isang resulta mula sa isa pang processor, ang teoretikal na ideal na hangganan na ito ay hindi kailanman makakamit.
Ang pangunahing isyu sa pagiging kumplikado ay ang pagbuo ng mga algorithm upang ang produkto ng oras ng pag-compute sa pamamagitan ng bilang ng mga processor ay mas malapit hangga't maaari sa oras na kinakailangan upang maisagawa ang parehong pag-compute sa isang processor.
Quantum computation
Ang quantum computer ay isang computer na may quantum mechanics-based computation model. Ang Church–Turing thesis ay totoo para sa mga quantum computer, na nagpapahiwatig na ang anumang isyu na malulutas ng isang quantum computer ay maaari ding malutas ng isang Turing machine. Gayunpaman, ang ilang mga gawain ay maaaring teoretikal na lutasin gamit ang isang quantum computer sa halip na isang klasikal na computer na may makabuluhang mas mababang temporal na kumplikado. Sa ngayon, ito ay mahigpit na teoretikal, dahil walang nakakaalam kung paano bumuo ng isang praktikal na quantum computer.
Ang quantum complexity theory ay nilikha upang siyasatin ang iba't ibang uri ng mga isyu na maaaring malutas ng mga quantum computer. Ginagamit ito sa post-quantum cryptography, na siyang proseso ng paggawa ng mga cryptographic na protocol na lumalaban sa quantum computer assaults.
Pagiging kumplikado ng problema (lower bounds)
Ang pinakamaliit na kumplikado ng mga algorithm na maaaring malutas ang problema, kabilang ang mga hindi natuklasang pamamaraan, ay ang pagiging kumplikado ng problema. Bilang resulta, ang pagiging kumplikado ng isang problema ay katumbas ng pagiging kumplikado ng anumang algorithm na lumulutas nito.
Bilang resulta, ang anumang pagiging kumplikado na ibinigay sa malaking O notation ay kumakatawan sa isang kumplikado ng parehong algorithm at ang kasamang problema.
Sa kabilang banda, ang pagkuha ng walang kabuluhang mga mas mababang hangganan sa pagiging kumplikado ng isyu ay kadalasang mahirap, at kakaunti ang mga diskarte para sa paggawa nito.
Upang malutas ang karamihan sa mga isyu, dapat basahin ang lahat ng input data, na tumatagal ng oras na proporsyonal sa magnitude ng data. Bilang resulta, ang mga naturang problema ay may hindi bababa sa linear na kumplikado, o, sa malaking notasyon ng omega, isang kumplikado ng Ω(n).
Ang ilang mga problema, tulad ng sa computer algebra at computational algebraic geometry, ay may napakalaking solusyon. Dahil ang output ay dapat na nakasulat, ang pagiging kumplikado ay pinipigilan ng maximum na laki ng output.
Ang bilang ng mga paghahambing na kinakailangan para sa isang algorithm ng pag-uuri ay may nonlinear na lower bound ng Ω(nlogn). Bilang resulta, ang pinakamahusay na mga algorithm sa pag-uuri ay ang pinaka mahusay dahil ang kanilang pagiging kumplikado ay O(nlogn). Ang katotohanan na mayroong n! mga paraan upang ayusin ang n mga bagay na humahantong sa mas mababang hangganan na ito. Dahil hinahati ng bawat paghahambing ang koleksyong ito ng n! mga order sa dalawang piraso, ang bilang ng N paghahambing na kinakailangan upang makilala ang lahat ng mga order ay dapat na 2N > n!, na nagpapahiwatig ng O(nlogn) ng formula ni Stirling.
Ang pagbabawas ng isang problema sa isa pang problema ay isang karaniwang diskarte para sa pagkuha ng pinababang kumplikadong mga hadlang.
Pag-unlad ng algorithm
Ang pagsusuri sa pagiging kumplikado ng isang algorithm ay isang mahalagang elemento ng proseso ng disenyo dahil nagbibigay ito ng kapaki-pakinabang na impormasyon tungkol sa pagganap na maaaring inaasahan.
Ito ay isang madalas na hindi pagkakaunawaan na, bilang isang resulta ng batas ni Moore, na hinuhulaan ang exponential na paglago ng modernong kapangyarihan ng computer, ang pagsusuri sa pagiging kumplikado ng mga algorithm ay magiging hindi gaanong nauugnay. Ito ay hindi tama dahil ang tumaas na kapangyarihan ay nagbibigay-daan para sa pagproseso ng napakalaking dami ng data (malaking data). Halimbawa, ang anumang algorithm ay dapat gumana nang maayos sa wala pang isang segundo kapag nag-uuri ayon sa alpabeto ng isang listahan ng ilang daang mga entry, tulad ng bibliograpiya ng isang libro. Sa kabilang banda, para sa isang milyong entry (halimbawa, ang mga numero ng telepono ng isang malaking lungsod), ang mga pangunahing algorithm na nangangailangan ng O(n2) na paghahambing ay kailangang magsagawa ng isang trilyong paghahambing, na aabot ng tatlong oras sa bilis na 10 milyong paghahambing sa bawat segundo. Ang quicksort at merge sort, sa kabilang banda, ay nangangailangan lamang ng mga paghahambing ng nlogn (bilang average-case complexity para sa una, bilang worst-case complexity para sa huli). Gumagawa ito ng humigit-kumulang 30,000,000 paghahambing para sa n = 1,000,000, na tatagal lamang ng 3 segundo sa 10 milyong paghahambing bawat segundo.
Bilang resulta, ang pagtatasa ng pagiging kumplikado ay maaaring magbigay-daan para sa pag-aalis ng maraming hindi mahusay na mga algorithm bago ang pagpapatupad. Magagamit din ito para i-fine-tune ang mga kumplikadong algorithm nang hindi kinakailangang subukan ang lahat ng posibleng variant. Ang pag-aaral ng pagiging kumplikado ay nagbibigay-daan sa pagtutuon ng pagsisikap para sa pagtaas ng kahusayan ng isang pagpapatupad sa pamamagitan ng pagtukoy sa mga pinakamahal na hakbang ng isang kumplikadong algorithm.
Upang makilala ang iyong sarili nang detalyado sa kurikulum ng sertipikasyon maaari mong palawakin at suriin ang talahanayan sa ibaba.
Ang EITC/IS/CCTF Computational Complexity Theory Fundamentals Certification Curriculum ay tumutukoy sa open-access didactic na materyales sa isang video form. Ang proseso ng pagkatuto ay nahahati sa isang hakbang-hakbang na istraktura (mga programa -> mga aralin -> mga paksa) na sumasaklaw sa mga nauugnay na bahagi ng kurikulum. Ang walang limitasyong pagkonsulta sa mga eksperto sa domain ay ibinibigay din.
Para sa mga detalye sa pamamaraan ng Certification check Paano ito Works.
Pangunahing suporta sa kurikulum na mga materyales sa pagbabasa
S. Arora, B. Barak, Computational Complexity: A Modern Approach
https://theory.cs.princeton.edu/complexity/book.pdf
Mga materyales sa pagbabasa ng pangalawang sumusuporta sa kurikulum
O. Goldreich, Introduction to Complexity Theory:
https://www.wisdom.weizmann.ac.il/~oded/cc99.html
Mga pansuportang materyales sa pagbabasa ng kurikulum sa discrete mathematics
J. Aspnes, Mga Tala sa Discrete Mathematics:
https://www.cs.yale.edu/homes/aspnes/classes/202/notes.pdf
Mga pansuportang materyales sa pagbabasa ng kurikulum sa teorya ng graph
R. Diestel, Teoryang Graph:
https://diestel-graph-theory.com/
I-download ang kumpletong offline na self-learning preparatory materials para sa EITC/IS/CCTF Computational Complexity Theory Fundamentals program sa isang PDF file
Mga materyales sa paghahanda ng EITC/IS/CCTF – karaniwang bersyon
Mga materyales sa paghahanda ng EITC/IS/CCTF – pinahabang bersyon na may mga tanong sa pagsusuri