Ալգորիթմներ և Տվյալների Կառուցվածքներ

✨ Մակարդակ
🕗 Տևողություն
💻 Պրակտիկա
Միջին
4-8 ամիս
400+ ծրագրավորման վարժություններ
Բարի գալուստ Ալգորիթմների և Տվյալների Կառուցվածքների մասին դասընթաց։ Դասընթացի ավարտին Դուք կունենաք բավարար գիտելիք ծրագրերը օպտիմալացնելու տարբեր տեղերում, յուրաքանչյուր ծրագրի արդյունավետությունը գնահատելու ու հաջողությամբ անցնելու այնպիսի առաջատար ընկերությունների հարցազրույցները, ինչպիսիք են Google-ը, Meta-ն, Amazon-ը և այլ մեծ տեխնոլոգիական կազմակերպություններ։
notion image
Դասընթացը սկսվում է ալգորիթմների և տվյալների կառուցվածքների հիմունքներից և խորանում յուրաքանչյուր թեմայի մեջ, որպեսզի ապահովի ամեն թեմայի մասին ամբողջական պատկերացում։
notion image
Խոշոր ընկերությունները, օրինակ՝ Google, Meta, Netflix և Amazon-ը, հարցազրույցների ժամանակ մանրակրկիտ ստուգում են տվյալների կառուցվածքների ու ալգորիթմների ոլորտում գիտելիքները։ Այս դասընթացը կապահովի, որ Դուք պատրաստ լինեք նման հարցազրույցներին։
Ֆրիլանս հարթակները, ինչպիսիք են Toptal-ը կամ Turing-ը, նույնպես պահանջում են խորը տվյալների կառուցվածքների և ալգորիթմների գիտելիքներ։ Այդ պատճառով դրանց ընդունելության փուլերը ներառում են մի քանի հարցազրույց, որտեղ հիմնական ուշադրությունը հենց ալգորիթմական գիտելիքների վրա է:

📚 Սկսելուց առաջ

