Ալգորիթմներ և տվյալների կառուցվածքներ
CS-111 դասընթացը սովորեցնում է գնահատել ալգորիթմների ժամանակային և տարածական բարդությունը, ընտրել օպտիմալ տվյալների կառուցվածք ցանկացած խնդրի համար, և պատրաստվել տեխնիկական հարցազրույցների՝ Leetcode-յան պրակտիկայի միջոցով։
Ընդհանուր տվյալներ
Դասախոսի տվյալներ
Արմեն Մարջինյան
Կրթություն, գիտական աստիճան՝ ՀՊՃՀ, ԵՊՀ։ Ընդունելության ժամեր՝ չորեքշաբթի, ուրբաթ 15:00–18:00։
Քոլեջում կարդացվող դասընթացներ՝ Համակարգչային գիտության ներածություն, Համակարգչային ճարտարապետություն, Ալգորիթմներ և տվյալների կառուցվածքներ, IB Diploma Program – CS, IB Diploma Program – Theory of Knowledge (TOK)։
Մասնագիտական հոդվածներ, աշխատություններ՝ «JavaScript Ultimate» (մենագրություն, 620 էջ, 2025թ.), «React, Next.js» (մենագրություն, 620 էջ, 2024թ.), հոդվածներ mjs lab-ում (mjs.am)։
Ծրագրի նկարագրություն
«Ալգորիթմների և տվյալների կառուցվածքներ» առարկան թույլ կտա ուսանողներին վերլուծել և հասկանալ՝ ի՞նչ է նշանակում գրել օպտիմալ, արագ աշխատող և որակյալ կոդ։ Ինչպես ենք հասկանում՝ որ կոդն է օպտիմալ, կամ ինչպես ենք չափում հիշողության օգտագործումը։ Առարկան նպատակ ունի ուսանողներին ծանոթացնել արդյունավետ հաշվողական մտածողության (computational thinking) և խնդիրների լուծման ալգորիթմների մշակման հիմնարար սկզբունքներին։
Մինչ այս առարկան ուսանողներն ունեին տվյալ ծրագրավորման լեզվով կոդ գրելու հմտություններ, այժմ նրանք կունենան գրված կոդի ժամանակի և հիշողության բարդությունը վերլուծելու, ինչպես նաև տրված խնդիրը հնարավորինս օպտիմալ լուծելու համար նախատեսված մեթոդների և տվյալների կառուցվածքների կիրառման հմտություններ։
Առարկայի դերը «Համակարգչային գիտություն» ծրագրում
«Ալգորիթմների և տվյալների կառուցվածքներ» առարկան հանդիսանում է ամբողջ կրթական ծրագրի առանցքային և հիմնարար բաղադրիչը. այն ծառայում է որպես կամուրջ տեսական մաթեմատիկական մոդելների և արդյունավետ ծրագրային լուծումների միջև։
Հաշվողական մտածելակերպի ձևավորում
Առարկան ուսանողների մոտ արմատավորում է խնդիրներին ոչ թե պարզապես կոդ գրելու, այլ օպտիմալացման տեսանկյունից նայելու կարողությունը։ Հասկանալով ալգորիթմների ասիմպտոտիկ բարդությունը (Big O)՝ ուսանողները սովորում են գնահատել ծրագրի արագագործությունն ու հիշողության ծախսը դեռ նախագծման փուլում։
Բազային հենք հաջորդող դասընթացների համար
Ծրագրում ներառված թեմաները (ռեկուրսիվ կապեր, hashing, ծառեր և գրաֆներ) անմիջական նախապայման և հիմք են հանդիսանում այնպիսի բարդ առարկաների յուրացման համար, ինչպիսիք են՝ «Տվյալների բազաներ», «Մեքենայական ուսուցում» և այլն։
Ծրագրավորման լեզուների ներքին դետալների ընկալում
Տվյալների կառուցվածքների խորը ուսումնասիրությունը թույլ է տալիս հասկանալ, թե ինչպես են ժամանակակից ծրագրավորման լեզուներն ու framework-երն աշխատում ներսից. ուսանողն արդեն գիտակցում է, թե ինչ է կատարվում հիշողության մեջ դինամիկ զանգված, Map, Dict կամ Set հայտարարելիս։
Տեխնիկական հարցազրույցների պատրաստվածություն
Դասընթացը հանդիսանում է գլխավոր նախապայմանը միջազգային և տեղական առաջատար տեխնոլոգիական ընկերությունների Technical Interviews / Coding Challenges հաջողությամբ հանձնելու համար՝ զարգացնելով pattern recognition հմտությունը։
Ամփոփիչ գնահատման կարգ
Առարկան քննական է, ենթախումբը՝ core։ Առաջին երկու միջանկյալ քննությունը տեղի կունենա portal-ով (Multiple Choice հարցեր, Leetcode-յան խնդիրների լուծում, տրված Data Structure-ի ամբողջական կամ մասնակի իմպլեմենտացիա)։ Երրորդ ամփոփիչ քննությունը տեղի կունենա տեխնիկական հարցազրույցի ֆորմատով. ուսանողը կընտրի տոմսը՝ տեսական հարցերով, իմպլեմենտացիայի առաջադրանքներով և leetcode-յան խնդիրներով։
Գնահատման սանդղակ
- Տիրապետել
- Տվյալների կառուցվածքների դերին ու նշանակությանը, հասկանալ դրանց կիրառման դաշտը և առանձնահատկությունները։
- Կիրառել
- Պատրաստի տվյալների կառուցվածքներ խնդրի լուծման համար։
- Իրականացնել
- Պարզ տվյալների կառուցվածքների լրիվ կամ մասնակի մշակում։
- Լուծել
- Պարզագույն ալգորիթմական խնդիրներ։
- Տիրապետել
- Տվյալների կառուցվածքների և ալգորիթմների բարդությունների վերլուծության սխեմաներին։
- Կիրառել
- Պատրաստի տվյալների կառուցվածքներ խնդրի լուծման համար։
- Իրականացնել
- Տարբեր բարդության տվյալների կառուցվածքների մշակում։
- Լուծել
- Պարզ և միջին բարդության ալգորիթմական խնդիրներ։
- Տիրապետել
- Տվյալների կառուցվածքների և ալգորիթմների բարդությունների վերլուծության սխեմաներին, բարդությունների ապացույցին։
- Կիրառել
- Պատրաստի տվյալների կառուցվածքներ և խնդիրների լուծման մեթոդներ։
- Իրականացնել
- Բարդ տվյալների կառուցվածքների մշակում։
- Լուծել
- Միջինից բարդ ալգորիթմական խնդիրների լուծման կարողություն։
Նվազագույն վերջնարդյունքներ
Ուսանողը պետք է իմանա
Ասիմպտոտիկ վերլուծության հիմունքները — ինչ է Big O notation-ը, և ինչպես են գնահատվում ալգորիթմների ժամանակային (Time) ու տարածական (Space) բարդությունները։
Ռեկուրսիվ կապերի լուծման մեթոդները — ինչպես գնահատել ռեկուրսիվ ալգորիթմների բարդությունը Master Theorem-ի և recursion tree-ի միջոցով։
Տվյալների հիմնարար կառուցվածքների ներքին դետալները — գծային (Linked Lists, Stack, Queue) և ոչ գծային (Trees, Hash Tables) կառուցվածքների աշխատանքի սկզբունքները։
Տեսակավորման և որոնման հիմնական մեթոդները — տարբեր բարդության ալգորիթմների աշխատանքի տրամաբանությունը և կիրառության սահմանները։
Ալգորիթմական խնդիրների լուծման մոտեցումները — Divide and Conquer, Sliding Window, Two Pointers…
Ուսանողը պետք է կարողանա
Ընտրել օպտիմալ տվյալների կառուցվածքը — ճիշտ որոշել՝ որտեղ կիրառել array, linked list, priority queue, stack, queue, hash table, Binary Tree, AVL, RB-Tree։
Իրականացնել և օպտիմալացնել ալգորիթմներ — ինքնուրույն գրել տեսակավորման, որոնման և ծառերի շրջանցման (BFS, DFS) ալգորիթմները։
Ճանաչել խնդիրների pattern-ները — տեխնիկական հարցազրույցների ժամանակ ճիշտ կողմնորոշվել և անծանոթ պահանջը վերածել ստանդարտ ալգորիթմական լուծման։
Վերլուծել պատրաստի կոդի արդյունավետությունը — հասկանալ ներկառուցված ֆունկցիաների (Map, դինամիկ զանգվածի resize) ներքին աշխատանքը և խուսափել ոչ արդյունավետ լուծումներից։
Գրականություն և այլ նյութեր
Դասերի ձևաչափ
Ձևաչափ
1. Տեսական դասախոսություններ
2. Գործնական դասեր՝ խնդիրների լուծման կենտրոնացմամբ
Քննության ձևաչափ
Առաջին երկու քննությունը՝ portal, երրորդը՝ տեխնիկական հարցազրույցի ֆորմատով, տոմսի ընտրությամբ։
Նախնական գիտելիքներ
Առարկան սովորելուց առաջ ակնկալվում է.
Ակադեմիական օրացույց
Դասընթացի շարունակականություն
Առարկան շարունակվում է նաև երկրորդ կիսամյակում, որտեղ անդրադարձ է արվելու հետևյալ թեմաներին.
Եզրակացություն
CS-111 առարկայական ծրագիրը տպավորիչ է թե՛ ակադեմիական խորությամբ, թե՛ մանրամասնությամբ։ Ծրագիրն ակնհայտորեն նախապատրաստում է աշակերտներին միջազգային խոշոր ծրագրավորման ընկերությունների հարցազրույցներին, քանի որ այնտեղ մշտապես առկա են competitive programming-ի տարրեր, օրինակ Leetcode-յան խնդիրների տեսքով։
Ըստ իս՝ թեմաների հաջորդականությունը ճիշտ է ընտրված, վերջնարդյունքները բավական իրատեսական են։ Թեև որոշ դասեր զգալիորեն ծանրաբեռնվածություն ունեն, այնուամենայնիվ վստահ եմ (հաշվի առնելով նաև դասախոսի հանգամանքը), որ այս խնդիրները հաղթահարվելու են։
Ես կառաջարկեի՝ առարկան դասավանդել որևէ ստատիկ տիպավորված լեզվով (C, C++, C#, Java…), բայց ենթադրում եմ Python-ի ընտրությունն այստեղ արդարացված պատճառներ ունի։