រចនាសម្ព័ន្ធទិន្នន័យ និងក្បួនដោះស្រាយ
Array, hash map, linked list, stack, queue, recursion, searching, sorting, tree, heap, graph និង dynamic programming ក្នុង TypeScript — ភ្ជាប់ជាមួយកន្លែងដែលអ្នកជួបវាក្នុងការងារ ហើយត្រៀមខ្លួនសម្រាប់ការសម្ភាសន៍បច្ចេកទេស។
រាល់កម្មវិធីទាំងអស់គឺជាគំនរទិន្នន័យ បូកនឹងសំណុំជំហានសម្រាប់ធ្វើការជាមួយទិន្នន័យនោះ។ រចនាសម្ព័ន្ធទិន្នន័យ (Data structure) គឺជាវិធីដែលយើងរៀបចំទិន្នន័យ ហើយ ក្បួនដោះស្រាយ (Algorithm) គឺជាជំហានទាំងនោះ។ ជ្រើសរើសគូត្រឹមត្រូវ នោះទំព័រដែលវារដូចអណ្តើកជាមួយទិន្នន័យ 100,000 ជួរ នឹងក្លាយជាលឿនភ្លាមៗ។ ជ្រើសរើសគូខុស នោះគ្មានផ្នែករឹងលឿនប៉ុនណាអាចជួយអ្នកបានទេ។ ទាំងនេះក៏ជាប្រធានបទដែលការសម្ភាសន៍បច្ចេកទេសតែងត្រឡប់មកវិញដែរ ពីព្រោះវាបង្ហាញថាអ្នកគិតយ៉ាងដូចម្តេច នៅពេលបញ្ហាមិនមានចម្លើយច្បាស់លាស់។
ស៊េរីនេះបង្រៀនពួកវាក្នុង TypeScript ហើយតែងតែមានមុំមើល "តើខ្ញុំជួបរឿងនេះនៅកន្លែងធ្វើការត្រង់ណា?"។ Array និង hash map នៅពីក្រោយរាល់បញ្ជី និងតារាងស្វែងរក។ Stack ជំរុញប្រវត្តិ undo និង call stack។ Queue ដំណើរការ background job។ Tree គឺជា DOM និងប្រព័ន្ធឯកសារ។ Graph គឺជាផែនទី បណ្តាញសង្គម និងបញ្ជី dependency។ Heap កំណត់ពេលវេលាការងារ។ អ្នកនឹងសាងសង់ពួកវាម្តងមួយៗដោយខ្លួនឯង ដើម្បីឲ្យអ្នកយល់ពីតម្លៃនៃកំណែដែលមានស្រាប់។
ជំពូកដំបូងៗគ្របដណ្តប់រចនាសម្ព័ន្ធប្រចាំថ្ងៃ៖ array និង string, hash map និង set, linked list, stack និង queue។ ជំពូកកណ្តាលគ្របដណ្តប់បច្ចេកទេសស្នូល៖ recursion, searching និង sorting។ ជំពូកក្រោយៗគ្របដណ្តប់ tree, heap, graph, trie និង union-find ហើយចុងក្រោយ greedy algorithm និង dynamic programming។ ជំពូកចុងក្រោយបំប្លែងវាទៅជាវិធីសាស្ត្រដែលអាចធ្វើម្តងទៀតបាន សម្រាប់ដោះស្រាយបញ្ហាសម្ភាសន៍ដែលមិនធ្លាប់ឃើញ។
អ្នកនឹងមិនត្រឹមតែអានអំពីវាទេ។ ពេញមួយស៊េរី អ្នកសាងសង់ algolab ដែលជា toolkit TypeScript តូចមួយដែលដំណើរការក្នុង Node.js។ ជំពូកនីមួយៗបន្ថែម module មួយជាមួយ test ខ្លះៗ៖ hash map, linked list, stack និង queue, បណ្តុំ sorting, binary search tree, priority queue, graph ជាមួយ BFS និង Dijkstra, trie និងច្រើនទៀត។ នៅចុងបញ្ចប់ អ្នកមានបណ្ណាល័យដែលបានសាកល្បងដែលអ្នកសរសេរដោយខ្លួនឯង។
អ្នកត្រូវការភាពស្រួលជាមួយ JavaScript និង TypeScript បន្តិចបន្តួចពី មូលដ្ឋានគ្រឹះ JavaScript និង TypeScript ហើយនិងសញ្ញា Big-O ពី គណិតវិទ្យាសម្រាប់អ្នកសរសេរកម្មវិធី។ អ្នកត្រូវការ Node.js (កំណែ LTS) និង code editor ដូចជា Visual Studio Code។ គ្មានអ្វីត្រូវចំណាយលុយឡើយ។
- 01ហេតុអ្វីរចនាសម្ព័ន្ធទិន្នន័យ និងក្បួនដោះស្រាយសំខាន់ហេតុអ្វីវិធីដែលអ្នករៀបចំទិន្នន័យកំណត់ថាកូដរបស់អ្នកដំណើរការលឿនប៉ុនណា៖ ការរំលឹក Big-O, benchmark ដំបូងរវាង Array.includes និង Set.has និងការរៀបចំគម្រោង TypeScript algolab ជាមួយ module bench ដំបូងរបស់វា។
- 02Array និង Stringរបៀបដែល array និង string ស្ថិតនៅក្នុងអង្គចងចាំ តម្លៃពិតនៃ push, pop, shift, unshift និង splice និងបច្ចេកទេសស្នូលបី (two pointers, sliding window, prefix sums) ដោយបន្ថែម module arrays ទៅ algolab។
- 03Hash Map និង Setរបៀបដែល hashing ផ្តល់ការស្វែងរក O(1), របៀបដោះស្រាយ collision ដោយ chaining, ការរាប់ frequency, two-sum, anagram និង Map ទល់នឹង Object ព្រមទាំងបន្ថែម class HashMap និង helper function ទៅ algolab។
- 04Linked ListNode និង pointer, singly និង doubly linked list, ការដោះដូររវាង array និង list, ការបញ្ច្រាស, ការរកឃើញ cycle ដោយ pointer លឿននិងយឺត, ការរកកណ្តាល និងការបញ្ចូល list ដែលបានតម្រៀប — ប្រើដើម្បីបង្កើត class LinkedList សម្រាប់ algolab។
- 05Stack និង QueueStack ចូលក្រោយចេញមុន, queue ចូលមុនចេញមុន, ប្រវត្តិ undo, call stack, តង្កៀបដែលតុល្យភាព, queue លើ linked list, circular buffer និង queue ពី stack ពីរ — ប្រើដើម្បីបង្កើត Stack, History, Queue និង CircularBuffer សម្រាប់ algolab។
- 06RecursionBase case, call stack, stack overflow, memoization, recursion ទល់នឹង loop និងការណែនាំអំពី backtracking ជាមួយ subset, permutation និងវង់ក្រចក — ប្រើដើម្បីបង្កើត module recursion សម្រាប់ algolab។
- 07ការស្វែងរកLinear search, binary search, អន្ទាក់ off-by-one, lower bound និង upper bound, rotated array និង binary search លើចម្លើយ — ប្រើដើម្បីបន្ថែម searching.ts ទៅ algolab។
- 08ការតម្រៀបBubble, insertion, merge និង quick sort, stability, អន្ទាក់ default-string របស់ Array.sort, comparator, counting sort និង benchmark — ប្រើដើម្បីបន្ថែម sorting.ts ទៅ algolab។
- 09Tree និង Binary Search Treeវាក្យសព្ទរបស់ tree, DOM និង file system ជា tree, ការដើរ depth-first (preorder, inorder, postorder) និង breadth-first, ការបញ្ចូល ការស្វែងរក និងការលុបនៅក្នុង binary search tree, កម្ពស់ និងតុល្យភាព និងបញ្ហាសម្ភាសន៍បុរាណ — ប្រើដើម្បីបង្កើត tree module សម្រាប់ algolab។
- 10Heap និង Priority QueuePriority queue, binary heap ដែលផ្អែកលើ array, sift up និង sift down, heap sort, top-K, ការកំណត់ពេលការងារ, median ដែលកំពុងដំណើរការ និងការបញ្ចូលបញ្ជីដែលបានរៀបចំ — ប្រើដើម្បីបង្កើត PriorityQueue សម្រាប់ algolab។
- 11GraphVertex និង edge, directed និង weighted graph, adjacency list ទល់នឹង matrix, BFS, DFS, ផ្លូវខ្លីបំផុត, connected component, ការរកឃើញ cycle, topological sort និង algorithm របស់ Dijkstra — ប្រើដើម្បីបង្កើត class Graph សម្រាប់ algolab។
- 12Trie និង Union-FindPrefix tree សម្រាប់ autocomplete, union-find ជាមួយ path compression និង union by rank សម្រាប់ដាក់ក្រុម, connected component និងការរកឃើញ edge ដែលហួសចាំបាច់ — ប្រើដើម្បីបន្ថែម Trie និង UnionFind ទៅ algolab។
- 13Greedy និង Dynamic Programmingជម្រើសបែប Greedy (ការកំណត់ពេល interval, កាក់), dynamic programming (Fibonacci, ឡើងជណ្តើរ, coin change, knapsack, longest common subsequence), top-down ទល់នឹង bottom-up និងរបៀបសម្គាល់ DP — ប្រើដើម្បីបន្ថែម greedy.ts និង dp.ts ទៅ algolab។
- 14ដាក់ឲ្យរួមគ្នាPattern cheat sheet សម្រាប់ជ្រើស structure ឬបច្ចេកទេស, វិធីសាស្ត្រ interview ប្រាំពីរជំហានជាមួយឧទាហរណ៍ដែលដោះស្រាយពេញលេញ និង index.ts ចុងក្រោយរបស់ algolab ដែល export គ្រប់ module — បូកនឹងកន្លែងដែលត្រូវទៅបន្ត។