Այս դասընթացը նախատեսված է այն մարդկանց համար, ովքեր արդեն տիրապետում են որևէ ընդհանուր-նշանակության ծրագրավորման լեզվի (ինչպես Python, C++, Java կամ C#) և ցանկանում են խրորացնել ալգորիթմների և տվյալների կառուցվածքների իրենց գիտելիքները։ Մինչ այս դասընթացին անցնելը, անհրաժեշտ է վարժ տիրապետել ցիկլերին, ֆունկցիաների ստեղծելուն և ներկառուցված տվյալների կառուցվածքների (list/set/map և այլն) օգտագործմանը։

🤩 Արդյունքներ

Դասընթացի ավարտին Դուք կիմանաք, թե ինչպես օգտագործել տարբեր տվյալների կառուցվածքները՝ արդյունավետ ալգորիթմներ գրելու համար, որոնք մի քանի անգամ ավելի արագ կաշխատեն, քան պարզ (naive) լուծումները։ Քննարկելու ենք նաև ալգորիթմներ գրելու լավագույն փորձերը, ինչպես նաև թե ինչպես պատրաստվել ալգորիթմական հարցազրույցներին։
Այս դասընթացում ամեն գաղափարին լիովին տիրապետելու համար շեշտը դրված է շատ վարժություններ լուծելու վրա։ Դա նշանակում է, որ Դուք կաշխատեք տարբեր ալգորիթմների հետ և կիրականացնեք դրանք բազմաթիվ խնդիրներում, որպեսզի ամբողջությամբ ամրապնդեք ամեն թեման։

💻 Գործնական ուսուցում

🔥
Ալգորիթմներ սովորելու նպատակը միայն տեսական գիտելիք ձեռք բերելը չէ։ Նպատակը խնդիրներ լուծելու հմտությունը զարգացնելն է։
Այս դասընթացում Դուք սովորում եք գործնական տարբերակով։ Ամեն գաղափարի հետ տրվում են մի քանի ինտերակտիվ խնդիրներ, որոնք անհրաժեշտ է լուծել, առաջ շարժվելու համար։ Իրականում, ամբողջ ընթացքում առաջարկվելու է 400-ից ավելի ծրագրավորման խնդիր։ Գործնական ուսուցումը լավագույն տարբերակն է գիտելիքը խորացնելու համար։ Այստեղ Դուք կստանաք բազում հետաքրքիր ու երբեմն բավական բարդ վարժություններ յուրաքանչյուր թեման լիարժեք յուրացնելու համար։

⚡ Սովորեք Ձեր իսկ արագությամբ

Դուք կարող եք անցնել մի քանի մակարդակ մի շաբաթում կամ ավելի դանդաղ առաջ շարժվել՝ ավելի երկար ժամանակ տրամադրելով յուրաքանչյուր թեմային։ Դուք ինքներդ եք ընտրում Ձեզ համապատասխան արագությունը։ Միակ նախապայմանը հետևողականությունն է։ Ամեն օր 1 կամ 2 ժամ վարժվելը շատ ավելի արդյունավետ է, քան շաբաթը մեկ անգամ մի քանի ժամ պարապելը։
Որպեսզի հեշտ առաջ շարժվեք, հասանելի է ֆորում՝ հարցեր տալու և պատասխաններ ստանալու համար։ Կարող եք հարցեր տալ կամ օգնել ուրիշներին՝ պատասխանելով նրանց հարցերին յուրաքանչյուր վարժության տակ։

🎓 Ծրագրի կառուցվածքը

Այս դասընթացը կենտրոնանում է տվյալների կառուցվածքների և ալգորիթմների հիմնական հասկացությունների վրա և ամեն մեկը ներկայացնում է ինտուիտիվ կերպ։ Որպեսզի գործընթացը լինի ավելի հաճելի ու ներգրավող, թեմաները դասավորված են ըստ մակարդակների, և ամեն մակարդակ հաղթահարելը նշանակում է, որ դուք սովորել եք մակարդակին համապատասխան թեման։ Ահա դասընթացի հիմնական բաժինները.
Իրականացման խնդիրներ
  • Ալգորիթմը տրված է հենց խնդիրում
  • Տվյալների կառուցվածքների հետ աշխատանք (arrays, dictionaries, sets և այլն)
Բիթային օպերատորներ
  • Թվերի երկուական (binary) ներկայացում (int → bin, bin → int փոխարկումներ)
  • Բացասական թվերի երկուական ներկայացումը
  • Bitwise գործողություններ OR, AND, XOR
  • base-k համակարգ (base-10 → base-k, base-k → base-10)
Prefix sums (Պրեֆիքս գումարներ)
  • 1D Prefix sum
  • 2D Prefix sum
Սահող պատուհան և երկու ցուցիչ (Sliding window / Two pointers)
  • Սահող պատուհան (sliding window) գումար գտնելու համար
  • Սահող պատուհան եզակի արժեքներ գտնելու համար
Թվերի տեսություն
  • Պարզության ստուգում՝ և
  • Էրատոսթենեսի մաղ (Sieve of Eratosthenes)
  • Պարզ թվերի ֆակտորիզացիա (prime factorization)
  • Ամենամեծ ընդհանուր բաժանարարը (GCD) և ամենափոքր ընդհանուր բազմապատիկը (LCM)
  • Մոդուլով թվեր
Binary Search (Երկուական որոնում)
  • Գծային որոնում (Linear Search) VS Երկուական որոնում (Binary Search)
  • Պահանջվող արժեքի որոնում սորտավորված զանգվածում
  • Իրական թվերի որոնում որոշակի ճշգրտությամբ
  • Ձախ եզրը ներառել, թե՞ աջ եզրը ներառել պատասխանում
  • Երկուական որոնում պատասխանի վրա (Binary search the answer)
Տեսակավորում / Սորտավորում (Sorting)
  • Bogosort
  • Selection sort
  • Insertion sort
  • Bubble sort
Ագահ Ալգորիթմներ (Greedy Algorithms)
  • Ագահ ռազմավարություն
  • Ագահ էվրիստիկա
Դինամիկ Ծրագրավորում (Dynamic Programming)
  • 1D Դինամիկ ծրագրավորում (Fibonacci և այլն)
  • Մետաղադրամների փոխարկում (Coin change: min coins)
  • Մետաղադրամների փոխարկում (Coin change: number of ways)
Ռեկուրսիա (Recursion)
  • Ճյուղավորման գործակից (branching factors)
  • Գրեյի կոդը
  • Հանոյի աշտարակները (Towers of Hanoi)
  • Խնդրի ռեկուրսիվ բաժանում ենթախնդիրների
Բաժանիր և տիրիր, Ավելի բարդ սորտավորման ալգորիթմներ (Divide & Conquer & Advanced Sorting)
  • Merge sort
  • Quick sort
  • In-place սորտավորում
  • Համեմատությամբ սորտավորում բարդությունը միշտ ≥
Կապակցված ցուցակ (Linked List)
  • Գագաթներ և կապեր
  • Ցուցակի վրայով անցնելը և որոնումը (Traversal and search)
  • Ջնջել և ավելացնել (insert) օպերացիաները
Հերթ և Պահունակ (Queue & Stack)
  • Ավելացնելու և հանելու կարգը
  • Որոնման օպտիմալացում Stack-ով
Բինար ծառեր և Փնտրման Բինար ծառեր (Binary Tree & Binary Search Tree: BST)
  • Երկուական (Բինար) ծառի կառուցում
  • Որոնում ծառում
  • Թարմացում և տարրերի ջնջում
Heap
  • Heapify
  • Heap sort
Հեշավորում (Hashing)
  • Հեշավորման ֆունկցիաներ
  • Բախումներ (collisions)
Ավելի բարդ դինամիկ ծրագրավորում (Advanced Dynamic Programming)
  • Edit Distance
  • Ուսապարկի խնդիրը (Knapsack problem)
  • Ամենաերկար աճող ենթահաջարդականությունը (Longest Increasing Subsequence)
  • N մատրիցների արդյունավետ բազմապատկում
Գրաֆի ներկայացում (Graph Representations)
  • Կցության մատրից (Adjacency matrix)
  • Կցության ցուցակ (Adjacency list)
  • Կողերի ցուցակ (Edge list)
  • Գագաթների աստիճաններ (Degrees of vertices)
Breadth-First Search (BFS)
  • BFS գրաֆերում
  • Կարճագույն ուղու որոնում
  • BFS տախտակի (grid) վրա
  • BFS այլ տեղերում
Depth-First Search (DFS)
  • Գրաֆի կապակցվածություն (connectedness)
  • Ցիկլեր
  • Տոպոլոգիական սորտավորում (Topological sort)
  • Երկմասություն (bipartidness)
Trie
  • Տողերի (string) որոնում
Dijkstra
  • Կարճագույն ուղիների որոնում կշիռներ ունեցող կողերով գրաֆում
  • Հնարքներ, որոնք հեշտացնում են ծրագրի աշխատանքը որոշ խնդիրներում
Backtracking
  • N Թագուհիներ
  • Գրաֆի գունավորում
  • Աղյուսակների լրացում
Հատվածներով ծառ (Segment Tree)
  • Segment Tree-ի կառուցում, արժեքի ստացում (get) և թարմացում (update)
  • Հատվածի վրա հարցումներ և արժեքների թարմացումներ
  • Երկուական որոնում prefix-ի վրա
  • Գագաթում մի քանի արժեք ունենալը
  • Մուտային տվյալների նախնական մշակում և օգտագործում segment tree-ի վրա
Ալգորիթմների բարդության չափում (Algorithm Complexity)
  • Big notation-ի նկարագրությունը
  • P vs NP

🚀 Բարի գալուստ

Ուսուցումը 80%-ով անհատական աշխատանք է։ Այս դասընթացը հաղթահարելը ձեր իսկ հաջողությունն է։ Մենք այստեղ ենք, որպեսզի օգնենք ձեզ այդ ճանապարհին: