From d78bbd93c0df515c343aa2cd9ef98a93ea608226 Mon Sep 17 00:00:00 2001 From: Si Thu Hlaing Date: Fri, 11 Jul 2025 02:11:40 +0200 Subject: [PATCH] Burmese translation --- translations/README-my.md | 1991 +++++++++++++++++++++++++++++++++++++ 1 file changed, 1991 insertions(+) create mode 100644 translations/README-my.md diff --git a/translations/README-my.md b/translations/README-my.md new file mode 100644 index 0000000000..80a11496b2 --- /dev/null +++ b/translations/README-my.md @@ -0,0 +1,1991 @@ +# အင်တာဗျူး ကုဒ်ရေးသားခြင်း တက္ကသိုလ် + +> ကျွန်တော်က အစကတော့ ဆော့ဖ်ဝဲအင်ဂျင်နီယာ ဖြစ်ဖို့ရန်အတွက် လေ့လာရမည့်အကြောင်းအရာများကို တိုတောင်းသော စာရင်းတစ်ခုအဖြစ် ဖန်တီးခဲ့သည်၊ သို့သော် ယနေ့တွင် သင်တွေ့မြင်ရသော မဟာစာရင်းအဖြစ် ဖြစ်ထွန်းလာခဲ့ပါသည်။ ဤသင်ကြားချင်းကို ဖြတ်သန်းပြီးပါက၊ [ကျွန်တော်သည် Amazon မှ Software Development Engineer အဖြစ် အလုပ်ရရှိခဲ့ပါသည်](https://startupnextdoor.com/ive-been-acquired-by-amazon/?src=ciu)! +> သင်သည် ကျွန်တော်လောက် များစွာ လေ့လာရန် မလိုပါ။ မည်သို့ပင်ဖြစ်စေ၊ သင်လိုအပ်သမျှ ဤနေရာတွင် ရရှိနိုင်ပါသည်။ +> +> ကျွန်တော်သည် တစ်နေ့လျှင် ၈-၁၂ နာရီ လေ့လာခဲ့ပြီး လများစွာ ပြုလုပ်ခဲ့ပါသည်။ ဤသည်ကား ကျွန်တော်၏ storyပင်ဖြစ်သည်: [Google အင်တာဗျူးအတွက် ၈ လပြည့်နီးနီး အချိန်ပေး လေ့လာခဲ့မှု](https://medium.freecodecamp.org/why-i-studied-full-time-for-8-months-for-a-google-interview-cc662ce9bb13) +> +> **ကျေးဇူးပြု၍ သတိပြုပါ:** သင်သည် ကျွန်တော်လောက် လေ့လာရန် မလိုပါ။ ကျွန်တော်သည် မလိုအပ်သော အရာများအတွက် အချိန်များစွာ ဖြုန်းခဲ့ပါသည်။ ထိုအကြောင်း အသေးစိတ် အောက်တွင်ပါရှိ ပါသည်။ ကျွန်တော်သည် သင်၏ တန်ဖိုးရှိသော အချိန်ကို မဖြုန်းတီးပဲ ပန်းတိုင်သို့ ရောက်စေရန် ကူညီပေးပါမည်။ +> +> ဤနေရာတွင် စာရင်းသွင်းထားသော အရာများသည် အကြီးစား ဆော့ဖ်ဝဲကုမ္ပဏီများ အပါအဝင် အများစု ဆော့ဖ်ဝဲကုမ္ပဏီများတွင် နည်းပညာဆိုင်ရာ အင်တာဗျူးအတွက် သင့်အား ကောင်းမွန်စွာ ပြင်ဆင်ပေးပါလိမ့်မည်: Amazon၊ Facebook၊ Google နှင့် Microsoft။ +> +> *သင့်အား ကံကောင်းမှု ပါရစေ!* + +
+ဘာသာပြန်များ: + +- [Bahasa Indonesia](translations/README-id.md) +- [Bulgarian](translations/README-bg.md) +- [Español](translations/README-es.md) +- [German](translations/README-de.md) +- [Japanese (日本語)](translations/README-ja.md) +- [Marathi](translations/README-mr.md) +- [Polish](translations/README-pl.md) +- [Português Brasileiro](translations/README-ptbr.md) +- [Russian](translations/README-ru.md) +- [Tiếng Việt - Vietnamese](translations/README-vi.md) +- [Urdu - اردو](translations/README-ur.md) +- [Uzbek](translations/README-uz.md) +- [বাংলা - Bangla](translations/README-bn.md) +- [ខ្មែរ - Khmer](translations/README-kh.md) +- [简体中文](translations/README-cn.md) +- [繁體中文](translations/README-tw.md) +
+ +
+ဘာသာပြန်ဆဲများ: + +- [Afrikaans](https://github.com/jwasham/coding-interview-university/issues/1164) +- [Arabic](https://github.com/jwasham/coding-interview-university/issues/98) +- [French](https://github.com/jwasham/coding-interview-university/issues/89) +- [Greek](https://github.com/jwasham/coding-interview-university/issues/166) +- [Italian](https://github.com/jwasham/coding-interview-university/issues/1030) +- [Korean(한국어)](https://github.com/jwasham/coding-interview-university/issues/118) +- [Malayalam](https://github.com/jwasham/coding-interview-university/issues/239) +- [Persian - Farsi](https://github.com/jwasham/coding-interview-university/issues/186) +- [Telugu](https://github.com/jwasham/coding-interview-university/issues/117) +- [Thai](https://github.com/jwasham/coding-interview-university/issues/156) +- [Turkish](https://github.com/jwasham/coding-interview-university/issues/90) +- [Українська](https://github.com/jwasham/coding-interview-university/issues/106) +- [עברית](https://github.com/jwasham/coding-interview-university/issues/82) +- [हिन्दी](https://github.com/jwasham/coding-interview-university/issues/81) +- [မြန်မာ](https://github.com/jwasham/coding-interview-university/issues/1412) +
+ +## ဤအရာသည် မည်သည့်အရာနည်း? + +![Coding at the ကျောက်သင်ပုန်း - from HBO's Silicon Valley](https://d3j2pkmjtin6ou.cloudfront.net/coding-at-the-ကျောက်သင်ပုန်း-silicon-valley.png) + +ဤသည်ကား အကြီးစားကုမ္ပဏီများတွင် ဆော့ဖ်ဝဲအင်ဂျင်နီယာ ဖြစ်ရန်အတွက် ကျွန်ပ်သည် လများစွာ ကြာမြင့်သော လေ့လာမှုကို ပြုလုပ်ခဲ့ပါသည်။ + +**လိုအပ်သည်များ:** +* ကုဒ်ရေးသားခြင်းဆိုင်ရာ အတွေ့အကြုံ (variables၊ loops၊ methods/functions၊ စသည်တို့) +* စိတ်ရှည်မှု +* အချိန် + +သတိပြုပါ၊ ဤသည်သာ **ဆော့ဖ်ဝဲအင်ဂျင်နီယာရင်း**အတွက် လေ့လာမှုအစီအစဉ်ဖြစ်ပြီး frontend engineering သို့မဟုတ် full-stack development အတွက် မဟုတ်ပါ။ ထိုအသက်မွေးဝမ်းကြောင်းများအတွက် အကောင်းမွန်ဆုံး လမ်းညွှန်များနှင့် သင်ခန်းစာများ အခြားနေရာများတွင် ရှိပါသည် (အသေးစိတ်အတွက် https://roadmap.sh/ ကို ကြည့်ပါ)။ + +ကွန်ပျူတာသိပ္ပံ အစီအစဉ်အတွက် လေ့လာရမည့်အရာများ များစွာရှိသော်လည်း အင်တာဗျူးအတွက် ၇၅% ခန့်သာ သိခြင်းဖြင့် လုံလောက်ပါသည်၊ ထို့ကြောင့် ကျွန်တော်သည် ဤနေရာတွင် ထိုအရာများကိုသာ လုံလောက်အောင်ရေးသားထားသည်။ +ကွန်ပျူတာသိပ္ပံ အစီအစဉ် ကို ကိုယ်တိုင်လေ့လာမှု အပြည့်အစုံအတွက်၊ ကျွန်တော်၏ လေ့လာမှုအစီအစဉ်အတွက် အရင်းအမြစ်များကို Kamran Ahmed ၏ Computer Science Roadmap တွင် ပါဝင်သည်: https://roadmap.sh/computer-science + +--- + +## မာတိကာ + +### လေ့လာမှုအစီအစဉ် + +- [ဤအရာသည် မည်သည့်အရာနည်း?](#ဤအရာသည်-မည်သည့်အရာနည်း) +- [အဘယ့်ကြောင့် အသုံးပြုရမည်နည်း?](#အဘယ့်ကြောင့်-အသုံးပြုရမည်နည်း) +- [မည်သို့ အသုံးပြုရမည်နည်း](#မည်သို့-အသုံးပြုရမည်နည်း) +- [သင်သည် လုံလောက်သော မှတ်ဉာဏ်မရှိဟု မထင်ပါနှင့်](#သင်သည်-လုံလောက်သော-မှတ်ဉာဏ်မရှိဟု-မထင်ပါနှင့်) +- [ဗီဒီယို အရင်းအမြစ်များအကြောင်း မှတ်စု](#ဗီဒီယို-အရင်းအမြစ်များအကြောင်း-မှတ်စု) +- [ပရိုဂရမ်မင်းဘာသာစကား ရွေးချယ်ပါ](#ပရိုဂရမ်မင်းဘာသာစကား-ရွေးချယ်ပါ) +- [Data Structures နှင့် Algorithms အတွက် စာအုပ်များ](#data-structures-နှင့်-algorithms-အတွက်-စာအုပ်များ) +- [အင်တာဗျူး ပြင်ဆင်မှု စာအုပ်များ](#အင်တာဗျူး-ပြင်ဆင်မှု-စာအုပ်များ) +- [ကျွန်တော်၏ အမှားများကို မကျူးလွန်ပါနှင့်](#ကျွန်တော်၏-အမှားများကို-မကျူးလွန်ပါနှင့်) +- [သင်မတွေ့မြင်ရမည့်အရာများ](#သင်မတွေ့မြင်ရမည့်အရာများ) +- [နေ့စဉ်အစီအစဉ်](#နေ့စဉ်အစီအစဉ်) +- [ကုဒ်ရေးသားခြင်း မေးခွန်း လေ့ကျင့်ခြင်း](#ကုဒ်ရေးသားခြင်း-မေးခွန်း-လေ့ကျင့်ခြင်း) +- [ကုဒ်ရေးသားခြင်း ပြဿနာများ](#ကုဒ်ရေးသားခြင်း-ပြဿနာများ) + +### လေ့လာရမည့် အကြောင်းအရာများ + +- [Algorithmic complexity / Big-O / Asymptotic analysis](#algorithmic-complexity--big-o--asymptotic-analysis) +- [Data Structures](#data-structures) + - [Arrays](#arrays) + - [Linked Lists](#linked-lists) + - [Stack](#stack) + - [Queue](#queue) + - [Hash table](#hash-table) +- [နောက်ထပ် အသိပညာ](#နောက်ထပ်-အသိပညာ) + - [Binary search](#binary-search) + - [Bitwise operations](#bitwise-operations) +- [Trees](#trees) + - [Trees - နိဒါန်း](#trees---နိဒါန်း) + - [Binary search trees: BSTs](#binary-search-trees-bsts) + - [Heap / Priority Queue / Binary Heap](#heap--priority-queue--binary-heap) + - balanced search trees (ယေဘုယျ အယူအဆ၊ အသေးစိတ်မဟုတ်) + - traversals: preorder, inorder, postorder, BFS, DFS +- [Sorting](#sorting) + - selection + - insertion + - heapsort + - quicksort + - mergesort +- [Graphs](#graphs) + - directed + - undirected + - adjacency matrix + - adjacency list + - traversals: BFS, DFS +- [နောက်ထပ် အသိပညာများ](#နောက်ထပ်-အသိပညာများ) + - [Recursion](#recursion) + - [Dynamic Programming](#dynamic-programming) + - [Design Patterns](#design-patterns) + - [Combinatorics (n choose k) & Probability](#combinatorics-n-choose-k--probability) + - [NP, NP-Complete and Approximation Algorithms](#np-np-complete-and-approximation-algorithms) + - [ကွန်ပျူတာများ ပရိုဂရမ်ကို မည်သို့ လုပ်ဆောင်သနည်း](#ကွန်ပျူတာများ-ပရိုဂရမ်ကို-မည်သို့-လုပ်ဆောင်သနည်း) + - [Caches](#caches) + - [Processes and Threads](#processes-and-threads) + - [Testing](#testing) + - [String searching & manipulations](#string-searching--manipulations) + - [Tries](#tries) + - [Floating Point Numbers](#floating-point-numbers) + - [Unicode](#unicode) + - [Endianness](#endianness) + - [Networking](#networking) +- [နောက်ဆုံး ပြန်လည်ဆန်းစစ်ခြင်း](#နောက်ဆုံး-ပြန်လည်ဆန်းစစ်ခြင်း) + +### အလုပ်ရရှိခြင်း + +- [သင်၏ Resume ကို ပြန်လည်ပြင်ဆင်ပါ](#သင်၏-resume-ကို-ပြန်လည်ပြင်ဆင်ပါ) +- [အလုပ်ရှာပါ](#အလုပ်ရှာပါ) +- [အင်တာဗျူး လုပ်ငန်းစဉ်နှင့် ယေဘုယျ အင်တာဗျူး ပြင်ဆင်မှု](#အင်တာဗျူး-လုပ်ငန်းစဉ်နှင့်-ယေဘုယျ-အင်တာဗျူး-ပြင်ဆင်မှု) +- [အင်တာဗျူး ရောက်လာချိန်အတွက် စဉ်းစားရမည့်အရာများ](#အင်တာဗျူး-ရောက်လာချိန်အတွက်-စဉ်းစားရမည့်အရာများ) +- [အင်တာဗျူး ပြုလုပ်သူအတွက် မေးခွန်းများ ရှိထားပါ](#အင်တာဗျူး-ပြုလုပ်သူအတွက်-မေးခွန်းများ-ရှိထားပါ) +- [အလုပ်ရပြီးပါက](#အလုပ်ရပြီးပါက) + +**---------------- ဤအမှတ်အောက်ရှိ အရာအားလုံးသည် ရွေးချယ်စရာ ဖြစ်သည် ----------------** + +### ရွေးချယ်နိုင်သော အပိုအကြောင်းအရာများ နှင့် အရင်းအမြစ်များ + +- [နောက်ထပ် စာအုပ်များ](#နောက်ထပ်-စာအုပ်များ) +- [System Design, Scalability, Data Handling](#system-design-scalability-data-handling) (အကယ်၍ သင့်တွင် ၄+ နှစ် အတွေ့အကြုံရှိပါက) +- [နောက်ထပ် လေ့လာမှုများ](#နောက်ထပ်-လေ့လာမှုများ) + - [Compilers](#compilers) + - [Emacs and vi(m)](#emacs-and-vim) + - [Unix command line tools](#unix-command-line-tools) + - [Information theory](#information-theory-videos) + - [Parity & Hamming Code](#parity--hamming-code-videos) + - [Entropy](#entropy) + - [Cryptography](#cryptography) + - [Compression](#compression) + - [Computer Security](#computer-security) + - [Garbage collection](#garbage-collection) + - [Parallel Programming](#parallel-programming) + - [Messaging, Serialization, and Queueing Systems](#messaging-serialization-and-queueing-systems) + - [A*](#a) + - [Fast Fourier Transform](#fast-fourier-transform) + - [Bloom Filter](#bloom-filter) + - [HyperLogLog](#hyperloglog) + - [Locality-Sensitive Hashing](#locality-sensitive-hashing) + - [van Emde Boas Trees](#van-emde-boas-trees) + - [Augmented Data Structures](#augmented-data-structures) + - [Balanced search trees](#balanced-search-trees) + - AVL trees + - Splay trees + - Red/black trees + - 2-3 search trees + - 2-3-4 Trees (aka 2-4 trees) + - N-ary (K-ary, M-ary) trees + - B-Trees + - [k-D Trees](#k-d-trees) + - [Skip lists](#skip-lists) + - [Network Flows](#network-flows) + - [Disjoint Sets & Union Find](#disjoint-sets--union-find) + - [Math for Fast Processing](#math-for-fast-processing) + - [Treap](#treap) + - [Linear Programming](#linear-programming-videos) + - [Geometry, Convex hull](#geometry-convex-hull-videos) + - [Discrete math](#discrete-math) +- [အချို့ အကြောင်းအရာများအတွက် နောက်ထပ် အသေးစိတ်](#အချို့-အကြောင်းအရာများအတွက်-နောက်ထပ်-အသေးစိတ်) +- [ဗီဒီယို စီးရီးများ](#ဗီဒီယို-စီးရီးများ) +- [Computer Science သင်ခန်းစာများ](#computer-science-သင်ခန်းစာများ) +- [စာတမ်းများ](#စာတမ်းများ) + +--- + +## အဘယ့်ကြောင့် အသုံးပြုရမည်နည်း? + +အကယ်၍ သင်သည် အကြီးစားကုမ္ပဏီများတွင် ဆော့ဖ်ဝဲအင်ဂျင်နီယာအဖြစ် အလုပ်လုပ်လိုပါက၊ ဤအရာများကို သင်သိရမည်ဖြစ်သည်။ + +အကယ်၍ သင်သည် ကျွန်တော်ကဲ့သို့ computer science ဘွဲ့မရခဲ့ပါက၊ ဤအရာသည် သင့်အား လိုက်မှီစေပြီး သင်၏ အသက် လေးနှစ်ကို ချွေတာမှုဖြစ်သည်။ + +ကျွန်တော်သည် ဤ project ကို စတင်ချိန်တွင်၊ stack နှင့် heap ခြားနားချက်ကို မသိခဲ့ပါ၊ Big-O အကြောင်း မည်သည့်အရာမှ မသိခဲ့ပါ၊ သို့မဟုတ် trees အကြောင်း သို့မဟုတ် graph ကို မည်သို့ traverse လုပ်ရမည်ကို မသိခဲ့ပါ။ အကယ်၍ ကျွန်တော်သည် sorting algorithm ကို ကုဒ်ရေး မည်ဆိုပါက၊ ၎င်းသည် ကြောက်မက်ဖွယ် ဖြစ်မည်ဟု ပြောနိုင်ပါသည်။ +ကျွန်တော်စသုံးခဲ့သော data structure တိုင်းသည် ဘာသာစကားထဲတွင် တည်ဆောက်ထားပြီးသားဖြစ်ပြီး ၎င်းတို့သည် နောက်ကွယ်တွင် မည်သို့လုပ်ဆောင်သည်ကို လုံးဝ မသိခဲ့ပါ။ ကျွန်တော်သည် ကျွန်တော်လုပ်ဆောင်နေသော ဖြစ်စဥ် သည် "out of memory" error ပေးချိန်မှလွဲ၍ memory ကို တစ်ခါမျှ manage လုပ်ရန် မလိုအပ်ခဲ့ပါ၊ ထိုအခါ ကျွန်တော်သည် workaround ရှာရမည်ဖြစ်သည်။ ကျွန်တော်သည် ကျွန်တော်၏ ဘဝတွင် multidimensional arrays အနည်းငယ်နှင့် associative arrays များစွာ အသုံးပြုခဲ့သော်လည်း၊ တစ်ခါမျှ data structures များကို မူလမှ ဖန်တီးခဲ့ခြင်း မရှိပါ။ + +ဤသည်သာ ရှည်လျားသော အစီအစဉ်ဖြစ်သည်။ ၎င်းသည် သင့်အား လများစွာ ကြာနိုင်သည်။ အကယ်၍ သင်သည် ဤအရာများထဲမှ အများအပြားကို ရင်းနှီးမြင့်ခဲ့ပါက၊ သင့်အတွက် အချိန်ပေါင်းများစွာ နည်းပါးသွားလိမ့်မည်ဖြစ်သည်။ + +**[⬆ မာတိကာသို့ ပြန်သွားပါ](#မာတိကာ)** + +## မည်သို့ အသုံးပြုရမည်နည်း + +အောက်တွင်ရှိသော အရာအားလုံးသည် outline ဖြစ်ပြီး သင်သည် အောက်မှ အပေါ်သို့ အစီအစဉ်အတိုင်း ကိုင်တွယ်ရမည်ဖြစ်သည်။ + +ကျွန်တော်သည် progress ကို ခြေရာခံရန်အတွက် tasks lists အပါအဝင် GitHub ၏ အထူး markdown flavor ကို အသုံးပြုနေပါသည်။ + - [GitHub-flavored markdown အကြောင်း ပိုမို](#https://guides.github.com/features/mastering-markdown/#GitHub-flavored-markdown) + +### အကယ်၍ သင်သည် git ကို အသုံးမပြုလိုပါက + +ဤစာမျက်နှာတွင်၊ အပေါ်ပိုင်းအနီး Code ခလုတ်ကို နှိပ်ပြီး "Download ZIP" ကို နှိပ်ပါ။ file ကို unzip လုပ်ပြီး text files များနှင့် အလုပ်လုပ်နိုင်ပါသည်။ + +အကယ်၍ သင်သည် markdown ကို နားလည်သော code editor တွင် ဖွင့်ထားပါက၊ အရာအားလုံးကို လှပစွာ format လုပ်ထားသည်ကို တွေ့မြင်ရပါလိမ့်မည်။ + +![How to download the repo as a zip file](https://d3j2pkmjtin6ou.cloudfront.net/how-to-download-as-zip.png) + +### အကယ်၍ သင်သည် git နှင့် သက်တောင့်သက်သာ ရှိပါက + +branch အသစ်တစ်ခု ဖန်တီးပါ သို့မှသာ သင်သည် ဤကဲ့သို့ items များကို စစ်ဆေးနိုင်မည်ဖြစ်သည်၊ brackets တွင် x ထည့်ပါ: [x] + +1. ***GitHub repo ကို Fork လုပ်ပါ:*** `https://github.com/jwasham/coding-interview-university` Fork button ကို နှိပ်ခြင်းဖြင့်။ + + ![Fork the GitHub repo](https://d3j2pkmjtin6ou.cloudfront.net/fork-button.png) + +1. သင်၏ local repo သို့ Clone လုပ်ပါ: + + ```bash + git clone https://github.com//coding-interview-university.git + cd coding-interview-university + git remote add upstream https://github.com/jwasham/coding-interview-university.git + git remote set-url --push upstream DISABLE # ဤကြောင့် သင်သည် သင်၏ ကိုယ်ပိုင် progress ကို မူလ repo သို့ ပြန်မ push ပါ + ``` + +1. သင် changes များ ပြီးစီးပြီးပါက X ဖြင့် boxes အားလုံးက o အမှတ်ခံပါ: + + ```bash + git commit -am "Marked personal progress" + git pull upstream main # သင်၏ fork ကို မူလ repo မှ changes များနှင့် အပ်ဒိတ်လုပ်ထားပါ + + git push # သင်၏ fork သို့သာ push လုပ်သည် + ``` + +**[⬆ မာတိကာသို့ ပြန်သွားပါ](#မာတိကာ)** + +## သင်သည် လုံလောက်သော ဉာဏ်မရှိဟု မထင်ပါနှင့် + +- အောင်မြင်သော ဆော့ဖ်ဝဲအင်ဂျင်နီယာများသည် ဉာဏ်ကောင်းများဖြစ်သော်လည်း များစွာမှာ မိမိတို့သည် လုံလောက်သော ဉာဏ်မရှိဟု မယုံကြည်မှု ရှိကြသည်။ +- အောက်ပါ ဗီဒီယိုများသည် ဤမယုံကြည်မှုကို ကျော်လွှားနိုင်ရန် ကူညီနိုင်ပါသည်: + - [The myth of the Genius Programmer](https://www.youtube.com/watch?v=0SARbwvhupQ) + - [It's Dangerous to Go Alone: Battling the Invisible Monsters in Tech](https://www.youtube.com/watch?v=1i8ylq4j_EY) + +**[⬆ မာတိကာသို့ ပြန်သွားပါ](#မာတိকာ)** + +## ဗီဒီယို အရင်းအမြစ်များအကြောင်း မှတ်စု + +အချို့ ဗီဒီယိုများသည် Coursera သို့မဟုတ် EdX class တွင် မှတ်ပုံတင်ခြင်းဖြင့်သာ ရရှိနိုင်ပါသည်။ ဤများကို MOOCs ဟုခေါ်သည်။ +တစ်ခါတစ်ရံ classes များသည် session တွင် မရှိသောကြောင့် သင်သည် လနှစ်နှစ်ခန့် စောင့်ရမည်ဖြစ်ပြီး ၎င်းကြောင့် access မရရှိပါ။ + +YouTube videos (ပိုမိုနှစ်သက်ဖွယ် တက္ကသိုလ် ပို့ချပို့ချ နှင့်) ကဲ့သို့ အခမဲ့နှင့် အမြဲရရှိနိုင်သော public sources များဖြင့် online course resources များကို အစားထိုးနိုင်ပါက အလွန်ကောင်းမည်ဖြစ်သည်၊ ထိုသို့ဖြင့် လူများသည် အခါအခွင့်မေးဘဲ အချိန်မရွေး လေ့လာနိုင်မည်ဖြစ်သည်၊ +အထူး online course session တွင် ရှိစဉ်အချိန်မှလွဲ၍။ + +**[⬆ မာတိကာသို့ ပြန်သွားပါ](#မာတိကာ)** + +## ပရိုဂရမ်မင်းဘာသာစကား ရွေးချယ်ပါ + +သင်သည် ကုဒ်ရေးသားခြင်း အင်တာဗျူးများအတွက် ပရိုဂရမ်မင်းဘာသာစကားတစ်ခု ရွေးချယ်ရန် လိုအပ်သည်၊ +သို့သော် computer science concepts များ လေ့လာရန်အတွက်လည်း ဘာသာစကားတစ်ခု ရှာရန် လိုအပ်သည်။ + +ပိုမိုနှစ်သက်ဖွယ်အနေဖြင့် ဘာသာစကားသည် တူညီမည်ဖြစ်ပြီး၊ ထိုသို့ဖြင့် သင်သည် တစ်ခုတည်းကိုသာ ကျွမ်းကျင်ရန် လိုအပ်မည်ဖြစ်သည်။ + +### ဤလေ့လာမှုအစီအစဉ်အတွက် + +ကျွန်တော်သည် လေ့လာမှုအစီအစဉ် ပြုလုပ်ချိန်တွင်၊ အများစုအတွက် ဘာသာစကား ၂ ခုကို အသုံးပြုခဲ့သည်: C နှင့် Python + +* C: အလွန်နိမ့်သောအဆင့်။ pointers နှင့် memory allocation/deallocation များနှင့် ကိုင်တွယ်ခွင့်ပြုသောကြောင့် data structures + နှင့် algorithms များကို သင်၏ အရိုးများတွင် ခံစားရသည်။ Python သို့မဟုတ် Java ကဲ့သို့ higher-level languages များတွင်၊ ဤများကို သင့်ထံမှ ဝှက်ထားသည်။ နေ့စဉ်အလုပ်တွင်၊ ၎င်းသည် ကောင်းမွန်သည်၊ + သို့သော် သင်သည် ဤ low-level data structures များ မည်သို့တည်ဆောက်သည်ကို လေ့လာနေချိန်တွင်၊ metal နှင့် နီးကပ်စွာ ခံစားရခြင်းသည် အလွန်ကောင်းသည်။ + - C သည် နေရာတိုင်းတွင် ရှိသည်။ သင်သည် စာအုပ်များ၊ ပို့ချပို့ချများ၊ ဗီဒီယိုများ၊ *နေရာတိုင်းမှ* ဥပမာများကို တွေ့မြင်ရပါလိမ့်မည် သင်လေ့လာနေချိန်တွင်။ + - [The C Programming Language, 2nd Edition](https://www.amazon.com/Programming-Language-Brian-W-Kernighan/dp/0131103628) + - ဤသည်သာ တိုတောင်းသော စာအုပ်ဖြစ်သော်လည်း C ဘာသာစကားအတွက် အလွန်ကောင်းမွန်သော အခြေခံကို ပေးမည်ဖြစ်ပြီး အကယ်၍ သင်သည် ၎င်းကို အနည်းငယ် လေ့ကျင့်ပါက + သင်သည် လျင်မြန်စွာ ကျွမ်းကျင်လာမည်ဖြစ်သည်။ C ကို နားလည်ခြင်းသည် programs နှင့် memory မည်သို့လုပ်ဆောင်သည်ကို နားလည်စေပါသည်။ + - သင်သည် စာအုပ်ထဲတွင် အလွန်နက်ရှိုင်းစွာ သွားရန် (သို့မဟုတ် ပြီးစီးရန်ပင်) မလိုအပ်ပါ။ C တွင် ဖတ်ခြင်းနှင့် ရေးသားခြင်းနှင့် သက်တောင့်သက်သာရှိရာသို့သာ ရောက်ပါ။ +* Python: ခေတ်သစ်နှင့် အလွန် expressive ဖြစ်ပြီး၊ ကျွန်တော်သည် ၎င်းကို လေ့လာခဲ့သည် အကြောင်းမှာ ၎င်းသည် အလွန်အသုံးဝင်ပြီး အင်တာဗျူးတွင် ကုဒ်နည်းနည်းဖြင့် ရေးသားခွင့်ပြုသောကြောင့်ဖြစ်သည်။ + +ဤသည်ကား ကျွန်တော်၏ ရွေးချယ်မှုဖြစ်သည်။ သင်နှစ်သက်သည်ကို လုပ်ပါ။ + +သင့်အတွက် မလိုအပ်သောအခါမျှ ရှိနိုင်သော်လည်း ဘာသာစကားအသစ် လေ့လာရန်အတွက် sites အချို့ ဤတွင်ရှိပါသည်: +- [Exercism](https://exercism.org/tracks) +- [Codewars](http://www.codewars.com) +- [HackerEarth](https://www.hackerearth.com/for-developers/) +- [Scaler Topics (Java, C++)](https://www.scaler.com/topics/) +- [Programiz PRO Community Challenges)](https://programiz.pro/) + +### သင်၏ ကုဒ်ရေးသားခြင်း အင်တာဗျူးအတွက် + +သင်သည် အင်တာဗျူး၏ ကုဒ်ရေးသားခြင်း အပိုင်းကို လုပ်ဆောင်ရန်အတွက် သင်နှင့် သက်တောင့်သက်သာရှိသော ဘာသာစကားကို အသုံးပြုနိုင်သော်လည်း အကြီးစားကုမ္ပဏီများအတွက်၊ ဤများသည် ခိုင်မာသော ရွေးချယ်မှုများဖြစ်သည်: + +- C++ +- Java +- Python + +သင်သည် ဤများကိုလည်း အသုံးပြုနိုင်သော်လည်း ဦးစွာ ပတ်ဝန်းကျင်ကို ဖတ်ရှုပါ။ caveats များ ရှိနိုင်သည်: + +- JavaScript +- Ruby + +ဤတွင် အင်တာဗျူးအတွက် ဘာသာစကား ရွေးချယ်ခြင်းအကြောင်း ကျွန်တော်ရေးသားခဲ့သော ဆောင်းပါးတစ်ခု ရှိပါသည်: +[Pick One Language for the Coding Interview](https://startupnextdoor.com/important-pick-one-language-for-the-coding-interview/)။ +ဤသည်ကား ကျွန်တော်၏ post မူရင်းအခြေခံသော ဆောင်းပါးဖြစ်သည်: [Choosing a Programming Language for Interviews](https://web.archive.org/web/20210516054124/http://blog.codingforinterviews.com/best-programming-language-jobs/) + +သင်သည် ဘာသာစကားတွင် အလွန် သက်တောင့်သက်သာရှိရမည်ဖြစ်ပြီး အသိပညာရှိရမည်ဖြစ်သည်။ + +ရွေးချယ်မှုများအကြောင်း ပိုမိုဖတ်ရှုပါ: +- [Choose the Right Language for Your Coding Interview](http://www.byte-by-byte.com/choose-the-right-language-for-your-coding-interview/) + +[ဘာသာစကားအလိုက် အရင်းအမြစ်များကို ဤနေရာတွင် ကြည့်ပါ](programming-language-resources.md) + +**[⬆ မာတိကာသို့ ပြန်သွားပါ](#မာတိကာ)** + +## Data Structures နှင့် Algorithms အတွက် စာအုပ်များ + +ဤစာအုပ်သည် computer science အတွက် သင်၏ အခြေခံကို ဖွဲ့စည်းပါလိမ့်မည်။ + +သင်နှင့် သက်တောင့်သက်သာရှိမည့် ဘာသာစကားတစ်ခုကို ရွေးချယ်ပါ။ သင်သည် ဖတ်ခြင်းနှင့် ကုဒ်ရေးသားခြင်း များစွာ လုပ်ဆောင်ရမည်ဖြစ်သည်။ + +### Python + +- [Coding Interview Patterns: Nail Your Next Coding Interview](https://geni.us/q7svoz) (**အဓိက အကြံပြုချက်**) + - အင်တာဗျူးပြုလုပ်သူများ အမှန်တကယ် ရှာဖွေနေသည့်အရာနှင့် အကြောင်းရင်းအတွက် insider ၏ ရှုမြင်ချက်။ + - အသေးစိတ် ဖြေရှင်းချက်များနှင့်အတူ စစ်မှန်သော ကုဒ်ရေးသားခြင်း အင်တာဗျူး ပြဿနာ ၁၀၁ ခု။ + - သင်သည် live အင်တာဗျူးတွင် ဖြေရှင်းနေသကဲ့သို့ ပြဿနာတစ်ခုချင်းစီမှတစ်ဆင့် သင့်အား လမ်းညွှန်သော ပင်ကိုယ် ရှင်းလင်းချက်များ။ + - အဓိက concepts နှင့် patterns များကို သရုပ်ဖော်ရန်အတွက် ၁၀၀၀+ ပုံများ။ + +### C + +- [Algorithms in C, Parts 1-5 (Bundle), 3rd Edition](https://www.amazon.com/Algorithms-Parts-1-5-Bundle-Fundamentals/dp/0201756080) + - Fundamentals, Data Structures, Sorting, Searching, and Graph Algorithms + +### Java + +သင်၏ ရွေးချယ်မှု: + +- Goodrich, Tamassia, Goldwasser + - [Data Structures and Algorithms in Java](https://www.amazon.com/Data-Structures-Algorithms-Michael-Goodrich/dp/1118771338/) +- Sedgewick and Wayne: + - [Algorithms](https://www.amazon.com/Algorithms-4th-Robert-Sedgewick/dp/032157351X/) + - စာအုပ်ကို ဖုံးလွှမ်းသော အခမဲ့ Coursera course (စာရေးသူများကိုယ်တိုင် သင်ကြားသည်!): + - [Algorithms I](https://www.coursera.org/learn/algorithms-part1) + - [Algorithms II](https://www.coursera.org/learn/algorithms-part2) + +### C++ + +သင်၏ ရွေးချယ်မှု: + +- Goodrich, Tamassia, and Mount + - [Data Structures and Algorithms in C++, 2nd Edition](https://www.amazon.com/Data-Structures-Algorithms-Michael-Goodrich/dp/0470383275) +- Sedgewick and Wayne + - [Algorithms in C++, Parts 1-4: Fundamentals, Data Structure, Sorting, Searching](https://www.amazon.com/Algorithms-Parts-1-4-Fundamentals-Structure/dp/0201350882/) + - [Algorithms in C++ Part 5: Graph Algorithms](https://www.amazon.com/Algorithms-Part-Graph-3rd-Pt-5/dp/0201361183/) + +**[⬆ မာတိကာသို့ ပြန်သွားပါ](#မာတိကာ)** + +## အင်တာဗျူး ပြင်ဆင်မှု စာအုပ်များ + +သင်၏ လေ့လာမှုကို ဖြည့်စွက်ရန်အတွက် အကြံပြုထားသော စာအုပ်အချို့ ဤတွင်ရှိပါသည်။ + +- [Coding Interview Patterns: Nail Your Next Coding Interview](https://geni.us/q7svoz) + +- [Programming Interviews Exposed: Coding Your Way Through the Interview, 4th Edition](https://www.amazon.com/Programming-Interviews-Exposed-Through-Interview/dp/111941847X/) + - C++ နှင့် Java တွင် အဖြေများ + - ဤသည်ကား Cracking the Coding Interview အတွက် ကောင်းမွန်သော warm-up ဖြစ်သည် + - အလွန်ခက်ခဲခြင်း မရှိပါ။ ပြဿနာအများစုသည် အင်တာဗျူးတွင် သင်တွေ့မြင်ရမည့်အရာများထက် ပိုမိုလွယ်ကူနိုင်သည် (ကျွန်တော်ဖတ်ခဲ့သည်အရ) + +- [Cracking the Coding Interview, 6th Edition](http://www.amazon.com/Cracking-Coding-Interview-6th-Programming/dp/0984782850/) + - Java တွင် အဖြေများ + +### အကယ်၍ သင့်တွင် အချိန်ပို အများအပြား ရှိပါက: + +တစ်ခုကို ရွေးချယ်ပါ: + +- [Elements of Programming Interviews (C++ version)](https://www.amazon.com/Elements-Programming-Interviews-Insiders-Guide/dp/1479274836) +- [Elements of Programming Interviews in Python](https://www.amazon.com/Elements-Programming-Interviews-Python-Insiders/dp/1537713949/) +- [Elements of Programming Interviews (Java version)](https://www.amazon.com/Elements-Programming-Interviews-Java-Insiders/dp/1517435803/) + - [Companion Project - Method Stub and Test Cases for Every Problem in the Book](https://github.com/gardncl/elements-of-programming-interviews) + +**[⬆ မာတိကာသို့ ပြန်သွားပါ](#မာတိကာ)** + +## ကျွန်တော်၏ အမှားများကို မကျူးလွန်ပါနှင့် + +ဤစာရင်းသည် လများစွာကြာ ကြီးထွားခဲ့ပြီး ဟုတ်ကဲ့၊ ၎င်းသည် ထိန်းချုပ်နိုင်မှုမှ လွတ်သွားခဲ့သည်။ + +ဤတွင် ကျွန်တော်ကျူးလွန်ခဲ့သော အမှားအချို့ ရှိပြီး သင့်အတွက် ပိုမိုကောင်းမွန်သော အတွေ့အကြုံ ရရှိစေမည်ဖြစ်သည်။ ထိုသို့ဖြင့် သင်သည် လများစွာ အချိန်ချွေတာနိုင်မည်ဖြစ်သည်။ + +### ၁။ သင်သည် ၎င်းအားလုံးကို မမှတ်မိမည် + +ကျွန်တော်သည် နာရီများစွာ ဗီဒီယိုများကို ကြည့်ပြီး များစွာသော မှတ်စုများ ယူခဲ့သော်လည်း၊ လများစွာ နောက်ပိုင်းတွင် ကျွန်တော်မမှတ်မိသော အရာများ များစွာ ရှိခဲ့သည်။ ကျွန်တော်သည် ကျွန်တော်၏ မှတ်စုများကို ဖြတ်သန်းပြီး flashcards များ ပြုလုပ်ရန် ၃ရက်တာ အချိန်ကုန်ခဲ့ပါသည်၊ ထိုသို့ဖြင့် ကျွန်တော်သည် ပြန်လည်ဆန်းစစ်နိုင်မည်ဖြစ်သည်။ ကျွန်တော်သည် ထိုအသိပညာ အားလုံးကို မလိုအပ်ခဲ့ပါ။ + +ကျေးဇူးပြု၍၊ ကျွန်တော်၏ အမှားများကို မကျူးလွန်ရန် ဖတ်ရှုပါ: + +[Retaining Computer Science Knowledge](https://startupnextdoor.com/retaining-computer-science-knowledge/)။ + +### ၂။ Flashcards များ အသုံးပြုပါ + +ပြဿနာကို ဖြေရှင်းရန်အတွက်၊ ကျွန်တော်သည် flashcard site လေးတစ်ခု ပြုလုပ်ခဲ့သည် ၎င်းတွင် flashcard အမျိုးအစား ၂ ခုကို ထည့်နိုင်သည်: ယေဘုယျနှင့် ကုဒ်။ +card တစ်ခုချင်းစီတွင် မတူညီသော formatting ရှိသည်။ ကျွန်တော်သည် mobile-first website တစ်ခု ပြုလုပ်ခဲ့သည်၊ ထိုသို့ဖြင့် ကျွန်တော်သည် ကျွန်တော်ရှိရာ နေရာမရွေး ကျွန်တော်၏ ဖုန်း သို့မဟုတ် tablet တွင် ပြန်လည်ဆန်းစစ်နိုင်မည်ဖြစ်သည်။ + +သင်၏ ကိုယ်ပိုင်ကို အခမဲ့ ပြုလုပ်ပါ: + +- [Flashcards site repo](https://github.com/jwasham/computer-science-flash-cards) + +**ကျွန်တော်သည် ကျွန်တော်၏ flashcards အသုံးပြုခြင်းကို အကြံမပြုပါ။** ၎င်းတို့သည် အလွန်များပြားပြီး အများစုမှာ သင်မလိုအပ်သော trivia များဖြစ်သည်။ + +သို့သော် သင်သည် ကျွန်တော်၏ စကားကို နားမထောင်လိုပါက၊ ဤတွင် ရှိပါသည်: +- [My flash cards database (1200 cards)](https://github.com/jwasham/computer-science-flash-cards/blob/main/cards-jwasham.db): +- [My flash cards database (extreme - 1800 cards)](https://github.com/jwasham/computer-science-flash-cards/blob/main/cards-jwasham-extreme.db): + +ကျွန်တော်သည် overboard သွားခဲ့ပြီး assembly language နှင့် Python trivia မှ machine learning နှင့် statistics အထိ အရာအားလုံးကို ဖုံးလွှမ်းသော cards များ ရှိသည်ကို မှတ်ထားပါ။ +၎င်းသည် လိုအပ်သည့်အရာအတွက် လွန်ကဲစွာ များပြားသည်။ + +**Flashcards အကြောင်း မှတ်စု:** သင်သည် အဖြေကို သိသည်ဟု ပထမဆုံးအကြိမ် အသိအမှတ်ပြုချိန်တွင်၊ ၎င်းကို အသိအမှတ်ပြုသည်ဟု မမှတ်သားပါနှင့်။ သင်သည် အမှန်တကယ် သိမီမှာ တူညီသော card ကို တွေ့မြင်ပြီး အကြိမ်များစွာ မှန်ကန်စွာ ဖြေဆိုရမည်ဖြစ်သည်။ ထပ်ခါထပ်ခါ လုပ်ခြင်းသည် ထိုအသိပညာကို သင်၏ ဦးနှောက်ထဲတွင် ပိုမိုနက်ရှိုင်းစွာ ထားရှိမည်ဖြစ်သည်။ + +ကျွန်တော်၏ flashcard site အသုံးပြုခြင်းအတွက် အခြားရွေးချယ်မှုမှာ [Anki](http://ankisrs.net/) ဖြစ်ပြီး၊ ၎င်းကို ကျွန်တော့်အား အကြိမ်များစွာ အကြံပြုခဲ့ပါသည်။ +၎င်းသည် သင်မှတ်မိစေရန် ကူညီရန်အတွက် repetition system တစ်ခုကို အသုံးပြုသည်။ ၎င်းသည် user-friendly ဖြစ်ပြီး၊ platform အားလုံးတွင် ရရှိနိုင်ပြီး cloud sync system ရှိသည်။ +၎င်းသည် iOS တွင် $25 ကုန်ကျသော်လည်း အခြား platforms များတွင် အခမဲ့ဖြစ်သည်။ + +Anki format တွင် ကျွန်တော်၏ flashcard database: https://ankiweb.net/shared/info/25173560 ([@xiewenya](https://github.com/xiewenya) ကို ကျေးဇူးတင်ပါသည်)။ + +ကျောင်းသားအချို့က white space နှင့် formatting issues များ ရှိသည်ဟု ဖော်ပြခဲ့ပြီး အောက်ပါအတိုင်း လုပ်ခြင်းဖြင့် ပြုပြင်နိုင်သည်: deck ကို ဖွင့်ပါ ၊ card ကို edit လုပ်ပါ၊ cards ကို နှိပ်ပါ၊ "styling" radio button ကို ရွေးပါ၊ ပြီးတော့ card class သို့ member "white-space: pre;" ကို ထည့်ပါ။ + +### ၃။ သင်လေ့လာနေစဉ် ကုဒ်ရေးသားခြင်း အင်တာဗျူး မေးခွန်းများကို လုပ်ပါ + +ဤအရာသည် အလွန်အရေးကြီးပါသည်။ + +သင်သည် data structures နှင့် algorithms များ လေ့လာနေစဉ် ကုဒ်ရေးသားခြင်း အင်တာဗျူး မေးခွန်းများကို စတင်လုပ်ဆောင်ပါ။ + +သင်သည် ပြဿနာများ ဖြေရှင်းရန်အတွက် သင်လေ့လာနေသည့်အရာများကို အသုံးချရန် လိုအပ်သည်၊ သို့မဟုတ် သင်မေ့သွားမည်ဖြစ်သည်။ ကျွန်တော်သည် ဤအမှားကို ကျူးလွန်ခဲ့ပါသည်။ + +သင်သည် အကြောင်းအရာတစ်ခုကို လေ့လာပြီး ၎င်းနှင့် အနည်းငယ် သက်တောင့်သက်သာ ခံစားရပြီးနောက်၊ ဥပမာအားဖြင့်၊ **linked lists**: +1. [ကုဒ်ရေးသားခြင်း အင်တာဗျူး စာအုပ်များ](#အင်တာဗျူး-ပြင်ဆင်မှု-စာအုပ်များ) ထဲမှ တစ်ခုကို ဖွင့်ပါ (သို့မဟုတ် အောက်တွင် စာရင်းပြုထားသော ကုဒ်ရေးသားခြင်း ပြဿနာ websites များ) +1. linked lists နှင့်ပတ်သက်သော မေးခွန်း ၂ သို့မဟုတ် ၃ ခု လုပ်ပါ။ +1. နောက် လေ့လာမည့် အကြောင်းအရာသို့ ဆက်သွားပါ။ +1. နောက်ပိုင်းတွင်၊ ပြန်သွားပြီး linked list ပြဿနာ နောက်ထပ် ၂ သို့မဟုတ် ၃ ခု လုပ်ပါ။ +1. သင်လေ့လာသော အကြောင်းအရာအသစ် တိုင်းနှင့်အတူ ဤကို လုပ်ပါ။ + +**သင်သည် ဤအရာများ အားလုံးကို လေ့လာနေစဉ် ပြဿနာများကို ဆက်လုပ်ပါ၊ နောက်မှ မလုပ်ပါ။** + +သင်သည် အသိပညာအတွက် မဟုတ်ဘဲ အသိပညာကို မည်သို့အသုံးချသည်အတွက် ငှားရမ်းခံရမည်ဖြစ်သည်။ + +ဤအတွက် အရင်းအမြစ်များ များစွာရှိပြီး အောက်တွင် စာရင်းပြုထားပါသည်။ ဆက်သွားပါ။ + +### ၄။ အာရုံစူးစိုက်ပါ + +အမြတ်တနိုး အချိန်ကို ကုန်ကျစေနိုင်သော အာရုံလွဲမှုများ များစွာရှိပါသည်။ အာရုံစူးစိုက်မှုနှင့် စူးစိုက်မှုသည် ခက်ခဲပါသည်။ စာသားမရှိသော ဂီတကို ဖွင့်ပါ၊ ထိုသို့ဖြင့် သင်သည် ကွက်ကွက်ကွင်းကွင်း အာရုံစူးစိုက်နိုင်မည်ဖြစ်သည်။ + +**[⬆ မာတိကာသို့ ပြန်သွားပါ](#မာတိကာ)** + +## သင်မတွေ့မြင်ရမည့်အရာများ + +ဤများသည် လူကြိုက်များသော နည်းပညာများဖြစ်သော်လည်း ဤလေ့လာမှုအစီအစဉ်၏ အစိတ်အပိုင်း မဟုတ်ပါ: + +- Javascript +- HTML၊ CSS၊ နှင့် အခြား front-end နည်းပညာများ +- SQL + +**[⬆ မာတိကာသို့ ပြန်သွားပါ](#မာတိကာ)** + +## နေ့စဉ်အစီအစဉ် + +ဤသင်ခန်းစာသည် အကြောင်းအရာများ များစွာကို ဖြေရှင်းထားပါသည်။ တစ်ခုချင်းစီသည် သင့်အား ရက်အနည်းငယ်၊ သို့မဟုတ် တစ်ပတ် သို့မဟုတ် ထိုထက်ပိုကြာနိုင်သည်။ ၎င်းသည် သင်၏ အချိန်ဇယားအပေါ် မူတည်သည်။ + +နေ့တိုင်း၊ စာရင်းတွင်ရှိသော နောက်ထပ် အကြောင်းအရာကို ယူပြီး၊ ထို အကြောင်းအရာအကြောင်း ဗီဒီယိုအချို့ ကြည့်ပါ၊ ပြီးတော့ ဤသင်ခန်းစာအတွက် သင်ရွေးချယ်ခဲ့သော ဘာသာစကားဖြင့် ထို data structure သို့မဟုတ် algorithm ၏ implementation တစ်ခု ရေးသားပါ။ + +သင်သည် ကျွန်တော်၏ code ကို ဤနေရာတွင် ကြည့်နိုင်ပါသည်: + - [C](https://github.com/jwasham/practice-c) + - [C++](https://github.com/jwasham/practice-cpp) + - [Python](https://github.com/jwasham/practice-python) + +သင်သည် algorithm တိုင်းကို မှတ်မိရန် မလိုအပ်ပါ။ သင်သည် သင်၏ ကိုယ်ပိုင် implementation ရေးသားနိုင်ရန် လုံလောက်သော နားလည်မှုရှိရုံသာ လိုအပ်ပါသည်။ + +**[⬆ မာတိကာသို့ ပြန်သွားပါ](#မာတိကာ)** + +## ကုဒ်ရေးသားခြင်း မေးခွန်း လေ့ကျင့်ခြင်း + + ဤအရာ မည်ကြောင့် ဤနေရာတွင် ရှိသနည်း? ကျွန်တော်သည် အင်တာဗျူးအတွက် အဆင်သင့် မဖြစ်သေးပါ။ + +[ထိုအခါ ပြန်သွားပြီး ဤအရာကို ဖတ်ပါ။](#၃-သင်လေ့လာနေစဉ်-ကုဒ်ရေးသားခြင်း-အင်တာဗျူး-မေးခွန်းများကို-လုပ်ပါ) + +ပရိုဂရမ်မင်း ပြဿနာများ လေ့ကျင့်ခြင်းကို မည်ကြောင့် လိုအပ်သနည်း: +- ပြဿနာ အသိအမှတ်ပြုမှု၊ နှင့် မှန်ကန်သော data structures နှင့် algorithms များ မည်နေရာတွင် ကိုက်ညီသည် +- ပြဿနာအတွက် လိုအပ်ချက်များ စုစည်းခြင်း +- အင်တာဗျူးတွင် သင်လုပ်မည့်အတိုင်း ပြဿနာကို သင်၏ လမ်းကြောင်းအတိုင်း ပြောဆိုခြင်း +- ကွန်ပျူတာတွင် မဟုတ်ဘဲ ကျောက်သင်ပုန်း သို့မဟုတ် စက္ကူတွင် ကုဒ်ရေးသားခြင်း +- သင်၏ ဖြေရှင်းချက်များအတွက် အချိန်နှင့် နေရာ ရှုပ်ထွေးမှု တွက်ချက်ခြင်း (အောက်တွင် Big-O ကြည့်ပါ) +- သင်၏ ဖြေရှင်းချက်များကို စမ်းသပ်ခြင်း + +အင်တာဗျူးတွင် methodical၊ communicative ပြဿနာ ဖြေရှင်းခြင်းအတွက် အလွန်ကောင်းမွန်သော နိဒါန်း ရှိပါသည်။ သင်သည် ပရိုဂရမ်မင်း အင်တာဗျူး စာအုပ်များမှလည်း ဤအရာကို ရရှိမည်ဖြစ်သော်လည်း၊ ကျွန်တော်သည် ဤအရာကို ထူးခြားသော အဖြစ် တွေ့ရှိခဲ့သည်: +[Algorithm design canvas](http://www.hiredintech.com/algorithm-design/) + +ကွန်ပျူတာပေါ်မှာ မဟုတ်ဘဲ ကျောက်သင်ပုန်း သို့မဟုတ် စက္ကူပေါ်တွင် ကုဒ်ရေးသားပါ။ နမူနာ inputs အချို့ဖြင့် စမ်းသပ်ပါ။ ထိုနောက် ၎င်းကို type လုပ်ပြီး ကွန်ပျူတာတွင် စမ်းသပ်ပါ။ + +အကယ်၍ သင့်အိမ်တွင် ကျောက်သင်ပုန်း မရှိပါက၊ အနုပညာ စတိုးမှ ကြီးမားသော drawing pad တစ်ခု ဝယ်ယူပါ။ သင်သည် ဆိုဖာပေါ်တွင် ထိုင်ပြီး လေ့ကျင့်နိုင်ပါသည်။ +ဤသည်ကား ကျွန်တော်၏ "ဆိုဖာ ကျောက်သင်ပုန်း" ဖြစ်သည်။ ကျွန်တော်သည် စကေးအတွက်သာ ဓာတ်ပုံတွင် pen ကို ထည့်ခဲ့သည်။ အကယ်၍ သင်သည် pen ကို အသုံးပြုပါက၊ သင်သည် ပယ်ဖျက်နိုင်ခြင်းကို လိုလားမည်ဖြစ်သည်။ +လျင်မြန်စွာ ရှုပ်ထွေးလာသည်။ **ကျွန်တော်သည် ခဲတံနှင့် ပယ်ဖျက်ကိရိယာ အသုံးပြုပါသည်။** + +![my sofa whiteboard](https://d3j2pkmjtin6ou.cloudfront.net/art_board_sm_2.jpg) + +**ကုဒ်ရေးသားခြင်း မေးခွန်း လေ့ကျင့်ခြင်းသည် ပရိုဂရမ်မင်း ပြဿနာများ၏ အဖြေများကို မှတ်မိခြင်းနှင့် ပတ်သက်ခြင်း မဟုတ်ပါ။** + +**[⬆ မာတိကာသို့ ပြန်သွားပါ](#မာတိကာ)** + +## ကုဒ်ရေးသားခြင်း ပြဿနာများ + +သင်၏ အဓိက ကုဒ်ရေးသားခြင်း အင်တာဗျူး စာအုပ်များကို [ဤနေရာတွင်](#အင်တာဗျူး-ပြင်ဆင်မှု-စာအုပ်များ) မမေ့ပါနှင့်။ + +ပြဿနာများ ဖြေရှင်းခြင်း: +- [How to Find a Solution](https://www.topcoder.com/thrive/articles/How%20To%20Find%20a%20Solution) +- [How to Dissect a Topcoder Problem Statement](https://www.topcoder.com/thrive/articles/How%20To%20Dissect%20a%20Topcoder%20Problem%20Statement%20Content) + +ကုဒ်ရေးသားခြင်း အင်တာဗျူး မေးခွန်း ဗီဒီယိုများ: +- [IDeserve (88 videos)](https://www.youtube.com/playlist?list=PLamzFoFxwoNjPfxzaWqs7cZGsPYy0x_gI) +- [Tushar Roy (5 playlists)](https://www.youtube.com/user/tusharroy2525/playlists?shelf_id=2&view=50&sort=dd) + - ပြဿနာ ဖြေရှင်းချက်များ၏ walkthroughs အတွက် အလွန်ကောင်းသည် +- [Nick White - LeetCode Solutions (187 Videos)](https://www.youtube.com/playlist?list=PLU_sdQYzUj2keVENTP0a5rdykRSgg9Wp-) + - ဖြေရှင်းချက်နှင့် ကုဒ်၏ ကောင်းမွန်သော ရှင်းလင်းချက်များ + - သင်သည် တိုတောင်းသော အချိန်အတွင်း အများအပြားကို ကြည့်နိုင်သည် +- [FisherCoder - LeetCode Solutions](https://youtube.com/FisherCoder) + +Challenge/Practice sites: +- [LeetCode](https://leetcode.com/) + - ကျွန်တော်၊ အကြိုက်ဆုံး ကုဒ်ရေးသားခြင်း ပြဿနာ site။ သင်ပြင်ဆင်နေမည့် ၁-၂ လအတွက် subscription ပိုက်ဆံ တန်ဖိုးရှိပါသည်။ + - ကုဒ် walk-throughs အတွက် အပေါ်တွင်ရှိသော Nick White နှင့် FisherCoder Videos များကို ကြည့်ပါ။ +- [HackerRank](https://www.hackerrank.com/) +- [TopCoder](https://www.topcoder.com/) +- [Codeforces](https://codeforces.com/) +- [Codility](https://codility.com/programmers/) +- [Geeks for Geeks](https://practice.geeksforgeeks.org/explore/?page=1) +- [AlgoExpert](https://www.algoexpert.io/product) + - Google အင်ဂျင်နီယာများမှ ဖန်တီးထားပြီး၊ ဤသည်လည်း သင်၏ စွမ်းရည်များကို ကျွမ်းကျင်စေရန်အတွက် ကောင်းမွန်သော အရင်းအမြစ်ဖြစ်သည်။ +- [Project Euler](https://projecteuler.net/) + - အလွန် သင်္ချာ-အခြေခံဖြစ်ပြီး ကုဒ်ရေးသားခြင်း အင်တာဗျူးများအတွက် တကယ်တော့ မသင့်လျှော်ပါ + +**[⬆ မာတိကာသို့ ပြန်သွားပါ](#မာတိကာ)** + +## စတင်ကြပါစို့ + +ကောင်းပြီ၊ ပြောဆိုမှု လုံလောက်ပြီ၊ လေ့လာကြပါစို့! + +သို့သော် အပေါ်မှ ကုဒ်ရေးသားခြင်း ပြဿနာများကို သင်လေ့လာနေစဉ် လုပ်ဆောင်ရန် မမေ့ပါနှင့်! + +## Algorithmic complexity / Big-O / Asymptotic analysis + +- ဤနေရာတွင် implement လုပ်ရန် ဘာမှ မရှိပါ၊ သင်သည် ဗီဒီယိုများကို ကြည့်ပြီး မှတ်စုများ ယူရုံသာ! Yay! +- ဤနေရာတွင် ဗီဒီယိုများ များစွာ ရှိပါသည်။ သင်နားလည်သည့်အထိ လုံလောက်သော ပမာဏကိုသာ ကြည့်ပါ။ သင်သည် အမြဲတမ်း ပြန်လာပြီး ပြန်လည်ဆန်းစစ်နိုင်ပါသည်။ +- အကယ်၍ သင်သည် ၎င်းနောက်ကွယ်ရှိ သင်္ချာများ အားလုံးကို နားမလည်ပါက စိုးရိမ်မကြပါနှင့်။ +- သင်သည် Big-O ၏ စံညွှန်းများဖြင့် algorithm တစ်ခု၏ ရှုပ်ထွေးမှုကို မည်သို့ဖော်ပြရမည်ကို နားလည်ရုံသာ လိုအပ်ပါသည်။ +- [ ] [Harvard CS50 - Asymptotic Notation (video)](https://www.youtube.com/watch?v=iOq5kSKqeR4) +- [ ] [Big O Notations (general quick tutorial) (video)](https://www.youtube.com/watch?v=V6mKVRU1evU) +- [ ] [Big O Notation (and Omega and Theta) - best mathematical explanation (video)](https://www.youtube.com/watch?v=ei-A_wy5Yxw&index=2&list=PL1BaGV1cIH4UhkL8a9bJGG356covJ76qN) +- [ ] [Skiena (video)](https://www.youtube.com/watch?v=z1mkCe3kVUA) +- [ ] [UC Berkeley Big O (video)](https://archive.org/details/ucberkeley_webcast_VIS4YDpuP98) +- [ ] [Amortized Analysis (video)](https://www.youtube.com/watch?v=B3SpQZaAZP4&index=10&list=PL1BaGV1cIH4UhkL8a9bJGG356covJ76qN) +- [ ] TopCoder (recurrence relations နှင့် master theorem ပါဝင်သည်): + - [Computational Complexity: Section 1](https://www.topcoder.com/thrive/articles/Computational%20Complexity%20part%20one) + - [Computational Complexity: Section 2](https://www.topcoder.com/thrive/articles/Computational%20Complexity%20part%20two) +- [ ] [Cheat sheet](http://bigocheatsheet.com/) +- [ ] [[Review] Analyzing Algorithms (playlist) in 18 minutes (video)](https://www.youtube.com/playlist?list=PL9xmBV_5YoZMxejjIyFHWa-4nKg6sdoIv) + +ကောင်းပြီ၊ ၎င်းနှင့်ပတ်သက်၍ လုံလောက်ပါပြီ။ + +သင်သည် "Cracking the Coding Interview" ကို ဖြတ်သန်းသွားသောအခါ၊ ဤအကြောင်း chapter တစ်ခု ရှိပြီး အဆုံးတွင် algorithm များ အမျိုးမျိုး၏ runtime complexity ကို သင်သိနိုင်မလားဆိုတာ ကြည့်ရန် quiz တစ်ခု ရှိပါသည်။ ၎င်းသည် အလွန်ကောင်းမွန်သော ပြန်လည်ဆန်းစစ်မှုနှင့် စမ်းသပ်မှုဖြစ်သည်။ + +**[⬆ မာတိကာသို့ ပြန်သွားပါ](#မာတိကာ)** + +## Data Structures + +- ### Arrays + - [ ] Arrays အကြောင်း: + - [Arrays CS50 Harvard University](https://www.youtube.com/watch?v=tI_tIZFyKBw&t=3009s) + - [Arrays (video)](https://www.coursera.org/lecture/data-structures/arrays-OsBSF) + - [UC Berkeley CS61B - Linear and Multi-Dim Arrays (video)](https://archive.org/details/ucberkeley_webcast_Wp8oiO_CZZE) (15m 32s မှ စတင်ကြည့်ပါ) + - [Dynamic Arrays (video)](https://www.coursera.org/lecture/data-structures/dynamic-arrays-EwbnV) + - [Jagged Arrays (video)](https://www.youtube.com/watch?v=1jtrQqYpt7g) + - [ ] Vector တစ်ခု implement လုပ်ပါ (automatic resizing နှင့်အတူ mutable array): + - [ ] arrays နှင့် pointers များ အသုံးပြုပြီး ကုဒ်ရေးသားခြင်း လေ့ကျင့်ပါ၊ နှင့် indexing အသုံးပြုမည့်အစား index သို့ ခုန်ရန် pointer math + - [ ] allocated memory နှင့်အတူ raw data array အသယ် + - int array ကို ကျောကြောင်းတွင် allocate လုပ်နိုင်သည်၊ ၎င်း၏ features များကိုသာ အသုံးမပြုပါ + - 16 ဖြင့် စတင်ပါ၊ သို့မဟုတ် စတင်သော နံပါတ်သည် ပိုမိုကြီးမားပါက၊ power of 2 - 16, 32, 64, 128 ကို အသုံးပြုပါ + - [ ] size() - items အရေအတွက် + - [ ] capacity() - ၎င်းကိုင်တွယ်နိုင်သော items အရေအတွက် + - [ ] is_empty() + - [ ] at(index) - ပေးထားသော index တွင် item ကို return လုပ်သည်၊ index bounds ပြင်ပ ဖြစ်ပါက ပေါက်ကွဲသည် + - [ ] push(item) + - [ ] insert(index, item) - index တွင် item ကို ထည့်သည်၊ ထို index ၏ value နှင့် trailing elements များကို ညာဘက်သို့ ရွှေ့သည် + - [ ] prepend(item) - အပေါ်တွင် insert ကို index 0 တွင် အသုံးပြုနိုင်သည် + - [ ] pop() - အဆုံးမှ ဖယ်ရှားပြီး value ကို return လုပ်သည် + - [ ] delete(index) - index တွင် item ကို ဖျက်သည်၊ trailing elements အားလုံးကို ဘယ်ဘက်သို့ ရွှေ့သည် + - [ ] remove(item) - value ကို ရှာပြီး ၎င်းကို ကိုင်ထားသော index ကို ဖယ်ရှားသည် (များစွာသော နေရာများတွင် ရှိသောအခါမျှ) + - [ ] find(item) - value ကို ရှာပြီး ထို value ရှိသော ပထမ index ကို return လုပ်သည်၊ မတွေ့ပါက -1 + - [ ] resize(new_capacity) // private function + - capacity ရောက်သောအခါ၊ double size သို့ resize လုပ်သည် + - item တစ်ခု pop လုပ်သောအခါ၊ size သည် capacity ၏ 1/4 ဖြစ်ပါက၊ half သို့ resize လုပ်သည် + - [ ] အချိန် + - O(1) to add/remove at end (allocations အတွက် amortized for more space)၊ index၊ သို့မဟုတ် update + - O(n) to insert/remove elsewhere + - [ ] နေရာ + - memory တွင် ဆက်တိုက်ဖြစ်သောကြောင့်၊ အနီးကပ်မှုက performance ကို ကူညီသည် + - လိုအပ်သော နေရာ = (array capacity, which is >= n) * size of item, သို့သော် 2n ဖြစ်သောအခါမျှ၊ still O(n) + +- ### Linked Lists + - [ ] ဖော်ပြခြင်း: + - [ ] [Linked Lists CS50 Harvard University](https://www.youtube.com/watch?v=2T-A_GFuoTo&t=650s) - ဤသည်သာ intuition ကို တည်ဆောက်သည်။ + - [ ] [Singly Linked Lists (video)](https://www.coursera.org/lecture/data-structures/singly-linked-lists-kHhgK) + - [ ] [CS 61B - Linked Lists 1 (video)](https://archive.org/details/ucberkeley_webcast_htzJdKoEmO0) + - [ ] [CS 61B - Linked Lists 2 (video)](https://archive.org/details/ucberkeley_webcast_-c4I3gFYe3w) + - [ ] [[Review] Linked lists in 4 minutes (video)](https://youtu.be/F8AbOfQwl1c) + - [ ] [C Code (video)](https://www.youtube.com/watch?v=QN6FPiD0Gzo) + - ဗီဒီယို တစ်ခုလုံး မဟုတ်ဘဲ Node struct နှင့် memory allocation အကြောင်း အပိုင်းများသာ + - [ ] Linked List vs Arrays: + - [Core Linked Lists Vs Arrays (video)](https://www.coursera.org/lecture/data-structures-optimizing-performance/core-linked-lists-vs-arrays-rjBs9) + - [In The Real World Linked Lists Vs Arrays (video)](https://www.coursera.org/lecture/data-structures-optimizing-performance/in-the-real-world-lists-vs-arrays-QUaUd) + - [ ] [Why you should avoid linked lists (video)](https://www.youtube.com/watch?v=YQs6IC-vgmo) + - [ ] Gotcha: သင့်အတွက် pointer to pointer အသိပညာ လိုအပ်သည်: + (သင်သည် function တစ်ခုသို့ pointer တစ်ခုကို ပေးပို့သောအခါ ထို pointer ညွှန်ပြသည့် လိပ်စာကို ပြောင်းလဲနိုင်သောအခါ) + ဤစာမျက်နှာသည် ptr to ptr ကို နားလည်ရန်အတွက်သာ ဖြစ်သည်။ ကျွန်တော်သည် ဤ list traversal style ကို အကြံမပြုပါ။ Readability နှင့် maintainability သည် cleverness ကြောင့် ထိခိုက်နိုင်သည်။ + - [Pointers to Pointers](https://www.eskimo.com/~scs/cclass/int/sx8.html) + - [ ] Implement လုပ်ပါ (ကျွန်တော်သည် tail pointer နှင့်အတူ & မပါဘဲ လုပ်ခဲ့သည်): + - [ ] size() - list ထဲရှိ data elements အရေအတွက်ကို return လုပ်သည် + - [ ] empty() - bool returns true if empty + - [ ] value_at(index) - nth item ၏ value ကို return လုပ်သည် (ပထမအတွက် 0 မှ စတင်သည်) + - [ ] push_front(value) - list ၏ ရှေ့ပိုင်းတွင် item တစ်ခု ထည့်သည် + - [ ] pop_front() - ရှေ့ပိုင်း item ကို ဖယ်ရှားပြီး ၎င်း၏ value ကို return လုပ်သည် + - [ ] push_back(value) - အဆုံးတွင် item တစ်ခု ထည့်သည် + - [ ] pop_back() - အဆုံး item ကို ဖယ်ရှားပြီး ၎င်း၏ value ကို return လုပ်သည် + - [ ] front() - ရှေ့ပိုင်း item ၏ value ကို ရယူသည် + - [ ] back() - အဆုံး item ၏ value ကို ရယူသည် + - [ ] insert(index, value) - index တွင် value ကို ထည့်သည်၊ ထိုသို့ဖြင့် ထို index တွင် လက်ရှိ item သည် index တွင်ရှိသော item အသစ်မှ ညွှန်ပြခံရသည် + - [ ] erase(index) - ပေးထားသော index တွင် node ကို ဖယ်ရှားသည် + - [ ] value_n_from_end(n) - list ၏ အဆုံးမှ nth position တွင်ရှိသော node ၏ value ကို return လုပ်သည် + - [ ] reverse() - list ကို reverse လုပ်သည် + - [ ] remove_value(value) - ဤ value ရှိသော list ထဲရှိ ပထမ item ကို ဖယ်ရှားသည် + - [ ] Doubly-linked List + - [Description (video)](https://www.coursera.org/lecture/data-structures/doubly-linked-lists-jpGKD) + - Implement လုပ်ရန် မလိုအပ်ပါ + +- ### Stack + - [ ] [Stacks (video)](https://www.coursera.org/lecture/data-structures/stacks-UdKzQ) + - [ ] [[Review] Stacks in 3 minutes (video)](https://youtu.be/KcT3aVgrrpU) + - [ ] Implement မလုပ်မည်ပါ။ Array ဖြင့် implementing လုပ်ခြင်းသည် trivial ဖြစ်သည် + +- ### Queue + - [ ] [Queue (video)](https://www.coursera.org/lecture/data-structures/queues-EShpq) + - [ ] [Circular buffer/FIFO](https://en.wikipedia.org/wiki/Circular_buffer) + - [ ] [[Review] Queues in 3 minutes (video)](https://youtu.be/D6gu-_tmEpQ) + - [ ] Linked-list ကို အသုံးပြုပြီး implement လုပ်ပါ၊ tail pointer နှင့်အတူ: + - enqueue(value) - tail တွင် position တစ်ခုတွင် value ကို ထည့်သည် + - dequeue() - value ကို return လုပ်ပြီး အနည်းဆုံး မကြာသေးမီက ထည့်ခဲ့သော element (front) ကို ဖယ်ရှားသည် + - empty() + - [ ] Fixed-sized array ကို အသုံးပြုပြီး implement လုပ်ပါ: + - enqueue(value) - available storage ၏ အဆုံးတွင် item ကို ထည့်သည် + - dequeue() - value ကို return လုပ်ပြီး အနည်းဆုံး မကြာသေးမီက ထည့်ခဲ့သော element ကို ဖယ်ရှားသည် + - empty() + - full() + - [ ] ကုန်ကျစရိတ်: + - linked list ကို အသုံးပြုသော မကောင်းသော implementation ၎င်းတွင် သင်သည် head တွင် enqueue လုပ်ပြီး tail တွင် dequeue လုပ်မည်ဆိုပါက O(n) ဖြစ်မည် + အကြောင်းမှာ သင့်အတွက် next to last element လိုအပ်မည်ဖြစ်ပြီး dequeue တစ်ခုချင်းစီ၏ full traversal ကို ဖြစ်စေမည် + - enqueue: O(1) (amortized, linked list and array [probing]) + - dequeue: O(1) (linked list and array) + - empty: O(1) (linked list and array) + +- ### Hash table + - [ ] ဗီဒီယိုများ: + - [ ] [Hashing with Chaining (video)](https://www.youtube.com/watch?v=0M_kIqhwbFo&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=8) + - [ ] [Table Doubling, Karp-Rabin (video)](https://www.youtube.com/watch?v=BRO7mVIFt08&index=9&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) + - [ ] [Open Addressing, Cryptographic Hashing (video)](https://www.youtube.com/watch?v=rvdJDijO2Ro&index=10&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) + - [ ] [PyCon 2010: The Mighty Dictionary (video)](https://www.youtube.com/watch?v=C4Kc8xzcA68) + - [ ] [PyCon 2017: The Dictionary Even Mightier (video)](https://www.youtube.com/watch?v=66P5FMkWoVU) + - [ ] [(Advanced) Randomization: Universal & Perfect Hashing (video)](https://www.youtube.com/watch?v=z0lJ2k0sl1g&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=11) + - [ ] [(Advanced) Perfect hashing (video)](https://www.youtube.com/watch?v=N0COwN14gt0&list=PL2B4EEwhKD-NbwZ4ezj7gyc_3yNrojKM9&index=4) + - [ ] [[Review] Hash tables in 4 minutes (video)](https://youtu.be/knV86FlSXJ8) + + - [ ] Online Courses: + - [ ] [Core Hash Tables (video)](https://www.coursera.org/lecture/data-structures-optimizing-performance/core-hash-tables-m7UuP) + - [ ] [Data Structures (video)](https://www.coursera.org/learn/data-structures/home/week/4) + - [ ] [Phone Book Problem (video)](https://www.coursera.org/lecture/data-structures/phone-book-problem-NYZZP) + - [ ] distributed hash tables: + - [Instant Uploads And Storage Optimization In Dropbox (video)](https://www.coursera.org/lecture/data-structures/instant-uploads-and-storage-optimization-in-dropbox-DvaIb) + - [Distributed Hash Tables (video)](https://www.coursera.org/lecture/data-structures/distributed-hash-tables-tvH8H) + + - [ ] Linear probing ကို အသုံးပြုပြီး array ဖြင့် implement လုပ်ပါ + - hash(k, m) - m သည် hash table ၏ size ဖြစ်သည် + - add(key, value) - key ရှိနေပြီးပါက value ကို update လုပ်သည် + - exists(key) + - get(key) + - remove(key) + +**[⬆ မာတිကာသို့ ပြန်သွားပါ](#မာတိကာ)** + +## နောက်ထပ် အသိပညာ + +- ### Binary search + - [ ] [Binary Search (video)](https://www.youtube.com/watch?v=D5SrAga1pno) + - [ ] [Binary Search (video)](https://www.khanacademy.org/computing/computer-science/algorithms/binary-search/a/binary-search) + - [ ] [အသေးစိတ်](https://www.topcoder.com/thrive/articles/Binary%20Search) + - [ ] [blueprint](https://leetcode.com/discuss/general-discussion/786126/python-powerful-ultimate-binary-search-template-solved-many-problems) + - [ ] [[Review] Binary search in 4 minutes (video)](https://youtu.be/fDKIpRe8GW4) + - [ ] Implement လုပ်ပါ: + - binary search (sorted array of integers ပေါ်တွင်) + - binary search using recursion + +- ### Bitwise operations + - [ ] [Bits cheat sheet](https://github.com/jwasham/coding-interview-university/blob/main/extras/cheat%20sheets/bits-cheat-sheet.pdf) + - သင်သည် powers of 2 များစွာကို (2^1 မှ 2^16 နှင့် 2^32) သိရမည်ဖြစ်သည် + - [ ] &, |, ^, ~, >>, << နှင့်အတူ bits များကို manipulating လုပ်ခြင်း၏ အလွန်ကောင်းမွန်သော နားလည်မှု ရယူပါ + - [ ] [စကားလုံးများ](https://en.wikipedia.org/wiki/Word_(computer_architecture)) + - [ ] ကောင်းမွန်သော နိဒါန်း: + [Bit Manipulation (video)](https://www.youtube.com/watch?v=7jkIUgLC29I) + - [ ] [C Programming Tutorial 2-10: Bitwise Operators (video)](https://www.youtube.com/watch?v=d0AwjSpNXR0) + - [ ] [Bit Manipulation](https://en.wikipedia.org/wiki/Bit_manipulation) + - [ ] [Bitwise Operation](https://en.wikipedia.org/wiki/Bitwise_operation) + - [ ] [Bithacks](https://graphics.stanford.edu/~seander/bithacks.html) + - [ ] [The Bit Twiddler](https://bits.stephan-brumme.com/) + - [ ] [The Bit Twiddler Interactive](https://bits.stephan-brumme.com/interactive.html) + - [ ] [Bit Hacks (video)](https://www.youtube.com/watch?v=ZusiKXcz_ac) + - [ ] [Practice Operations](https://pconrad.github.io/old_pconrad_cs16/topics/bitOps/) + - [ ] 2s နှင့် 1s complement + - [Binary: Plusses & Minuses (Why We Use Two's Complement) (video)](https://www.youtube.com/watch?v=lKTsv6iVxV4) + - [1s Complement](https://en.wikipedia.org/wiki/Ones%27_complement) + - [2s Complement](https://en.wikipedia.org/wiki/Two%27s_complement) + - [ ] set bits များကို ရေတွက်ပါ + - [4 ways to count bits in a byte (video)](https://youtu.be/Hzuzo9NJrlc) + - [Count Bits](https://graphics.stanford.edu/~seander/bithacks.html#CountBitsSetKernighan) + - [How To Count The Number Of Set Bits In a 32 Bit Integer](http://stackoverflow.com/questions/109023/how-to-count-the-number-of-set-bits-in-a-32-bit-integer) + - [ ] Swap values: + - [Swap](https://bits.stephan-brumme.com/swap.html) + - [ ] Absolute value: + - [Absolute Integer](https://bits.stephan-brumme.com/absInteger.html) + +**[⬆ မာတိကာသို့ ပြန်သွားပါ](#မာတိကာ)** + +## Trees + +- ### Trees - နိဒါန်း + - [ ] [Intro to Trees (video)](https://www.coursera.org/lecture/data-structures/trees-95qda) + - [ ] [Tree Traversal (video)](https://www.coursera.org/lecture/data-structures/tree-traversal-fr51b) + - [ ] [BFS(breadth-first search) and DFS(depth-first search) (video)](https://www.youtube.com/watch?v=uWL6FJhq5fM) + - BFS မှတ်စုများ: + - level order (BFS, queue အသုံးပြုခြင်း) + - time complexity: O(n) + - space complexity: best: O(1), worst: O(n/2)=O(n) + - DFS မှတ်စုများ: + - time complexity: O(n) + - space complexity: + best: O(log n) - avg. height of tree + worst: O(n) + - inorder (DFS: left, self, right) + - postorder (DFS: left, right, self) + - preorder (DFS: self, left, right) + - [ ] [[Review] Breadth-first search in 4 minutes (video)](https://youtu.be/HZ5YTanv5QE) + - [ ] [[Review] Depth-first search in 4 minutes (video)](https://youtu.be/Urx87-NMm6c) + - [ ] [[Review] Tree Traversal (playlist) in 11 minutes (video)](https://www.youtube.com/playlist?list=PL9xmBV_5YoZO1JC2RgEi04nLy6D-rKk6b) + +- ### Binary search trees: BSTs + - [ ] [Binary Search Tree Review (video)](https://www.youtube.com/watch?v=x6At0nzX92o&index=1&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6) + - [ ] [Introduction (video)](https://www.coursera.org/learn/data-structures/lecture/E7cXP/introduction) + - [ ] [MIT (video)](https://www.youtube.com/watch?v=76dhtgZt38A&ab_channel=MITOpenCourseWare) + - C/C++: + - [ ] [Binary search tree - Implementation in C/C++ (video)](https://www.youtube.com/watch?v=COZK7NATh4k&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P&index=28) + - [ ] [BST implementation - memory allocation in stack and heap (video)](https://www.youtube.com/watch?v=hWokyBoo0aI&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P&index=29) + - [ ] [Find min and max element in a binary search tree (video)](https://www.youtube.com/watch?v=Ut90klNN264&index=30&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P) + - [ ] [Find the height of a binary tree (video)](https://www.youtube.com/watch?v=_pnqMz5nrRs&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P&index=31) + - [ ] [Binary tree traversal - breadth-first and depth-first strategies (video)](https://www.youtube.com/watch?v=9RHO6jU--GU&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P&index=32) + - [ ] [Binary tree: Level Order Traversal (video)](https://www.youtube.com/watch?v=86g8jAQug04&index=33&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P) + - [ ] [Binary tree traversal: Preorder, Inorder, Postorder (video)](https://www.youtube.com/watch?v=gm8DUJJhmY4&index=34&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P) + - [ ] [Check if a binary tree is a binary search tree or not (video)](https://www.youtube.com/watch?v=yEwSGhSsT0U&index=35&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P) + - [ ] [Delete a node from Binary Search Tree (video)](https://www.youtube.com/watch?v=gcULXE7ViZw&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P&index=36) + - [ ] [Inorder Successor in a binary search tree (video)](https://www.youtube.com/watch?v=5cPbNCrdotA&index=37&list=PL2_aWCzGMAwI3W_JlcBbtYTwiQSsOTa6P) + - [ ] Implement လုပ်ပါ: + - [ ] [insert // tree တွင် value ထည့်ခြင်း](https://leetcode.com/problems/insert-into-a-binary-search-tree/submissions/987660183/) + - [ ] get_node_count // သိမ်းဆည်းထားသော values များ၏ အရေအတွက်ကို ရယူပါ + - [ ] print_values // tree ထဲရှိ values များကို min မှ max အထိ ပုံနှိပ်သည် + - [ ] delete_tree + - [ ] is_in_tree // ပေးထားသော value သည် tree ထဲတွင် ရှိပါက true ကို return လုပ်သည် + - [ ] [get_height // nodes ထဲရှိ height ကို return လုပ်သည် (single node ၏ height သည် 1)](https://www.geeksforgeeks.org/find-the-maximum-depth-or-height-of-a-tree/) + - [ ] get_min // tree ထဲတွင် သိမ်းဆည်းထားသော အနည်းဆုံး value ကို return လုပ်သည် + - [ ] get_max // tree ထဲတွင် သိမ်းဆည်းထားသော အများဆုံး value ကို return လုပ်သည် + - [ ] [is_binary_search_tree](https://leetcode.com/problems/validate-binary-search-tree/) + - [ ] delete_value + - [ ] get_successor // ပေးထားသော value နောက်ပိုင်း tree ထဲရှိ နောက်ထပ် အမြင့်ဆုံး value ကို return လုပ်သည်၊ မရှိပါက -1 + +- ### Heap / Priority Queue / Binary Heap + - tree အဖြစ် visualized လုပ်သော်လည်း ပုံမှန်အားဖြင့် storage (array, linked list) တွင် linear ဖြစ်သည် + - [ ] [Heap](https://en.wikipedia.org/wiki/Heap_(data_structure)) + - [ ] [Introduction (video)](https://www.coursera.org/lecture/data-structures/introduction-2OpTs) + - [ ] [Binary Trees (video)](https://www.coursera.org/learn/data-structures/lecture/GRV2q/binary-trees) + - [ ] [Tree Height Remark (video)](https://www.coursera.org/learn/data-structures/supplement/S5xxz/tree-height-remark) + - [ ] [Basic Operations (video)](https://www.coursera.org/learn/data-structures/lecture/0g1dl/basic-operations) + - [ ] [Complete Binary Trees (video)](https://www.coursera.org/learn/data-structures/lecture/gl5Ni/complete-binary-trees) + - [ ] [Pseudocode (video)](https://www.coursera.org/learn/data-structures/lecture/HxQo9/pseudocode) + - [ ] [Heap Sort - jumps to start (video)](https://youtu.be/odNJmw5TOEE?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=3291) + - [ ] [Heap Sort (video)](https://www.coursera.org/lecture/data-structures/heap-sort-hSzMO) + - [ ] [Building a heap (video)](https://www.coursera.org/lecture/data-structures/building-a-heap-dwrOS) + - [ ] [MIT 6.006 Introduction to Algorithms: Binary Heaps](https://www.youtube.com/watch?v=Xnpo1atN-Iw&list=PLUl4u3cNGP63EdVPNLG3ToM6LaEUuStEY&index=12) + - [ ] [CS 61B Lecture 24: Priority Queues (video)](https://archive.org/details/ucberkeley_webcast_yIUFT6AKBGE) + - [ ] [Linear Time BuildHeap (max-heap)](https://www.youtube.com/watch?v=MiyLo8adrWw) + - [ ] [[Review] Heap (playlist) in 13 minutes (video)](https://www.youtube.com/playlist?list=PL9xmBV_5YoZNsyqgPW-DNwUeT8F8uhWc6) + - [ ] max-heap တစ်ခု implement လုပ်ပါ: + - [ ] insert + - [ ] sift_up - insert အတွက် လိုအပ်သည် + - [ ] get_max - max item ကို ဖယ်ရှားမခြင်းဘဲ return လုပ်သည် + - [ ] get_size() - သိမ်းဆည်းထားသော elements အရေအတွက်ကို return လုပ်သည် + - [ ] is_empty() - heap တွင် elements မရှိပါက true ကို return လုပ်သည် + - [ ] extract_max - max item ကို return လုပ်ပြီး ဖယ်ရှားသည် + - [ ] sift_down - extract_max အတွက် လိုအပ်သည် + - [ ] remove(x) - index x တွင် item ကို ဖယ်ရှားသည် + - [ ] heapify - elements များ၏ array မှ heap တစ်ခု ဖန်တီးသည်၊ heap_sort အတွက် လိုအပ်သည် + - [ ] heap_sort() - max heap သို့မဟုတ် min heap ကို အသုံးပြုပြီး unsorted array ကို နေရာတွင်ပင် sorted array အဖြစ် ပြောင်းလဲသည် + +**[⬆ မာတိကာသို့ ပြန်သွားပါ](#မာတိကာ)** + +## Sorting + +- [ ] မှတ်စုများ: + - sorts များကို implement လုပ်ပြီး တစ်ခုချင်းစီ၏ best case/worst case, average complexity ကို သိထားပါ: + - bubble sort သုံးမကြပါ - ၎င်းသည် ကြောက်မက်ဖွယ်ဖြစ်သည် - O(n^2), n <= 16 မှလွဲ၍ + - [ ] Stability in sorting algorithms ("Is Quicksort stable?") + - [Sorting Algorithm Stability](https://en.wikipedia.org/wiki/Sorting_algorithm#Stability) + - [Stability In Sorting Algorithms](http://stackoverflow.com/questions/1517793/stability-in-sorting-algorithms) + - [Stability In Sorting Algorithms](http://www.geeksforgeeks.org/stability-in-sorting-algorithms/) + - [Sorting Algorithms - Stability](http://homepages.math.uic.edu/~leon/cs-mcs401-s08/handouts/stability.pdf) + - [ ] မည်သည့် algorithms များကို linked lists တွင် အသုံးပြုနိုင်သနည်း? မည်သည့်ဟာများကို arrays တွင်? မည်သည့်ဟာများကို နှစ်ခုလုံးတွင်? + - ကျွန်တော်သည် linked list ကို sorting လုပ်ရန် အကြံမပြုပါ၊ သို့သော် merge sort သည် လုပ်နိုင်သည်။ + - [Merge Sort For Linked List](http://www.geeksforgeeks.org/merge-sort-for-linked-list/) + +- heapsort အတွက်၊ အပေါ်တွင်ရှိသော Heap data structure ကို ကြည့်ပါ။ Heap sort သည် အလွန်ကောင်းသော်လည်း stable မဟုတ်ပါ + +- [ ] [Sedgewick - Mergesort (5 videos)](https://www.coursera.org/learn/algorithms-part1/home/week/3) + - [ ] [1. Mergesort](https://www.coursera.org/lecture/algorithms-part1/mergesort-ARWDq) + - [ ] [2. Bottom-up Mergesort](https://www.coursera.org/learn/algorithms-part1/lecture/PWNEl/bottom-up-mergesort) + - [ ] [3. Sorting Complexity](https://www.coursera.org/lecture/algorithms-part1/sorting-complexity-xAltF) + - [ ] [4. Comparators](https://www.coursera.org/lecture/algorithms-part1/comparators-9FYhS) + - [ ] [5. Stability](https://www.coursera.org/learn/algorithms-part1/lecture/pvvLZ/stability) + +- [ ] [Sedgewick - Quicksort (4 videos)](https://www.coursera.org/learn/algorithms-part1/home/week/3) + - [ ] [1. Quicksort](https://www.coursera.org/lecture/algorithms-part1/quicksort-vjvnC) + - [ ] [2. Selection](https://www.coursera.org/lecture/algorithms-part1/selection-UQxFT) + - [ ] [3. Duplicate Keys](https://www.coursera.org/lecture/algorithms-part1/duplicate-keys-XvjPd) + - [ ] [4. System Sorts](https://www.coursera.org/lecture/algorithms-part1/system-sorts-QBNZ7) + +- [ ] UC Berkeley: + - [ ] [CS 61B Lecture 29: Sorting I (video)](https://archive.org/details/ucberkeley_webcast_EiUvYS2DT6I) + - [ ] [CS 61B Lecture 30: Sorting II (video)](https://archive.org/details/ucberkeley_webcast_2hTY3t80Qsk) + - [ ] [CS 61B Lecture 32: Sorting III (video)](https://archive.org/details/ucberkeley_webcast_Y6LOLpxg6Dc) + - [ ] [CS 61B Lecture 33: Sorting V (video)](https://archive.org/details/ucberkeley_webcast_qNMQ4ly43p4) + - [ ] [CS 61B 2014-04-21: Radix Sort(video)](https://archive.org/details/ucberkeley_webcast_pvbBMd-3NoI) + +- [ ] [Bubble Sort (video)](https://www.youtube.com/watch?v=P00xJgWzz2c&index=1&list=PL89B61F78B552C1AB) +- [ ] [Analyzing Bubble Sort (video)](https://www.youtube.com/watch?v=ni_zk257Nqo&index=7&list=PL89B61F78B552C1AB) +- [ ] [Insertion Sort, Merge Sort (video)](https://www.youtube.com/watch?v=Kg4bqzAqRBM&index=3&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) +- [ ] [Insertion Sort (video)](https://www.youtube.com/watch?v=c4BRHC7kTaQ&index=2&list=PL89B61F78B552C1AB) +- [ ] [Merge Sort (video)](https://www.youtube.com/watch?v=GCae1WNvnZM&index=3&list=PL89B61F78B552C1AB) +- [ ] [Quicksort (video)](https://www.youtube.com/watch?v=y_G9BkAm6B8&index=4&list=PL89B61F78B552C1AB) +- [ ] [Selection Sort (video)](https://www.youtube.com/watch?v=6nDMgr0-Yyo&index=8&list=PL89B61F78B552C1AB) + +- [ ] Merge sort code: + - [ ] [Using output array (C)](http://www.cs.yale.edu/homes/aspnes/classes/223/examples/sorting/mergesort.c) + - [ ] [Using output array (Python)](https://github.com/jwasham/practice-python/blob/master/merge_sort/merge_sort.py) + - [ ] [In-place (C++)](https://github.com/jwasham/practice-cpp/blob/master/merge_sort/merge_sort.cc) +- [ ] Quick sort code: + - [ ] [Implementation (C)](http://www.cs.yale.edu/homes/aspnes/classes/223/examples/randomization/quick.c) + - [ ] [Implementation (C)](https://github.com/jwasham/practice-c/blob/master/quick_sort/quick_sort.c) + - [ ] [Implementation (Python)](https://github.com/jwasham/practice-python/blob/master/quick_sort/quick_sort.py) + +- [ ] [[Review] Sorting (playlist) in 18 minutes](https://www.youtube.com/playlist?list=PL9xmBV_5YoZOZSbGAXAPIq1BeUf4j20pl) + - [ ] [Quick sort in 4 minutes (video)](https://youtu.be/Hoixgm4-P4M) + - [ ] [Heap sort in 4 minutes (video)](https://youtu.be/2DmK_H7IdTo) + - [ ] [Merge sort in 3 minutes (video)](https://youtu.be/4VqmGXwpLqc) + - [ ] [Bubble sort in 2 minutes (video)](https://youtu.be/xli_FI7CuzA) + - [ ] [Selection sort in 3 minutes (video)](https://youtu.be/g-PGLbMth_g) + - [ ] [Insertion sort in 2 minutes (video)](https://youtu.be/JU767SDMDvA) + +- [ ] Implement လုပ်ပါ: + - [ ] Mergesort: O(n log n) average နှင့် worst case + - [ ] Quicksort O(n log n) average case + - Selection sort နှင့် insertion sort နှစ်ခုလုံးသည် O(n^2) average နှင့် worst-case ဖြစ်သည် + - heapsort အတွက်၊ အပေါ်တွင်ရှိသော Heap data structure ကို ကြည့်ပါ + +- [ ] လိုအပ်ခြင်း မရှိသော်လည်း ကျွန်တော်သည် ၎င်းတို့ကို အကြံပြုပါသည်: + - [ ] [Sedgewick - Radix Sorts (6 videos)](https://www.coursera.org/learn/algorithms-part2/home/week/3) + - [ ] [1. Strings in Java](https://www.coursera.org/learn/algorithms-part2/lecture/vGHvb/strings-in-java) + - [ ] [2. Key Indexed Counting](https://www.coursera.org/lecture/algorithms-part2/key-indexed-counting-2pi1Z) + - [ ] [3. Least Significant Digit First String Radix Sort](https://www.coursera.org/learn/algorithms-part2/lecture/c1U7L/lsd-radix-sort) + - [ ] [4. Most Significant Digit First String Radix Sort](https://www.coursera.org/learn/algorithms-part2/lecture/gFxwG/msd-radix-sort) + - [ ] [5. 3 Way Radix Quicksort](https://www.coursera.org/lecture/algorithms-part2/3-way-radix-quicksort-crkd5) + - [ ] [6. Suffix Arrays](https://www.coursera.org/learn/algorithms-part2/lecture/TH18W/suffix-arrays) + - [ ] [Radix Sort](http://www.cs.yale.edu/homes/aspnes/classes/223/notes.html#radixSort) + - [ ] [Radix Sort (video)](https://www.youtube.com/watch?v=xhr26ia4k38) + - [ ] [Radix Sort, Counting Sort (linear time given constraints) (video)](https://www.youtube.com/watch?v=Nz1KZXbghj8&index=7&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) + - [ ] [Randomization: Matrix Multiply, Quicksort, Freivalds' algorithm (video)](https://www.youtube.com/watch?v=cNB2lADK3_s&index=8&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp) + - [ ] [Sorting in Linear Time (video)](https://www.youtube.com/watch?v=pOKy3RZbSws&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf&index=14) + +အနှစ်ချုပ်အနေဖြင့်၊ ဤတွင် [15 sorting algorithms](https://www.youtube.com/watch?v=kPRA0W1kECg) ၏ visual representation ရှိပါသည်။ +အကယ်၍ သင့်အတွက် ဤအကြောင်းအရာ၌ နောက်ထပ် အသေးစိတ် လိုအပ်ပါက၊ [Additional Detail on Some Subjects](#အချို့-အကြောင်းအရာများအတွက်-နောက်ထပ်-အသေးစိတ်) တွင် "Sorting" အပိုင်းကို ကြည့်ပါ + +**[⬆ မာတိကာသို့ ပြန်သွားပါ](#မာတိကာ)** + +## Graphs + +Graphs များကို computer science တွင် ပြဿနာများစွာကို ကိုယ်စားပြုရန်အတွက် အသုံးပြုနိုင်သောကြောင့်၊ ဤအပိုင်းသည် trees နှင့် sorting ကဲ့သို့ပင် ရှည်လျားပါသည်။ + +- မှတ်စုများ: + - memory တွင် graph ကို ကိုယ်စားပြုရန် အခြေခံ နည်းလမ်း ၄ ခု ရှိပါသည်: + - objects နှင့် pointers + - adjacency matrix + - adjacency list + - adjacency map + - representation တစ်ခုချင်းစီနှင့် ၎င်း၏ pros & cons များကို ရင်းနှီးအောင် လုပ်ပါ + - BFS နှင့် DFS - ၎င်းတို့၏ computational complexity၊ trade-offs၊ နှင့် စစ်မှန်သော ကုဒ်ဖြင့် ၎င်းတို့ကို မည်သို့ implement လုပ်ရမည်ကို သိထားပါ + - မေးခွန်းတစ်ခု မေးသောအခါ၊ ဦးစွာ graph-based solution ကို ရှာပါ၊ ထိုနောက် မရှိပါက အခြားသို့ ဆက်သွားပါ + +- [ ] MIT(videos): + - [ ] [Breadth-First Search](https://www.youtube.com/watch?v=oFVYVzlvk9c&t=14s&ab_channel=MITOpenCourseWare) + - [ ] [Depth-First Search](https://www.youtube.com/watch?v=IBfWDYSffUU&t=32s&ab_channel=MITOpenCourseWare) + +- [ ] Skiena Lectures - အလွန်ကောင်းမွန်သော နိဒါန်း: + - [ ] [CSE373 2020 - Lecture 10 - Graph Data Structures (video)](https://www.youtube.com/watch?v=Sjk0xqWWPCc&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=10) + - [ ] [CSE373 2020 - Lecture 11 - Graph Traversal (video)](https://www.youtube.com/watch?v=ZTwjXj81NVY&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=11) + - [ ] [CSE373 2020 - Lecture 12 - Depth First Search (video)](https://www.youtube.com/watch?v=KyordYB3BOs&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=12) + - [ ] [CSE373 2020 - Lecture 13 - Minimum Spanning Trees (video)](https://www.youtube.com/watch?v=oolm2VnJUKw&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=13) + - [ ] [CSE373 2020 - Lecture 14 - Minimum Spanning Trees (con't) (video)](https://www.youtube.com/watch?v=RktgPx0MarY&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=14) + - [ ] [CSE373 2020 - Lecture 15 - Graph Algorithms (con't 2) (video)](https://www.youtube.com/watch?v=MUe5DXRhyAo&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=15) + +- [ ] Graphs (review နှင့် နောက်ထပ်များ): + + - [ ] [6.006 Single-Source Shortest Paths Problem (video)](https://www.youtube.com/watch?v=Aa2sqUhIn-E&index=15&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) + - [ ] [6.006 Dijkstra (video)](https://www.youtube.com/watch?v=NSHizBK9JD8&t=1731s&ab_channel=MITOpenCourseWare) + - [ ] [6.006 Bellman-Ford (video)](https://www.youtube.com/watch?v=f9cVS_URPc0&ab_channel=MITOpenCourseWare) + - [ ] [6.006 Speeding Up Dijkstra (video)](https://www.youtube.com/watch?v=CHvQ3q_gJ7E&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=18) + - [ ] [Aduni: Graph Algorithms I - Topological Sorting, Minimum Spanning Trees, Prim's Algorithm - Lecture 6 (video)]( https://www.youtube.com/watch?v=i_AQT_XfvD8&index=6&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm) + - [ ] [Aduni: Graph Algorithms II - DFS, BFS, Kruskal's Algorithm, Union Find Data Structure - Lecture 7 (video)]( https://www.youtube.com/watch?v=ufj5_bppBsA&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=7) + - [ ] [Aduni: Graph Algorithms III: Shortest Path - Lecture 8 (video)](https://www.youtube.com/watch?v=DiedsPsMKXc&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=8) + - [ ] [Aduni: Graph Alg. IV: Intro to geometric algorithms - Lecture 9 (video)](https://www.youtube.com/watch?v=XIAQRlNkJAw&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=9) + - [ ] [CS 61B 2014: Weighted graphs (video)](https://archive.org/details/ucberkeley_webcast_zFbq8vOZ_0k) + - [ ] [Greedy Algorithms: Minimum Spanning Tree (video)](https://www.youtube.com/watch?v=tKwnms5iRBU&index=16&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp) + - [ ] [Strongly Connected Components Kosaraju's Algorithm Graph Algorithm (video)](https://www.youtube.com/watch?v=RpgcYiky7uw) + - [ ] [[Review] Shortest Path Algorithms (playlist) in 16 minutes (video)](https://www.youtube.com/playlist?list=PL9xmBV_5YoZO-Y-H3xIC9DGSfVYJng9Yw) + - [ ] [[Review] Minimum Spanning Trees (playlist) in 4 minutes (video)](https://www.youtube.com/playlist?list=PL9xmBV_5YoZObEi3Hf6lmyW-CBfs7nkOV) + +- Full Coursera Course: + - [ ] [Algorithms on Graphs (video)](https://www.coursera.org/learn/algorithms-on-graphs/home/welcome) + +- ကျွန်တော်သည် implement လုပ်မည်: + - [ ] DFS with adjacency list (recursive) + - [ ] DFS with adjacency list (iterative with stack) + - [ ] DFS with adjacency matrix (recursive) + - [ ] DFS with adjacency matrix (iterative with stack) + - [ ] BFS with adjacency list + - [ ] BFS with adjacency matrix + - [ ] single-source shortest path (Dijkstra) + - [ ] minimum spanning tree + - DFS-based algorithms (အပေါ်တွင်ရှိသော Aduni videos များကို ကြည့်ပါ): + - [ ] check for a cycle (topological sort အတွက် လိုအပ်သည်၊ အကြောင်းမှာ ကျွန်တော်တို့သည် စတင်ခြင်းမပြုမီ cycle ကို စစ်ဆေးမည်) + - [ ] topological sort + - [ ] count connected components in a graph + - [ ] list strongly connected components + - [ ] check for bipartite graph + +**[⬆ မာတိကာသို့ ပြန်သွားပါ](#မာတိကာ)** + +## နောက်ထပ် အသိပညာများ + +- ### Recursion + - [ ] Stanford lectures on recursion & backtracking: + - [ ] [Lecture 8 | Programming Abstractions (video)](https://www.youtube.com/watch?v=gl3emqCuueQ&list=PLFE6E58F856038C69&index=8) + - [ ] [Lecture 9 | Programming Abstractions (video)](https://www.youtube.com/watch?v=uFJhEPrbycQ&list=PLFE6E58F856038C69&index=9) + - [ ] [Lecture 10 | Programming Abstractions (video)](https://www.youtube.com/watch?v=NdF1QDTRkck&index=10&list=PLFE6E58F856038C69) + - [ ] [Lecture 11 | Programming Abstractions (video)](https://www.youtube.com/watch?v=p-gpaIGRCQI&list=PLFE6E58F856038C69&index=11) + - ၎င်းကို အသုံးပြုရန် သင့်လျော်သောအချိန် ဘယ်အချိန်နည်း? + - tail recursion ထက် မည်သို့ ပိုမိုကောင်းမွန်သနည်း? + - [ ] [What Is Tail Recursion Why Is It So Bad?](https://www.quora.com/What-is-tail-recursion-Why-is-it-so-bad) + - [ ] [Tail Recursion (video)](https://www.coursera.org/lecture/programming-languages/tail-recursion-YZic1) + - [ ] [5 Simple Steps for Solving Any Recursive Problem(video)](https://youtu.be/ngCos392W4w) + + Backtracking Blueprint: [Java](https://leetcode.com/problems/combination-sum/discuss/16502/A-general-approach-to-backtracking-questions-in-Java-(Subsets-Permutations-Combination-Sum-Palindrome-Partitioning)) + [Python](https://leetcode.com/problems/combination-sum/discuss/429538/General-Backtracking-questions-solutions-in-Python-for-reference-%3A) + +- ### Dynamic Programming + - သင်သည် သင်၏ အင်တာဗျူးတွင် dynamic programming ပြဿနာများ မတွေ့မြင်ရနိုင်သော်လည်း၊ ပြဿနာတစ်ခုကို dynamic programming အတွက် candidate အဖြစ် အသိအမှတ်ပြုနိုင်ခြင်းသည် တန်ဖိုးရှိပါသည်။ + - ဤအကြောင်းအရာသည် အတော်လေး ခက်ခဲနိုင်သည်၊ အကြောင်းမှာ DP soluble ပြဿနာ တစ်ခုချင်းစီကို recursion relation အဖြစ် သတ်မှတ်ရမည်ဖြစ်ပြီး ၎င်းကို တွေ့ရှိခြင်းသည် ခက်ခဲနိုင်သောကြောင့်ဖြစ်သည်။ + - ကျွန်တော်သည် ပတ်ဝန်းကျင်ပါ ပုံစံကို ခိုင်မာသော နားလည်မှု မရှိမချင်း DP ပြဿနာများ ဥပမာများစွာကို ကြည့်ရှုရန် အကြံပြုပါသည်။ + - [ ] ဗီဒီယိုများ: + - [ ] [Skiena: CSE373 2020 - Lecture 19 - Introduction to Dynamic Programming (video)](https://www.youtube.com/watch?v=wAA0AMfcJHQ&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=18) + - [ ] [Skiena: CSE373 2020 - Lecture 20 - Edit Distance (video)](https://www.youtube.com/watch?v=T3A4jlHlhtA&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=19) + - [ ] [Skiena: CSE373 2020 - Lecture 20 - Edit Distance (continued) (video)](https://www.youtube.com/watch?v=iPnPVcZmRbE&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=20) + - [ ] [Skiena: CSE373 2020 - Lecture 21 - Dynamic Programming (video)](https://www.youtube.com/watch?v=2xPE4Wq8coQ&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=21) + - [ ] [Skiena: CSE373 2020 - Lecture 22 - Dynamic Programming and Review (video)](https://www.youtube.com/watch?v=Yh3RzqQGsyI&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=22) + - [ ] [Simonson: Dynamic Programming 0 (starts at 59:18) (video)](https://youtu.be/J5aJEcOr6Eo?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=3558) + - [ ] [Simonson: Dynamic Programming I - Lecture 11 (video)](https://www.youtube.com/watch?v=0EzHjQ_SOeU&index=11&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm) + - [ ] [Simonson: Dynamic programming II - Lecture 12 (video)](https://www.youtube.com/watch?v=v1qiRwuJU7g&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=12) + - [ ] လုံးခြမ်း DP ပြဿနာများ စာရင်း (တစ်ခုချင်းစီမှာ တိုတောင်းသည်): + [Dynamic Programming (video)](https://www.youtube.com/playlist?list=PLrmLmBdmIlpsHaNTPP_jHHDx_os9ItYXr) + - [ ] Yale Lecture မှတ်စုများ: + - [ ] [Dynamic Programming](http://www.cs.yale.edu/homes/aspnes/classes/223/notes.html#dynamicProgramming) + - [ ] Coursera: + - [ ] [The RNA secondary structure problem (video)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/80RrW/the-rna-secondary-structure-problem) + - [ ] [A dynamic programming algorithm (video)](https://www.coursera.org/lecture/algorithmic-thinking-2/a-dynamic-programming-algorithm-PSonq) + - [ ] [Illustrating the DP algorithm (video)](https://www.coursera.org/lecture/algorithmic-thinking-2/illustrating-the-dp-algorithm-oUEK2) + - [ ] [Running time of the DP algorithm (video)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/nfK2r/running-time-of-the-dp-algorithm) + - [ ] [DP vs. recursive implementation (video)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/M999a/dp-vs-recursive-implementation) + - [ ] [Global pairwise sequence alignment (video)](https://www.coursera.org/lecture/algorithmic-thinking-2/global-pairwise-sequence-alignment-UZ7o6) + - [ ] [Local pairwise sequence alignment (video)](https://www.coursera.org/learn/algorithmic-thinking-2/lecture/WnNau/local-pairwise-sequence-alignment) + +- ### Design patterns + - [ ] [Quick UML review (video)](https://www.youtube.com/watch?v=3cmzqZzwNDM&list=PLGLfVvz_LVvQ5G-LdJ8RLqe-ndo7QITYc&index=3) + - [ ] ဤ patterns များကို လေ့လာပါ: + - [ ] strategy + - [ ] singleton + - [ ] adapter + - [ ] prototype + - [ ] decorator + - [ ] visitor + - [ ] factory, abstract factory + - [ ] facade + - [ ] observer + - [ ] proxy + - [ ] delegate + - [ ] command + - [ ] state + - [ ] memento + - [ ] iterator + - [ ] composite + - [ ] flyweight + - [ ] [Series of videos (27 videos)](https://www.youtube.com/playlist?list=PLF206E906175C7E07) + - [ ] [Book: Head First Design Patterns](https://www.amazon.com/Head-First-Design-Patterns-Freeman/dp/0596007124) + - ကျွန်တော်သည် canonical စာအုပ်မှာ "Design Patterns: Elements of Reusable Object-Oriented Software" ဟုတ်ကြောင်း သိသော်လည်း၊ Head First သည် OO အတွက် beginners များအတွက် အလွန်ကောင်းသည်။ + - [Handy reference: 101 Design Patterns & Tips for Developers](https://sourcemaking.com/design-patterns-and-tips) + +- ### Combinatorics (n choose k) & Probability + - [ ] [Math Skills: How to find Factorial, Permutation, and Combination (Choose) (video)](https://www.youtube.com/watch?v=8RRo6Ti9d0U) + - [ ] [Make School: Probability (video)](https://www.youtube.com/watch?v=sZkAAk9Wwa4) + - [ ] [Make School: More Probability and Markov Chains (video)](https://www.youtube.com/watch?v=dNaJg-mLobQ) + - [ ] Khan Academy: + - Course layout: + - [ ] [Basic Theoretical Probability](https://www.khanacademy.org/math/probability/probability-and-combinatorics-topic) + - ဗီဒီယိုများသာ - ၄၁ ခု (တစ်ခုချင်းစီမှာ ရိုးရှင်းပြီး တစ်ခုချင်းစီမှာ တိုတောင်းသည်): + - [ ] [Probability Explained (video)](https://www.youtube.com/watch?v=uzkc-qNVoOk&list=PLC58778F28211FA19) + +- ### NP, NP-Complete and Approximation Algorithms + - traveling salesman နှင့် knapsack problem ကဲ့သို့ NP-complete ပြဿနာများ၏ အကျော်အမောက်ဆုံး classes များအကြောင်း သိထားပြီး၊ + အင်တာဗျူးပြုလုပ်သူက ၎င်းတို့ကို အရောင်အသွေးမျိုးစုံဖြင့် မေးသောအခါ ၎င်းတို့ကို အသိအမှတ်ပြုနိုင်ရမည်ဖြစ်သည်။ + - NP-complete ဆိုသည့်အဓိပ္ပါယ်ကို သိထားပါ။ + - [ ] [Computational Complexity (video)](https://www.youtube.com/watch?v=moPtwq_cVH8&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=23) + - [ ] Simonson: + - [ ] [Greedy Algs. II & Intro to NP-Completeness (video)](https://youtu.be/qcGnJ47Smlo?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=2939) + - [ ] [NP Completeness II & Reductions (video)](https://www.youtube.com/watch?v=e0tGC6ZQdQE&index=16&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm) + - [ ] [NP Completeness III (Video)](https://www.youtube.com/watch?v=fCX1BGT3wjE&index=17&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm) + - [ ] [NP Completeness IV (video)](https://www.youtube.com/watch?v=NKLDp3Rch3M&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=18) + - [ ] Skiena: + - [ ] [CSE373 2020 - Lecture 23 - NP-Completeness (video)](https://www.youtube.com/watch?v=ItHp5laE1VE&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=23) + - [ ] [CSE373 2020 - Lecture 24 - Satisfiability (video)](https://www.youtube.com/watch?v=inaFJeCzGxU&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=24) + - [ ] [CSE373 2020 - Lecture 25 - More NP-Completeness (video)](https://www.youtube.com/watch?v=B-bhKxjZLlc&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=25) + - [ ] [CSE373 2020 - Lecture 26 - NP-Completeness Challenge (video)](https://www.youtube.com/watch?v=_EzetTkG_Cc&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=26) + - [ ] [Complexity: P, NP, NP-completeness, Reductions (video)](https://www.youtube.com/watch?v=eHZifpgyH_4&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=22) + - [ ] [Complexity: Approximation Algorithms (video)](https://www.youtube.com/watch?v=MEz1J9wY2iM&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=24) + - [ ] [Complexity: Fixed-Parameter Algorithms (video)](https://www.youtube.com/watch?v=4q-jmGrmxKs&index=25&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp) + - Peter Norvig သည် traveling salesman ပြဿနာအတွက် near-optimal solutions များကို ဆွေးနွေးသည်: + - [Jupyter Notebook](http://nbviewer.jupyter.org/url/norvig.com/ipython/TSP.ipynb) + - အကယ်၍ သင့်ထံ ရှိပါက CLRS တွင် စာမျက်နှာ ၁၀၄၈ - ၁၁၄၀။ + +- ### ကွန်ပျူတာများ ပရိုဂရမ်ကို မည်သို့ လုပ်ဆောင်သနည်း + + - [ ] [How CPU executes a program (video)](https://www.youtube.com/watch?v=XM4lGflQFvA) + - [ ] [How computers calculate - ALU (video)](https://youtu.be/1I5ZMmrOfnA) + - [ ] [Registers and RAM (video)](https://youtu.be/fpnE6UAfbtU) + - [ ] [The Central Processing Unit (CPU) (video)](https://youtu.be/FZGugFqdr60) + - [ ] [Instructions and Programs (video)](https://youtu.be/zltgXvg6r3k) + +- ### Caches + - [ ] LRU cache: + - [ ] [The Magic of LRU Cache (100 Days of Google Dev) (video)](https://www.youtube.com/watch?v=R5ON3iwx78M) + - [ ] [Implementing LRU (video)](https://www.youtube.com/watch?v=bq6N7Ym81iI) + - [ ] [LeetCode - 146 LRU Cache (C++) (video)](https://www.youtube.com/watch?v=8-FZRAjR7qU) + - [ ] CPU cache: + - [ ] [MIT 6.004 L15: The Memory Hierarchy (video)](https://www.youtube.com/watch?v=vjYF_fAZI5E&list=PLrRW1w6CGAcXbMtDFj205vALOGmiRc82-&index=24) + - [ ] [MIT 6.004 L16: Cache Issues (video)](https://www.youtube.com/watch?v=ajgC3-pyGlk&index=25&list=PLrRW1w6CGAcXbMtDFj205vALOGmiRc82-) + +- ### Processes and Threads + - [ ] Computer Science 162 - Operating Systems (၂၅ ဗီဒီယို): + - processes နှင့် threads အတွက် ဗီဒီယို ၁-၁၁ ကြည့်ပါ + - [Operating Systems and System Programming (video)](https://archive.org/details/ucberkeley-webcast-PL-XXv-cvA_iBDyz-ba4yDskqMDY6A1w_c) + - [What Is The Difference Between A Process And A Thread?](https://www.quora.com/What-is-the-difference-between-a-process-and-a-thread) + - ဖုံးလွှမ်းသည်: + - Processes, Threads, Concurrency issues + - processes နှင့် threads အကြား ခြားနားချက် + - Processes + - Threads + - Locks + - Mutexes + - Semaphores + - Monitors + - ၎င်းတို့မည်သို့ လုပ်ဆောင်သနည်း? + - Deadlock + - Livelock + - CPU activity, interrupts, context switching + - multicore processors နှင့်အတူ ခေတ်သစ် concurrency constructs + - [Paging, segmentation, and virtual memory (video)](https://youtu.be/O4nwUqQodAg) + - [Interrupts (video)](https://youtu.be/iKlAWIKEyuw) + - Process resource needs (memory: code, static storage, stack, heap, နှင့် file descriptors, i/o လည်း) + - Thread resource needs (အပေါ်တွင်ရှိသည်များကို (stack မှလွဲ၍) တူညီသော process ထဲရှိ အခြား threads များနှင့် မျှဝေသော်လည်း တစ်ခုချင်းစီတွင် ၎င်း၏ ကိုယ်ပိုင် PC, stack counter, registers, နှင့် stack ရှိသည်) + - Forking သည် အမှန်တကယ် copy on write (read-only) ဖြစ်သည် process အသစ်သည် memory ကို ရေးသားသည့်အထိ၊ ထိုအခါ ၎င်းသည် full copy ကို လုပ်သည်။ + - Context switching + - [How context switching is initiated by the operating system and underlying hardware?](https://www.javatpoint.com/what-is-the-context-switching-in-the-operating-system) + - [ ] [threads in C++ (series - 10 videos)](https://www.youtube.com/playlist?list=PL5jc9xFGsL8E12so1wlMS0r0hTQoJL74M) + - [ ] [CS 377 Spring '14: Operating Systems from University of Massachusetts](https://www.youtube.com/playlist?list=PLacuG5pysFbDQU8kKxbUh4K5c1iL5_k7k) + - [ ] Python တွင် concurrency (videos): + - [ ] [Short series on threads](https://www.youtube.com/playlist?list=PL1H1sBF1VAKVMONJWJkmUh6_p8g4F2oy1) + - [ ] [Python Threads](https://www.youtube.com/watch?v=Bs7vPNbB9JM) + - [ ] [Understanding the Python GIL (2010)](https://www.youtube.com/watch?v=Obt-vMVdM8s) + - [reference](http://www.dabeaz.com/GIL) + - [ ] [David Beazley - Python Concurrency From the Ground Up LIVE! - PyCon 2015](https://www.youtube.com/watch?v=MCs5OvhV9S4) + - [ ] [Keynote David Beazley - Topics of Interest (Python Asyncio)](https://www.youtube.com/watch?v=ZzfHjytDceU) + - [ ] [Mutex in Python](https://www.youtube.com/watch?v=0zaPs8OtyKY) + +- ### Testing + - ဖုံးလွှမ်းရန်: + - unit testing မည်သို့လုပ်ဆောင်သည် + - mock objects မည်သည့်အရာများ ဖြစ်သည် + - integration testing မည်သည့်အရာနည်း + - dependency injection မည်သည့်အရာနည်း + - [ ] [Agile Software Testing with James Bach (video)](https://www.youtube.com/watch?v=SAhJf36_u5U) + - [ ] [Open Lecture by James Bach on Software Testing (video)](https://www.youtube.com/watch?v=ILkT_HV9DVU) + - [ ] [Steve Freeman - Test-Driven Development (that's not what we meant) (video)](https://vimeo.com/83960706) + - [slides](http://gotocon.com/dl/goto-berlin-2013/slides/SteveFreeman_TestDrivenDevelopmentThatsNotWhatWeMeant.pdf) + - [ ] Dependency injection: + - [ ] [video](https://www.youtube.com/watch?v=IKD2-MAkXyQ) + - [ ] [Tao Of Testing](http://jasonpolites.github.io/tao-of-testing/ch3-1.1.html) + - [ ] [How to write tests](http://jasonpolites.github.io/tao-of-testing/ch4-1.1.html) + +- ### String searching & manipulations + - [ ] [Sedgewick - Suffix Arrays (video)](https://www.coursera.org/learn/algorithms-part2/lecture/TH18W/suffix-arrays) + - [ ] [Sedgewick - Substring Search (videos)](https://www.coursera.org/learn/algorithms-part2/home/week/4) + - [ ] [1. Introduction to Substring Search](https://www.coursera.org/lecture/algorithms-part2/introduction-to-substring-search-n3ZpG) + - [ ] [2. Brute-Force Substring Search](https://www.coursera.org/learn/algorithms-part2/lecture/2Kn5i/brute-force-substring-search) + - [ ] [3. Knuth-Morris Pratt](https://www.coursera.org/learn/algorithms-part2/lecture/TAtDr/knuth-morris-pratt) + - [ ] [4. Boyer-Moore](https://www.coursera.org/learn/algorithms-part2/lecture/CYxOT/boyer-moore) + - [ ] [5. Rabin-Karp](https://www.coursera.org/lecture/algorithms-part2/rabin-karp-3KiqT) + - [ ] [Search pattern in a text (video)](https://www.coursera.org/learn/data-structures/lecture/tAfHI/search-pattern-in-text) + + အကယ်၍ သင့်အတွက် ဤအကြောင်းအရာ၌ နောက်ထပ် အသေးစိတ် လိုအပ်ပါက၊ [Additional Detail on Some Subjects](#အချို့-အကြောင်းအရာများအတွက်-နောက်ထပ်-အသေးစိတ်) တွင် "String Matching" အပိုင်းကို ကြည့်ပါ။ + +- ### Tries + - tries အမျိုးအစားများ မတူညီကြောင်း သတိပြုပါ။ အချို့တွင် prefixes ရှိသည်၊ အချို့တွင် မရှိပါ၊ နှင့် အချို့တွင် လမ်းကြောင်းကို ခြေရာခံရန်အတွက် bits အစား strings များ အသုံးပြုသည် + - ကျွန်တော်သည် code ကို ဖတ်ရှုခဲ့သော်လည်း implement မလုပ်မည်ပါ + - [ ] [Sedgewick - Tries (3 videos)](https://www.coursera.org/learn/algorithms-part2/home/week/4) + - [ ] [1. R Way Tries](https://www.coursera.org/learn/algorithms-part2/lecture/CPVdr/r-way-tries) + - [ ] [2. Ternary Search Tries](https://www.coursera.org/learn/algorithms-part2/lecture/yQM8K/ternary-search-tries) + - [ ] [3. Character Based Operations](https://www.coursera.org/learn/algorithms-part2/lecture/jwNmV/character-based-operations) + - [ ] [Notes on Data Structures and Programming Techniques](http://www.cs.yale.edu/homes/aspnes/classes/223/notes.html#Tries) + - [ ] တိုတောင်းသော သင်ခန်းစာ ဗီဒီယိုများ: + - [ ] [Introduction To Tries (video)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/08Xyf/core-introduction-to-tries) + - [ ] [Performance Of Tries (video)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/PvlZW/core-performance-of-tries) + - [ ] [Implementing A Trie (video)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/DFvd3/core-implementing-a-trie) + - [ ] [The Trie: A Neglected Data Structure](https://www.toptal.com/java/the-trie-a-neglected-data-structure) + - [ ] [TopCoder - Using Tries](https://www.topcoder.com/thrive/articles/Using%20Tries) + - [ ] [Stanford Lecture (real-world use case) (video)](https://www.youtube.com/watch?v=TJ8SkcUSdbU) + - [ ] [MIT, Advanced Data Structures, Strings (can get pretty obscure about halfway through) (video)](https://www.youtube.com/watch?v=NinWEPPrkDQ&index=16&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf) + +- ### Floating Point Numbers + - [ ] ရိုးရှင်းသော 8-bit: [Representation of Floating Point Numbers - 1 (video - there is an error in calculations - see video description)](https://www.youtube.com/watch?v=ji3SfClm8TU) + +- ### Unicode + - [ ] [The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets]( http://www.joelonsoftware.com/articles/Unicode.html) + - [ ] [What Every Programmer Absolutely, Positively Needs To Know About Encodings And Character Sets To Work With Text](http://kunststube.net/encoding/) + +- ### Endianness + - [ ] [Big And Little Endian](https://web.archive.org/web/20180107141940/http://www.cs.umd.edu:80/class/sum2003/cmsc311/Notes/Data/endian.html) + - [ ] [Big Endian Vs Little Endian (video)](https://www.youtube.com/watch?v=JrNF0KRAlyo) + - [ ] [Big And Little Endian Inside/Out (video)](https://www.youtube.com/watch?v=oBSuXP-1Tc0) + - kernel devs အတွက် အလွန် နည်းပညာဆိုင်ရာ ဟောပြောချက်။ အများစုမှာ သင်၏ ဦးခေါင်းအပေါ်တွင် ရှိနေပါက မစိုးရိမ်ပါနှင့်။ + - ပထမတစ်ဝက်က လုံလောက်ပါသည်။ + +- ### Networking + - **အကယ်၍ သင့်တွင် networking အတွေ့အကြုံ ရှိခြင်း သို့မဟုတ် reliability engineer သို့မဟုတ် operations engineer ဖြစ်လိုပါက၊ မေးခွန်းများ မျှော်လင့်ပါ** + - သို့မဟုတ်ပါက၊ ဤသည်သာ သိရန် ကောင်းသည် + - [ ] [Khan Academy](https://www.khanacademy.org/computing/code-org/computers-and-the-internet) + - [ ] [UDP and TCP: Comparison of Transport Protocols (video)](https://www.youtube.com/watch?v=Vdc8TCESIg8) + - [ ] [TCP/IP and the OSI Model Explained! (video)](https://www.youtube.com/watch?v=e5DEVa9eSN0) + - [ ] [Packet Transmission across the Internet. Networking & TCP/IP tutorial. (video)](https://www.youtube.com/watch?v=nomyRJehhnM) + - [ ] [HTTP (video)](https://www.youtube.com/watch?v=WGJrLqtX7As) + - [ ] [SSL and HTTPS (video)](https://www.youtube.com/watch?v=S2iBR2ZlZf0) + - [ ] [SSL/TLS (video)](https://www.youtube.com/watch?v=Rp3iZUvXWlM) + - [ ] [HTTP 2.0 (video)](https://www.youtube.com/watch?v=E9FxNzv1Tr8) + - [ ] [Video Series (21 videos) (video)](https://www.youtube.com/playlist?list=PLEbnTDJUr_IegfoqO4iPnPYQui46QqT0j) + - [ ] [Subnetting Demystified - Part 5 CIDR Notation (video)](https://www.youtube.com/watch?v=t5xYI0jzOf4) + - [ ] Sockets: + - [ ] [Java - Sockets - Introduction (video)](https://www.youtube.com/watch?v=6G_W54zuadg&t=6s) + - [ ] [Socket Programming (video)](https://www.youtube.com/watch?v=G75vN2mnJeQ) + +--- + +**[⬆ မာတိကာသို့ ပြန်သွားပါ](#မာတိကာ)** + +## နောက်ဆုံး ပြန်လည်ဆန်းစစ်ခြင်း + + ဤအပိုင်းတွင် အရေးကြီးသော concepts များ အများစုကို လျင်မြန်စွာ ပြန်လည်ဆန်းစစ်ရန်အတွက် ကြည့်နိုင်သော တိုတောင်းသော ဗီဒီယိုများ ရှိမည်ဖြစ်သည်။ + အကယ်၍ သင်သည် မကြာခဏ refresher လိုချင်ပါက ဇော်ကာသည်။ + +- [ ] ၂-၃ မိနစ် တိုတောင်းသော အကြောင်းအရာ ဗီဒီယိုများ စီးရီး (၂၃ ဗီဒီယို) + - [Videos](https://www.youtube.com/watch?v=r4r1DZcx1cM&list=PLmVb1OknmNJuC5POdcDv5oCS7_OUkDgpj&index=22) +- [ ] ၂-၅ မိနစ် တိုတောင်းသော အကြောင်းအရာ ဗီဒီယိုများ စီးရီး - Michael Sambol (၄၈ ဗီဒီယို): + - [Videos](https://www.youtube.com/@MichaelSambol) + - [Code Examples](https://github.com/msambol/dsa) +- [ ] [Sedgewick Videos - Algorithms I](https://www.coursera.org/learn/algorithms-part1) +- [ ] [Sedgewick Videos - Algorithms II](https://www.coursera.org/learn/algorithms-part2) + +--- + +**[⬆ မာတိကာသို့ ပြန်သွားပါ](#မာတိကာ)** + +## သင်၏ Resume ကို အပ်ဒိတ်လုပ်ပါ + +- စာအုပ်များတွင် Resume ပြင်ဆင်မှု အချက်အလက်များ ကြည့်ပါ: "Cracking The Coding Interview" နှင့် "Programming Interviews Exposed" +- ["This Is What A GOOD Resume Should Look Like" by Gayle McDowell (author of Cracking the Coding Interview)](https://www.careercup.com/resume), + - စာရေးသူ၏ မှတ်စု: "ဤသည်သာ US-focused resume အတွက် ဖြစ်သည်။ India နှင့် အခြားနိုင်ငံများအတွက် CVs များတွင် မတူညီသော မျှော်လင့်ချက်များ ရှိသော်လည်း အချက်များစွာ တူညီမည်ဖြစ်သည်။" +- ["Step-by-step resume guide" by Tech Interview Handbook](https://www.techinterviewhandbook.org/resume/guide) + - သင်၏ resume ကို မူလမှ စတင်၍ မည်သို့ သတ်မှတ်ရမည်၊ ထိရောက်သော resume အကြောင်းအရာ ရေးသားခြင်း၊ ၎င်းကို optimize လုပ်ခြင်း၊ နှင့် သင်၏ resume ကို စမ်းသပ်ခြင်းအတွက် အသေးစိတ် လမ်းညွှန် + +**[⬆ မာတိကာသို့ ပြန်သွားပါ](#မာတိကာ)** + +## အလုပ်ရှာပါ + +- [Find a Job](find-a-job.md) + +**[⬆ မာတိကာသို့ ပြန်သွားပါ](#မာတိကာ)** + +## အင်တာဗျူး လုပ်ငန်းစဉ်နှင့် ယေဘုယျ အင်တာဗျူး ပြင်ဆင်မှု + +- [ ] [How to Pass the Engineering Interview in 2021](https://davidbyttow.medium.com/how-to-pass-the-engineering-interview-in-2021-45f1b389a1) +- [ ] [Demystifying Tech Recruiting](https://www.youtube.com/watch?v=N233T0epWTs) +- [ ] How to Get a Job at the Big 4: + - [ ] [How to Get a Job at the Big 4 - Amazon, Facebook, Google & Microsoft (video)](https://www.youtube.com/watch?v=YJZCUhxNCv8) + - [ ] [How to Get a Job at the Big 4.1 (Follow-up video)](https://www.youtube.com/watch?v=6790FVXWBw8&feature=youtu.be) +- [ ] Cracking The Coding Interview Set 1: + - [ ] [Gayle L McDowell - Cracking The Coding Interview (video)](https://www.youtube.com/watch?v=rEJzOhC5ZtQ) + - [ ] [Cracking the Coding Interview with Author Gayle Laakmann McDowell (video)](https://www.youtube.com/watch?v=aClxtDcdpsQ) +- [ ] Cracking the Facebook Coding Interview: + - [ ] [The Approach](https://www.youtube.com/watch?v=wCl9kvQGHPI) + - [ ] [Problem Walkthrough](https://www.youtube.com/watch?v=4UWDyJq8jZg) +- Prep Courses: + - [Python for Data Structures, Algorithms, and Interviews (paid course)](https://www.udemy.com/python-for-data-structures-algorithms-and-interviews/): + - data structures, algorithms, mock interviews, နှင့် နောက်ထပ် များစွာကို ဖုံးလွှမ်းသော Python-centric အင်တာဗျူး prep course။ + - [Intro to Data Structures and Algorithms using Python (Udacity free course)](https://www.udacity.com/course/data-structures-and-algorithms-in-python--ud513): + - အခမဲ့ Python-centric data structures နှင့် algorithms သင်ခန်းစာ။ + - [Data Structures and Algorithms Nanodegree! (Udacity paid Nanodegree)](https://www.udacity.com/course/data-structures-and-algorithms-nanodegree--nd256): + - ၁၀၀ ကျော် data structures နှင့် algorithm exercises များနှင့် အင်တာဗျူးများ နှင့် အလုပ်ခွင်ဆိုင်ရာ scenarios များအတွက် သင့်အား ပြင်ဆင်ရန် ကူညီမည့် dedicated mentor မှ လမ်းညွှန်မှုနှင့်အတူ hands-on လေ့ကျင့်မှု ရယူပါ။ + - [Grokking the Behavioral Interview (Educative free course)](https://www.educative.io/courses/grokking-the-behavioral-interview): + - အများအားဖြင့်၊ သင်၏ အိမ်မက၏ အလုပ်ရရှိခြင်းကို တားဆီးသည့်အရာသည် သင်၏ နည်းပညာဆိုင်ရာ ကျွမ်းကျင်မှု မဟုတ်ဘဲ behavioral interview တွင် သင်မည်သို့ လုပ်ဆောင်သည်ကို ဖြစ်သည်။ + - [AlgoMonster (paid course with free content)](https://algo.monster/?utm_campaign=jwasham&utm_medium=referral&utm_content=coding-interview-university&utm_source=github): + - LeetCode အတွက် crash course။ ထောင်ပေါင်းများစွာသော မေးခွန်းများမှ ထုတ်နုတ်ထားသော patterns အားလုံးကို ဖုံးလွှမ်းသည်။ + +Mock Interviews: +- [Gainlo.co: Mock interviewers from big companies](http://www.gainlo.co/#!/) - ကျွန်တော်သည် ဤအရာကို အသုံးပြုခဲ့ပြီး ဖုန်း screening နှင့် on-site အင်တာဗျူးအတွက် တင်းမာမှု သက်သာစေရန် ကူညီခဲ့သည် +- [Pramp: Mock interviews from/with peers](https://pramp.com/) - အင်တာဗျူးများ လေ့ကျင့်ရန်အတွက် peer-to-peer model +- [interviewing.io: Practice mock interview with senior engineers](https://interviewing.io) - FAANG မှ senior engineers များနှင့်အတူ anonymous algorithmic/systems design အင်တာဗျူးများ +- [Meetapro: Mock interviews with top FAANG interviewers](https://meetapro.com/?utm_source=ciu) - Airbnb-style mock interview/coaching platform။ +- [Hello Interview: Mock Interviews with Expert Coaches and AI](https://www.hellointerview.com/?utm_source=ciu) - AI နှင့် တိုက်ရိုက် အင်တာဗျူး လုပ်ပါ သို့မဟုတ် FAANG staff engineers နှင့် managers များနှင့်အတူ။ +- [Codemia: Practice system design problems with AI or community solutions and feedback](https://codemia.io/?utm_source=ciu) - AI practice tool ဖြင့် system design ပြဿနာများ လေ့ကျင့်ပါ။ human feedback ရယူရန်အတွက်လည်း သင်၏ solution ကို community နှင့် မျှဝေပါ။ + +**[⬆ မာတိကာသို့ ပြန်သွားပါ](#မာတိကာ)** + +## အင်တာဗျူး ရောက်လာချိန်အတွက် စဉ်းစားရမည့်အရာများ + +အောက်ပါ အရာများ၏ လမ်းကြောင်းများအတိုင်း သင်ရရှိမည့် အင်တာဗျူး မေးခွန်း ၂၀ ခန့်ကို စဉ်းစားပါ။ တစ်ခုချင်းစီအတွက် အနည်းဆုံး အဖြေတစ်ခု ရှိထားပါ။ +သင်အောင်မြင်ခဲ့သည့်အရာအကြောင်း ဒေတာ သက်သက်မဟုတ်ဘဲ ပုံပြင်တစ်ခု ရှိထားပါ။ + +- သင်သည် ဤအလုပ်ကို မည်ကြောင့် လိုချင်သနည်း? +- သင်ဖြေရှင်းခဲ့သော ခက်ခဲသော ပြဿနာ မည်သည့်အရာနည်း? +- ကြုံတွေ့ခဲ့သော အကြီးမားဆုံး စိန်ခေါ်မှုများ? +- တွေ့မြင်ခဲ့သော အကောင်းဆုံး/ဆိုးဆုံး designs များ? +- ရှိနေပြီးသား product တစ်ခုကို တိုးတက်စေရန် အကြံဥာဏ်များ +- သင်သည် လူတစ်ဦးချင်းအနေဖြင့်နှင့် အဖွဲ့အစည်းတစ်ခု၏ အစိတ်အပိုင်းအနေဖြင့် မည်သို့ အကောင်းဆုံး လုပ်ဆောင်သနည်း? +- သင်၏ စွမ်းရည်များ သို့မဟုတ် အတွေ့အကြုံများထဲမှ မည်သည့်အရာများက အခန်းကဏ္ဍတွင် assets ဖြစ်မည်နှင့် အဘယ်ကြောင့်? +- [job x / project y] တွင် သင်အများဆုံး ပျော်ရွှင်ခဲ့သည့်အရာ မည်သည့်အရာနည်း? +- [job x / project y] တွင် သင်ကြုံတွေ့ခဲ့သော အကြီးမားဆုံး စိန်ခေါ်မှု မည်သည့်အရာနည်း? +- [job x / project y] တွင် သင်ကြုံတွေ့ခဲ့သော အခက်ခဲဆုံး bug မည်သည့်အရာနည်း? +- [job x / project y] တွင် သင်လေ့လာခဲ့သည့်အရာ မည်သည့်အရာနည်း? +- [job x / project y] တွင် သင်ပိုမိုကောင်းမွန်စွာ လုပ်ဆောင်နိုင်ခဲ့မည့်အရာ မည်သည့်အရာနည်း? + +**[⬆ မာတိကာသို့ ပြန်သွားပါ](#မာတိကာ)** + +## အင်တာဗျူး ပြုလုပ်သူအတွက် မေးခွန်းများ ရှိထားပါ + +ကျွန်တော်၏ အချို့မေးခွန်းများ (ကျွန်တော်သည် အဖြေများကို ကြိုတင်သိနေနိုင်သော်လည်း၊ ၎င်းတို့၏ ထင်မြင်ချက် သို့မဟုတ် အဖွဲ့ ရှုမြင်ချက်ကို လိုချင်သည်): + +- သင်၏ အဖွဲ့သည် မည်မျှ ကြီးမားသနည်း? +- သင်၏ dev cycle သည် မည်သို့ ရှိသနည်း? သင်တို့သည် waterfall/sprints/agile လုပ်သလား? +- deadline များသို့ အရေးပေါ် ရောက်ခြင်းသည် ဘုံဖြစ်သလား? သို့မဟုတ် flexibility ရှိသလား? +- သင်၏ အဖွဲ့တွင် ဆုံးဖြတ်ချက်များကို မည်သို့ ချသနည်း? +- သင်တို့သည် တစ်ပတ်လျှင် meeting မည်မျှ ရှိသနည်း? +- သင်၏ အလုပ်ပတ်ဝန်းကျင်သည် အာရုံစူးစိုက်ရန် ကူညီသည်ဟု ခံစားရသလား? +- သင်မည်သည့်အရာတွင် လုပ်ဆောင်နေသနည်း? +- ၎င်းနှင့်ပတ်သက်၍ သင်နှစ်သက်သည့်အရာ မည်သည့်အရာနည်း? +- အလုပ်ဘဝသည် မည်သို့ရှိသနည်း? +- အလုပ်/ဘဝ ဟန်ချက်သည် မည်သို့ရှိသနည်း? + +**[⬆ မာတိကာသို့ ပြန်သွားပါ](#မာတိကာ)** + +## အလုပ်ရပြီးပါက + +ဂုဏ်ပြုပါသည်! + +ဆက်လက် လေ့လာပါ။ + +သင်သည် တကယ်တော့ ဘယ်တော့မှ ပြီးစီးမည် မဟုတ်ပါ။ + +--- + + ***************************************************************************************************** + ***************************************************************************************************** + + အောက်ရှိ အရာအားလုံးသည် ရွေးချယ်စရာ ဖြစ်သည်။ entry-level အင်တာဗျူးအတွက် မလိုအပ်ပါ။ + သို့သော်၊ ဤများကို လေ့လာခြင်းဖြင့်၊ သင်သည် CS concepts များကို ပိုမိုများပြားစွာ ထိတွေ့မည်ဖြစ်ပြီး မည်သည့် ဆော့ဖ်ဝဲအင်ဂျင်နီယာ အလုပ်အတွက်မဆို ပိုမိုကောင်းမွန်စွာ ပြင်ဆင်ထားမည်ဖြစ်သည်။ သင်သည် ပိုမိုပြည့်စုံသော ဆော့ဖ်ဝဲအင်ဂျင်နီယာ ဖြစ်လာမည်ဖြစ်သည်။ + + ***************************************************************************************************** + ***************************************************************************************************** + +--- + +**[⬆ မာတိကာသို့ ပြန်သွားပါ](#မာတိကာ)** + +## နောက်ထပ် စာအုပ်များ + + ဤများကို သင်စိတ်ဝင်စားသော အကြောင်းအရာတစ်ခုထဲသို့ နက်ရှိုင်းစွာ ဝင်ရောက်နိုင်ရန်အတွက် ဤနေရာတွင် ထားရှိထားပါသည်။ + +- [The Unix Programming Environment](https://www.amazon.com/dp/013937681X) + - အဟောင်းတစ်ခုဖြစ်သော်လည်း အလွန်ကောင်းသည် +- [The Linux Command Line: A Complete Introduction](https://www.amazon.com/dp/1593273894/) + - ခေတ်သစ် ရွေးချယ်မှု +- [TCP/IP Illustrated Series](https://en.wikipedia.org/wiki/TCP/IP_Illustrated) +- [Head First Design Patterns](https://www.amazon.com/gp/product/0596007124/) + - design patterns များအတွက် နူးညံ့သော နိဒါန်း +- [Design Patterns: Elements of Reusable Object-Oriented Software](https://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612) + - "Gang Of Four" စာအုပ် သို့မဟုတ် GOF ဟုလည်း ခေါ်သည် + - canonical design patterns စာအုပ် +- [Algorithm Design Manual](http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1849967202) (Skiena) + - review နှင့် ပြဿနာ-အသိအမှတ်ပြုမှုအဖြစ် + - algorithm catalog အပိုင်းသည် အင်တာဗျူးတွင် သင်ရရှိမည့် ခက်ခဲမှု အပိုင်းအခြားထက် များစွာ ကျော်လွန်နေသည် + - ဤစာအုပ်တွင် အပိုင်း ၂ ပိုင်း ရှိသည်: + - data structures နှင့် algorithms အတွက် Class textbook + - အားသာချက်များ: + - algorithms textbook တစ်ခုခု လိုအပ်သလို ကောင်းမွန်သော review ဖြစ်သည် + - industry နှင့် academia တွင် ပြဿနာများ ဖြေရှင်းခဲ့သော သူ၏ အတွေ့အကြုံများမှ ကောင်းမွန်သော ပုံပြင်များ + - C တွင် ကုဒ် ဥပမာများ + - အားနည်းချက်များ: + - CLRS လောက် dense သို့မဟုတ် impenetrable ဖြစ်နိုင်ပြီး အချို့ အကြောင်းအရာများတွင် CLRS သည် အချို့ subjects များအတွက် ပိုမိုကောင်းမွန်သော အခြားရွေးချယ်မှု ဖြစ်နိုင်သည် + - Chapters 7, 8, နှင့် 9 သည် ကျွန်တော်ထံ ရှိသည်ထက် ပိုမို brain လိုအပ်သော သို့မဟုတ် အချို့ အရာများကို ကောင်းမွန်စွာ ရှင်းပြခြင်း မရှိသောကြောင့် ခြေလှမ်းလိုက်ရန် နာကျင်မှု ဖြစ်နိုင်သည် + - ကျွန်တော်ကို မှားယွင်းစွာ နားမလည်ပါနှင့်: ကျွန်တော်သည် Skiena ကို နှစ်သက်ပါသည်၊ သူ၏ သင်ကြားမှု style နှင့် mannerisms များကို၊ သို့သော် ကျွန်တော်သည် Stony Brook material မဟုတ်နိုင်ပါ + - Algorithm catalog: + - ဤသည်ကား သင်ဤစာအုပ်ကို ဝယ်ယူရသည့် အစစ်အမှန် အကြောင်းရင်း ဖြစ်သည်။ + - ဤစာအုပ်သည် algorithm reference အဖြစ် ပိုမိုကောင်းမွန်ပြီး cover to cover ဖတ်ရမည့်အရာ မဟုတ်ပါ။ + - Kindle တွင် ငှားရမ်းနိုင်ပါသည် + - အဖြေများ: + - [Solutions](https://web.archive.org/web/20150404194210/http://www.algorithm.cs.sunysb.edu/algowiki/index.php/The_Algorithms_Design_Manual_(Second_Edition)) + - [Errata](http://www3.cs.stonybrook.edu/~skiena/algorist/book/errata) +- [Algorithm](http://jeffe.cs.illinois.edu/teaching/algorithms/) (Jeff Erickson) +- [Write Great Code: Volume 1: Understanding the Machine](https://www.amazon.com/Write-Great-Code-Understanding-Machine/dp/1593270038) + - စာအုပ်သည် ၂၀၀၄ ခုနှစ်တွင် ထုတ်ဝေခဲ့ပြီး အနည်းငယ် outdated ဖြစ်သော်လည်း၊ တိုတောင်းစွာ ကွန်ပျူတာကို နားလည်ရန်အတွက် အလွန်ကောင်းမွန်သော အရင်းအမြစ် ဖြစ်သည် + - စာရေးသူသည် [HLA](https://en.wikipedia.org/wiki/High_Level_Assembly) ကို တီထွင်ခဲ့သောကြောင့်၊ HLA တွင် mentions နှင့် examples များကို ဆား တစ်ပေါင်းနှင့်အတူ ယူပါ။ တွင်တွင် အသုံးမပြုသော်လည်း assembly မည်သို့ရှိသည်ကို ကောင်းမွန်သော ဥပမာများ + - ဤ chapters များသည် သင့်အား ကောင်းမွန်သော အခြေခံ ပေးရန်အတွက် ဖတ်ရှုရန် တန်ဖိုးရှိပါသည်: + - Chapter 2 - Numeric Representation + - Chapter 3 - Binary Arithmetic and Bit Operations + - Chapter 4 - Floating-Point Representation + - Chapter 5 - Character Representation + - Chapter 6 - Memory Organization and Access + - Chapter 7 - Composite Data Types and Memory Objects + - Chapter 9 - CPU Architecture + - Chapter 10 - Instruction Set Architecture + - Chapter 11 - Memory Architecture and Organization +- [Introduction to Algorithms](https://www.amazon.com/Introduction-Algorithms-fourth-Thomas-Cormen/dp/026204630X) + - **အရေးကြီးသည်:** ဤစာအုပ်ကို ဖတ်ခြင်းသည် အကန့်အသတ်ရှိသော တန်ဖိုးသာ ရှိမည်ဖြစ်သည်။ ဤစာအုပ်သည် algorithms နှင့် data structures များ၏ အလွန်ကောင်းမွန်သော review ဖြစ်သော်လည်း ကောင်းမွန်သော ကုဒ်ကို ရေးသားနည်းကို မသင်ပေးပါ။ သင်သည် ထိရောက်စွာ ကောင်းမွန်သော solution ကို ကုဒ်လုပ်နိုင်ရမည်ဖြစ်သည် + - CLR ဟုလည်း ခေါ်သည်၊ တစ်ခါတစ်ရံ CLRS၊ အကြောင်းမှာ Stein သည် ဂိမ်းသို့ နောက်ကျလာသောကြောင့် +- [Computer Architecture, Sixth Edition: A Quantitative Approach](https://www.amazon.com/dp/0128119055) + - ပိုမိုကြွယ်ဝသော၊ ပိုမိုမွမ်းမံထားသော (၂၀၁၇)၊ သို့သော် ပိုမိုရှည်လျားသော treatment အတွက် + +**[⬆ မာတိကာသို့ ပြန်သွားပါ](#မာတိကာ)** + +## System Design, Scalability, Data Handling + +**အကယ်၍ သင့်တွင် ၄+ နှစ် အတွေ့အကြုံရှိပါက system design မေးခွန်းများကို မျှော်လင့်နိုင်ပါသည်။** + +- Scalability နှင့် System Design သည် အလွန်ကြီးမားသော အကြောင်းအရာများဖြစ်ပြီး အကြောင်းအရာများစွာနှင့် အရင်းအမြစ်များစွာ ရှိသည်၊ အကြောင်းမှာ + software/hardware system တစ်ခုကို scale လုပ်နိုင်သော ဒီဇိုင်းလုပ်သောအခါ စဉ်းစားရမည့်အရာများ များစွာ ရှိသောကြောင့်ဖြစ်သည်။ + ဤအကြောင်း အတော်လေး အချိန်ကုန်ကျမည်ဟု မျှော်လင့်ပါ +- ထည့်သွင်းစဉ်းစားမှုများ: + - Scalability + - ကြီးမားသော data sets များကို တစ်ခုတည်းသော values များအဖြစ် ခွဲခွာခြင်း + - data set တစ်ခုကို အခြားတစ်ခုသို့ ပြောင်းလဲခြင်း + - အလွန်ကြီးမားသော ဒေတာပမာဏကို ကိုင်တွယ်ခြင်း + - System design + - features sets + - interfaces + - class hierarchies + - အချို့သော ကန့်သတ်ချက်များအောက်တွင် စနစ်တစ်ခုကို ဒီဇိုင်းလုပ်ခြင်း + - ရိုးရှင်းမှုနှင့် ခိုင်မာမှု + - tradeoffs + - performance ခွဲခြမ်းစိတ်ဖြာမှုနှင့် optimization +- [ ] **ဤနေရာမှ စတင်ပါ**: [The System Design Primer](https://github.com/donnemartin/system-design-primer) +- [ ] [System Design from HiredInTech](http://www.hiredintech.com/system-design/) +- [ ] [How Do I Prepare To Answer Design Questions In A Technical Interview?](https://www.quora.com/How-do-I-prepare-to-answer-design-questions-in-a-technical-interview?redirected_qid=1500023) +- [ ] [8 steps guide to ace your system design interview](https://javascript.plainenglish.io/8-steps-guide-to-ace-a-system-design-interview-7a5a797f4d7d) +- [ ] [Database Normalization - 1NF, 2NF, 3NF and 4NF (video)](https://www.youtube.com/watch?v=UrYLYV7WSHM) +- [ ] [System Design Interview](https://github.com/checkcheckzz/system-design-interview) - ဤတွင် အရင်းအမြစ်များ များစွာ ရှိပါသည်။ ဆောင်းပါးများနှင့် ဥပမာများကို ကြည့်ပါ။ ကျွန်တော်သည် ၎င်းတို့ထဲမှ အချို့ကို အောက်တွင် ထားခဲ့သည် +- [ ] [How to ace a systems design interview](https://web.archive.org/web/20120716060051/http://www.palantir.com/2011/10/how-to-rock-a-systems-design-interview/) +- [ ] [Numbers Everyone Should Know](http://everythingisdata.wordpress.com/2009/10/17/numbers-everyone-should-know/) +- [ ] [How long does it take to make a context switch?](http://blog.tsunanet.net/2010/11/how-long-does-it-take-to-make-context.html) +- [ ] [Transactions Across Datacenters (video)](https://www.youtube.com/watch?v=srOgpXECblk) +- [ ] [A plain English introduction to CAP Theorem](http://ksat.me/a-plain-english-introduction-to-cap-theorem) +- [ ] [MIT 6.824: Distributed Systems, Spring 2020 (20 videos)](https://www.youtube.com/watch?v=cQP8WApzIQQ&list=PLrw6a1wE39_tb2fErI4-WkMbsvGQk9_UB) +- [ ] Consensus Algorithms: + - [ ] Paxos - [Paxos Agreement - Computerphile (video)](https://www.youtube.com/watch?v=s8JqcZtvnsM) + - [ ] Raft - [An Introduction to the Raft Distributed Consensus Algorithm (video)](https://www.youtube.com/watch?v=P9Ydif5_qvE) + - [ ] [Easy-to-read paper](https://raft.github.io/) + - [ ] [Infographic](http://thesecretlivesofdata.com/raft/) +- [ ] [Consistent Hashing](http://www.tom-e-white.com/2007/11/consistent-hashing.html) +- [ ] [NoSQL Patterns](http://horicky.blogspot.com/2009/11/nosql-patterns.html) +- [ ] Scalability: + - သင့်အတွက် ဤအားလုံး မလိုအပ်ပါ။ သင်စိတ်ဝင်စားသည့် အနည်းငယ်ကိုသာ ရွေးချယ်ပါ။ + - [ ] [Great overview (video)](https://www.youtube.com/watch?v=-W9F__D3oY4) + - [ ] တိုတောင်းသော စီးရီး: + - [Clones](http://www.lecloud.net/post/7295452622/scalability-for-dummies-part-1-clones) + - [Database](http://www.lecloud.net/post/7994751381/scalability-for-dummies-part-2-database) + - [Cache](http://www.lecloud.net/post/9246290032/scalability-for-dummies-part-3-cache) + - [Asynchronism](http://www.lecloud.net/post/9699762917/scalability-for-dummies-part-4-asynchronism) + - [ ] [Scalable Web Architecture and Distributed Systems](http://www.aosabook.org/en/distsys.html) + - [ ] [Fallacies of Distributed Computing Explained](https://pages.cs.wisc.edu/~zuyu/files/fallacies.pdf) + - [ ] [Jeff Dean - Building Software Systems At Google and Lessons Learned (video)](https://www.youtube.com/watch?v=modXC5IWTJI) + - [ ] [Introduction to Architecting Systems for Scale](http://lethain.com/introduction-to-architecting-systems-for-scale/) + - [ ] [Scaling mobile games to a global audience using App Engine and Cloud Datastore (video)](https://www.youtube.com/watch?v=9nWyWwY2Onc) + - [ ] [How Google Does Planet-Scale Engineering for Planet-Scale Infra (video)](https://www.youtube.com/watch?v=H4vMcD7zKM0) + - [ ] [The Importance of Algorithms](https://www.topcoder.com/thrive/articles/The%20Importance%20of%20Algorithms) + - [ ] [Sharding](http://highscalability.com/blog/2009/8/6/an-unorthodox-approach-to-database-design-the-coming-of-the.html) + - [ ] [Engineering for the Long Game - Astrid Atkinson Keynote(video)](https://www.youtube.com/watch?v=p0jGmgIrf_M&list=PLRXxvay_m8gqVlExPC5DG3TGWJTaBgqSA&index=4) + - [ ] [7 Years Of YouTube Scalability Lessons In 30 Minutes](http://highscalability.com/blog/2012/3/26/7-years-of-youtube-scalability-lessons-in-30-minutes.html) + - [video](https://www.youtube.com/watch?v=G-lGCC4KKok) + - [ ] [How PayPal Scaled To Billions Of Transactions Daily Using Just 8VMs](http://highscalability.com/blog/2016/8/15/how-paypal-scaled-to-billions-of-transactions-daily-using-ju.html) + - [ ] [How to Remove Duplicates in Large Datasets](https://blog.clevertap.com/how-to-remove-duplicates-in-large-datasets/) + - [ ] [A look inside Etsy's scale and engineering culture with Jon Cowie (video)](https://www.youtube.com/watch?v=3vV4YiqKm1o) + - [ ] [What Led Amazon to its Own Microservices Architecture](http://thenewstack.io/led-amazon-microservices-architecture/) + - [ ] [To Compress Or Not To Compress, That Was Uber's Question](https://eng.uber.com/trip-data-squeeze/) + - [ ] [When Should Approximate Query Processing Be Used?](http://highscalability.com/blog/2016/2/25/when-should-approximate-query-processing-be-used.html) + - [ ] [Google's Transition From Single Datacenter To Failover, To A Native Multihomed Architecture]( http://highscalability.com/blog/2016/2/23/googles-transition-from-single-datacenter-to-failover-to-a-n.html) + - [ ] [The Image Optimization Technology That Serves Millions Of Requests Per Day](http://highscalability.com/blog/2016/6/15/the-image-optimization-technology-that-serves-millions-of-re.html) + - [ ] [A Patreon Architecture Short](http://highscalability.com/blog/2016/2/1/a-patreon-architecture-short.html) + - [ ] [Tinder: How Does One Of The Largest Recommendation Engines Decide Who You'll See Next?](http://highscalability.com/blog/2016/1/27/tinder-how-does-one-of-the-largest-recommendation-engines-de.html) + - [ ] [Design Of A Modern Cache](http://highscalability.com/blog/2016/1/25/design-of-a-modern-cache.html) + - [ ] [Live Video Streaming At Facebook Scale](http://highscalability.com/blog/2016/1/13/live-video-streaming-at-facebook-scale.html) + - [ ] [A Beginner's Guide To Scaling To 11 Million+ Users On Amazon's AWS](http://highscalability.com/blog/2016/1/11/a-beginners-guide-to-scaling-to-11-million-users-on-amazons.html) + - [ ] [A 360 Degree View Of The Entire Netflix Stack](http://highscalability.com/blog/2015/11/9/a-360-degree-view-of-the-entire-netflix-stack.html) + - [ ] [Latency Is Everywhere And It Costs You Sales - How To Crush It](http://highscalability.com/latency-everywhere-and-it-costs-you-sales-how-crush-it) + - [ ] [What Powers Instagram: Hundreds of Instances, Dozens of Technologies](http://instagram-engineering.tumblr.com/post/13649370142/what-powers-instagram-hundreds-of-instances) + - [ ] [Salesforce Architecture - How They Handle 1.3 Billion Transactions A Day](http://highscalability.com/blog/2013/9/23/salesforce-architecture-how-they-handle-13-billion-transacti.html) + - [ ] [ESPN's Architecture At Scale - Operating At 100,000 Duh Nuh Nuhs Per Second](http://highscalability.com/blog/2013/11/4/espns-architecture-at-scale-operating-at-100000-duh-nuh-nuhs.html) + - [ ] services များကို အတူတကွ ချိတ်ဆက်နိုင်သော နည်းပညာများအကြောင်း အချက်အလက်အတွက် အောက်တွင် "Messaging, Serialization, and Queueing Systems" ကို ကြည့်ပါ + - [ ] Twitter: + - [O'Reilly MySQL CE 2011: Jeremy Cole, "Big and Small Data at @Twitter" (video)](https://www.youtube.com/watch?v=5cKTP36HVgI) + - [Timelines at Scale](https://www.infoq.com/presentations/Twitter-Timeline-Scalability) + - နောက်ထပ်အတွက်၊ [Video Series](#ဗီဒီယို-စီးရီးများ) အပိုင်းတွင် "Mining Massive Datasets" ဗီဒီယို စီးရီးကို ကြည့်ပါ +- [ ] System design လုပ်ငန်းစဉ်ကို လေ့ကျင့်ခြင်း: ဤတွင် စက္ကူပေါ်တွင် လုပ်ဆောင်ကြည့်ရန် အကြံဥာဏ်အချို့ ရှိပြီး၊ တစ်ခုချင်းစီတွင် အစစ်အမှန် ကမ္ဘာတွင် မည်သို့ ကိုင်တွယ်ခဲ့သည်ဆိုသော မှတ်တမ်းများ ရှိပါသည်: + - review: [The System Design Primer](https://github.com/donnemartin/system-design-primer) + - [System Design from HiredInTech](http://www.hiredintech.com/system-design/) + - [cheat sheet](https://github.com/jwasham/coding-interview-university/blob/main/extras/cheat%20sheets/system-design.pdf) + - flow: + 1. ပြဿနာနှင့် အပိုင်းအခြားကို နားလည်ပါ: + - အင်တာဗျူးပြုလုပ်သူ၏ အကူအညီဖြင့် use cases များကို သတ်မှတ်ပါ + - နောက်ထပ် features များကို အကြံပြုပါ + - အင်တာဗျူးပြုလုပ်သူက အပိုင်းအခြားပြင်ပ ဖြစ်သည်ဟု ယူဆသော items များကို ဖယ်ရှားပါ + - high availability လိုအပ်သည်ဟု ယူဆပြီး use case အဖြစ် ထည့်ပါ + 2. ကန့်သတ်ချက်များအကြောင်း စဉ်းစားပါ: + - တစ်လလျှင် requests အရေအတွက် မေးပါ + - တစ်စက္ကန့်လျှင် requests အရေအတွက် မေးပါ (၎င်းတို့က ပေးနိုင်သည် သို့မဟုတ် သင့်အား သင်္ချာလုပ်စေနিုင်သည်) + - reads vs. writes ရာခိုင်နှုန်းကို ခန့်မှန်းပါ + - ခန့်မှန်းသောအခါ 80/20 စည်းမျဉ်းကို မှတ်ထားပါ + - တစ်စက္ကန့်လျှင် ရေးသား ဒေတာ ပမာဏ + - ၅ နှစ်အတွင်း လိုအပ်သော စုစုပေါင်း သိမ်းဆည်းမှု + - တစ်စက္ကန့်လျှင် ဖတ်ရှု ဒေတာ ပမာဏ + 3. Abstract design: + - Layers (service, data, caching) + - Infrastructure: load balancing, messaging + - service ကို မောင်းနှင်သော အဓိက algorithm တစ်ခုခု၏ အကြမ်း အနှစ်ချုပ် + - bottlenecks များကို စဉ်းစားပြီး solutions များ ဆုံးဖြတ်ပါ + - Exercises: + - [Design a random unique ID generation system](https://blog.twitter.com/2010/announcing-snowflake) + - [Design a key-value database](http://www.slideshare.net/dvirsky/introduction-to-redis) + - [Design a picture sharing system](http://highscalability.com/blog/2011/12/6/instagram-architecture-14-million-users-terabytes-of-photos.html) + - [Design a recommendation system](http://ijcai13.org/files/tutorial_slides/td3.pdf) + - [Design a URL-shortener system: copied from above](http://www.hiredintech.com/system-design/the-system-design-process/) + - [Design a cache system](https://web.archive.org/web/20220217064329/https://adayinthelifeof.nl/2011/02/06/memcache-internals/) + +**[⬆ မာတိကာသို့ ပြန်သွားပါ](#မာတိကာ)** + +## နောက်ထပ် လေ့လာမှုများ + + ကျွန်တော်သည် သင့်အား ပြည့်စုံသော ဆော့ဖ်ဝဲအင်ဂျင်နီယာ ဖြစ်လာစေရန်နှင့် အချို့သော နည်းပညာများနှင့် algorithms များကို သတိပြုစေရန်အတွက် ဤများကို ထည့်ခဲ့သည်၊ ထိုသို့ဖြင့် သင့်တွင် ပိုမိုကြီးမားသော toolbox ရှိမည်ဖြစ်သည်။ + +- ### Compilers + - [How a Compiler Works in ~1 minute (video)](https://www.youtube.com/watch?v=IhC7sdYe-Jg) + - [Harvard CS50 - Compilers (video)](https://www.youtube.com/watch?v=CSZLNYF4Klo) + - [C++ (video)](https://www.youtube.com/watch?v=twodd1KFfGk) + - [Understanding Compiler Optimization (C++) (video)](https://www.youtube.com/watch?v=FnGCDLhaxKU) + +- ### Emacs and vi(m) + - UNIX-based code editor တစ်ခုနှင့် ရင်းနှီးအောင် လုပ်ပါ + - vi(m): + - [Editing With Vim 01 - Installation, Setup, and The Modes (video)](https://www.youtube.com/watch?v=5givLEMcINQ&index=1&list=PL13bz4SHGmRxlZVmWQ9DvXo1fEg4UdGkr) + - [VIM Adventures](http://vim-adventures.com/) + - ဗီဒီယို ၄ ခု set: + - [The vi/vim editor - Lesson 1](https://www.youtube.com/watch?v=SI8TeVMX8pk) + - [The vi/vim editor - Lesson 2](https://www.youtube.com/watch?v=F3OO7ZIOaJE) + - [The vi/vim editor - Lesson 3](https://www.youtube.com/watch?v=ZYEccA_nMaI) + - [The vi/vim editor - Lesson 4](https://www.youtube.com/watch?v=1lYD5gwgZIA) + - [Using Vi Instead of Emacs](http://www.cs.yale.edu/homes/aspnes/classes/223/notes.html#Using_Vi_instead_of_Emacs) + - emacs: + - [Basics Emacs Tutorial (video)](https://www.youtube.com/watch?v=hbmV1bnQ-i0) + - ၃ ခု set (videos): + - [Emacs Tutorial (Beginners) -Part 1- File commands, cut/copy/paste, cursor commands](https://www.youtube.com/watch?v=ujODL7MD04Q) + - [Emacs Tutorial (Beginners) -Part 2- Buffer management, search, M-x grep and rgrep modes](https://www.youtube.com/watch?v=XWpsRupJ4II) + - [Emacs Tutorial (Beginners) -Part 3- Expressions, Statements, ~/.emacs file, and packages](https://www.youtube.com/watch?v=paSgzPso-yc) + - [Evil Mode: Or, How I Learned to Stop Worrying and Love Emacs (video)](https://www.youtube.com/watch?v=JWD1Fpdd4Pc) + - [Writing C Programs With Emacs](http://www.cs.yale.edu/homes/aspnes/classes/223/notes.html#Writing_C_programs_with_Emacs) + - [The Absolute Beginner's Guide to Emacs (video by David Wilson)](https://www.youtube.com/watch?v=48JlgiBpw_I&t=0s) + - [The Absolute Beginner's Guide to Emacs (notes by David Wilson)](https://systemcrafters.net/emacs-essentials/absolute-beginners-guide-to-emacs/) + +- ### Unix/Linux command line tools + - ကျွန်တော်သည် အောက်ပါ စာရင်းကို ကောင်းမွန်သော tools များမှ ဖြည့်စွက်ခဲ့သည်။ + - bash + - cat + - grep + - sed + - awk + - curl သို့မဟုတ် wget + - sort + - tr + - uniq + - [strace](https://en.wikipedia.org/wiki/Strace) + - [tcpdump](https://danielmiessler.com/study/tcpdump/) + - [Essential Linux Commands Tutorial](https://labex.io/tutorials/practice-linux-commands-hands-on-labs-398420) + +- ### DevOps + - [DevOps Roadmap](https://roadmap.sh/devops) + +- ### Information theory (videos) + - [Khan Academy](https://www.khanacademy.org/computing/computer-science/informationtheory) + - Markov processes အကြောင်း နောက်ထပ်: + - [Core Markov Text Generation](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/waxgx/core-markov-text-generation) + - [Core Implementing Markov Text Generation](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/gZhiC/core-implementing-markov-text-generation) + - [Project = Markov Text Generation Walk Through](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/EUjrq/project-markov-text-generation-walk-through) + - အောက်တွင်ရှိသော MIT 6.050J Information and Entropy စီးရီးတွင် နောက်ထပ် ကြည့်ပါ + +- ### Parity & Hamming Code (videos) + - [Intro](https://www.youtube.com/watch?v=q-3BctoUpHE) + - [Parity](https://www.youtube.com/watch?v=DdMcAUlxh1M) + - Hamming Code: + - [Error detection](https://www.youtube.com/watch?v=1A_NcXxdoCc) + - [Error correction](https://www.youtube.com/watch?v=JAMLuxdHH8o) + - [Error Checking](https://www.youtube.com/watch?v=wbH2VxzmoZk) + +- ### Entropy + - အောက်ပါ ဗီဒီယိုများကိုလည်း ကြည့်ပါ + - ဦးစွာ information theory ဗီဒီယိုများကို ကြည့်ရန် သေချာပါစေ + - [Information Theory, Claude Shannon, Entropy, Redundancy, Data Compression & Bits (video)](https://youtu.be/JnJq3Py0dyM?t=176) + +- ### Cryptography + - အောက်ပါ ဗီဒီယိုများကိုလည်း ကြည့်ပါ + - ဦးစွာ information theory ဗီဒီယိုများကို ကြည့်ရန် သေချာပါစေ + - [Khan Academy Series](https://www.khanacademy.org/computing/computer-science/cryptography) + - [Cryptography: Hash Functions](https://www.youtube.com/watch?v=KqqOXndnvic&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=30) + - [Cryptography: Encryption](https://www.youtube.com/watch?v=9TNI2wHmaeI&index=31&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp) + +- ### Compression + - ဦးစွာ information theory ဗီဒီယိုများကို ကြည့်ရန် သေချာပါစေ + - Computerphile (videos): + - [Compression](https://www.youtube.com/watch?v=Lto-ajuqW3w) + - [Entropy in Compression](https://www.youtube.com/watch?v=M5c_RFKVkko) + - [Upside Down Trees (Huffman Trees)](https://www.youtube.com/watch?v=umTbivyJoiI) + - [EXTRA BITS/TRITS - Huffman Trees](https://www.youtube.com/watch?v=DV8efuB3h2g) + - [Elegant Compression in Text (The LZ 77 Method)](https://www.youtube.com/watch?v=goOa3DGezUA) + - [Text Compression Meets Probabilities](https://www.youtube.com/watch?v=cCDCfoHTsaU) + - [Compressor Head videos](https://www.youtube.com/playlist?list=PLOU2XLYxmsIJGErt5rrCqaSGTMyyqNt2H) + - [(optional) Google Developers Live: GZIP is not enough!](https://www.youtube.com/watch?v=whGwm0Lky2s) + +- ### Computer Security + - [MIT (23 videos)](https://www.youtube.com/playlist?list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh) + - [Introduction, Threat Models](https://www.youtube.com/watch?v=GqmQg-cszw4&index=1&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh) + - [Control Hijacking Attacks](https://www.youtube.com/watch?v=6bwzNg5qQ0o&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh&index=2) + - [Buffer Overflow Exploits and Defenses](https://www.youtube.com/watch?v=drQyrzRoRiA&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh&index=3) + - [Privilege Separation](https://www.youtube.com/watch?v=6SIJmoE9L9g&index=4&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh) + - [Capabilities](https://www.youtube.com/watch?v=8VqTSY-11F4&index=5&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh) + - [Sandboxing Native Code](https://www.youtube.com/watch?v=VEV74hwASeU&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh&index=6) + - [Web Security Model](https://www.youtube.com/watch?v=chkFBigodIw&index=7&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh) + - [Securing Web Applications](https://www.youtube.com/watch?v=EBQIGy1ROLY&index=8&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh) + - [Symbolic Execution](https://www.youtube.com/watch?v=yRVZPvHYHzw&index=9&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh) + - [Network Security](https://www.youtube.com/watch?v=SIEVvk3NVuk&index=11&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh) + - [Network Protocols](https://www.youtube.com/watch?v=QOtA76ga_fY&index=12&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh) + - [Side-Channel Attacks](https://www.youtube.com/watch?v=PuVMkSEcPiI&index=15&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh) + +- ### Garbage collection + - [GC in Python (video)](https://www.youtube.com/watch?v=iHVs_HkjdmI) + - [Deep Dive Java: Garbage Collection is Good!](https://www.infoq.com/presentations/garbage-collection-benefits) + - [Deep Dive Python: Garbage Collection in CPython (video)](https://www.youtube.com/watch?v=P-8Z0-MhdQs&list=PLdzf4Clw0VbOEWOS_sLhT_9zaiQDrS5AR&index=3) + +- ### Parallel Programming + - [Coursera (Scala)](https://www.coursera.org/learn/parprog1/home/week/1) + - [Efficient Python for High-Performance Parallel Computing (video)](https://www.youtube.com/watch?v=uY85GkaYzBk) + +- ### Messaging, Serialization, and Queueing Systems + - [Thrift](https://thrift.apache.org/) + - [Tutorial](http://thrift-tutorial.readthedocs.io/en/latest/intro.html) + - [Protocol Buffers](https://developers.google.com/protocol-buffers/) + - [Tutorials](https://developers.google.com/protocol-buffers/docs/tutorials) + - [gRPC](http://www.grpc.io/) + - [gRPC 101 for Java Developers (video)](https://www.youtube.com/watch?v=5tmPvSe7xXQ&list=PLcTqM9n_dieN0k1nSeN36Z_ppKnvMJoly&index=1) + - [Redis](http://redis.io/) + - [Tutorial](http://try.redis.io/) + - [Amazon SQS (queue)](https://aws.amazon.com/sqs/) + - [Amazon SNS (pub-sub)](https://aws.amazon.com/sns/) + - [RabbitMQ](https://www.rabbitmq.com/) + - [Get Started](https://www.rabbitmq.com/getstarted.html) + - [Celery](http://www.celeryproject.org/) + - [First Steps With Celery](http://docs.celeryproject.org/en/latest/getting-started/first-steps-with-celery.html) + - [ZeroMQ](http://zeromq.org/) + - [Intro - Read The Manual](http://zeromq.org/intro:read-the-manual) + - [ActiveMQ](http://activemq.apache.org/) + - [Kafka](http://kafka.apache.org/documentation.html#introduction) + - [MessagePack](http://msgpack.org/index.html) + - [Avro](https://avro.apache.org/) + +- ### A* + - [A Search Algorithm](https://en.wikipedia.org/wiki/A*_search_algorithm) + - [A* Pathfinding (E01: algorithm explanation) (video)](https://www.youtube.com/watch?v=-L-WgKMFuhE) + +- ### Fast Fourier Transform + - [An Interactive Guide To The Fourier Transform](https://betterexplained.com/articles/an-interactive-guide-to-the-fourier-transform/) + - [What is a Fourier transform? What is it used for?](http://www.askamathematician.com/2012/09/q-what-is-a-fourier-transform-what-is-it-used-for/) + - [What is the Fourier Transform? (video)](https://www.youtube.com/watch?v=Xxut2PN-V8Q) + - [Divide & Conquer: FFT (video)](https://www.youtube.com/watch?v=iTMn0Kt18tg&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=4) + - [Understanding The FFT](http://jakevdp.github.io/blog/2013/08/28/understanding-the-fft/) + +- ### Bloom Filter + - m bits နှင့် k hashing functions များရှိသော Bloom filter ကို ပေးထားသောအခါ၊ insertion နှင့် membership testing နှစ်ခုလုံးသည် O(k) ဖြစ်သည် + - [Bloom Filters (video)](https://www.youtube.com/watch?v=-SuTGoFYjZs) + - [Bloom Filters | Mining of Massive Datasets | Stanford University (video)](https://www.youtube.com/watch?v=qBTdukbzc78) + - [Tutorial](http://billmill.org/bloomfilter-tutorial/) + - [How To Write A Bloom Filter App](http://blog.michaelschmatz.com/2016/04/11/how-to-write-a-bloom-filter-cpp/) + +- ### HyperLogLog + - [How To Count A Billion Distinct Objects Using Only 1.5KB Of Memory](http://highscalability.com/blog/2012/4/5/big-data-counting-how-to-count-a-billion-distinct-objects-us.html) + +- ### Locality-Sensitive Hashing + - documents များ၏ တူညီမှုကို ဆုံးဖြတ်ရန်အတွက် အသုံးပြုသည် + - ၂ ခု documents/strings များ အတိအကျ တူညီမှုရှိမရှိ ဆုံးဖြတ်ရန်အတွက် အသုံးပြုသော MD5 သို့မဟုတ် SHA ၏ ဆန့်ကျင်ဘက် + - [Simhashing (hopefully) made simple](http://ferd.ca/simhashing-hopefully-made-simple.html) + +- ### van Emde Boas Trees + - [Divide & Conquer: van Emde Boas Trees (video)](https://www.youtube.com/watch?v=hmReJCupbNU&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=6) + - [MIT Lecture Notes](https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-046j-design-and-analysis-of-algorithms-spring-2012/lecture-notes/MIT6_046JS12_lec15.pdf) + +- ### Augmented Data Structures + - [CS 61B Lecture 39: Augmenting Data Structures](https://archive.org/details/ucberkeley_webcast_zksIj9O8_jc) + +- ### Balanced search trees + - balanced binary tree အမျိုးအစား အနည်းဆုံး တစ်ခုကို သိထားပါ (နှင့် ၎င်းကို မည်သို့ implement လုပ်သည်ကို သိထားပါ): + - "Balanced search trees အမျိုးအစားများတွင်၊ AVL နှင့် 2/3 trees များသည် ယခု passé ဖြစ်နေပြီး red-black trees များက ပိုမို လူကြိုက်များသော ပုံရပါသည်။ + အထူးစိတ်ဝင်စားဖွယ် self-organizing data structure မှာ splay tree ဖြစ်ပြီး၊ ၎င်းသည် rotations များကို အသုံးပြုပြီး access လုပ်သော key မည်သည့်အရာကိုမဆို root သို့ ရွှေ့ပေးသည်။" - Skiena + - ဤများထဲမှ၊ ကျွန်တော်သည် splay tree ကို implement လုပ်ရန် ရွေးချယ်ခဲ့သည်။ ကျွန်တော်ဖတ်ခဲ့သည်အရ၊ သင်သည် သင်၏ အင်တာဗျူးတွင် balanced search tree တစ်ခုကို implement မလုပ်မည်ဖြစ်သည်။ သို့သော် ကျွန်တော်သည် တစ်ခုကို ကုဒ်လုပ်ခြင်းကို ထိတွေ့လိုခဲ့ပြီး အမှန်စင်စစ် splay trees များသည် bee's knees ဖြစ်သည်။ ကျွန်တော်သည် red-black tree ကုဒ် များစွာ ဖတ်ရှုခဲ့သည် + - Splay tree: insert, search, delete functions များ + အကယ်၍ သင်သည် red/black tree တစ်ခု implement လုပ်မည်ဆိုပါက ဤများကိုသာ စမ်းကြည့်ပါ: + - Search နှင့် insertion functions များ၊ delete ကို ကျော်ပါ + - ကျွန်တော်သည် B-Tree အကြောင်း ပိုမိုသိလိုသည် အကြောင်းမှာ ၎င်းကို အလွန်ကြီးမားသော data sets များနှင့်အတူ တွင်တွင် အသုံးပြုသောကြောင့်ဖြစ်သည် + - [Self-balancing binary search tree](https://en.wikipedia.org/wiki/Self-balancing_binary_search_tree) + + - **AVL trees** + - လက်တွေ့တွင်: + ကျွန်တော်ပြောနိုင်သည့်အရ၊ ဤများကို လက်တွေ့တွင် များစွာ အသုံးမပြုသော်လည်း ၎င်းတို့ဘယ်နေရာတွင် ရှိမည်ကို မြင်နိုင်သည်: + AVL tree သည် O(log n) search, insertion, နှင့် removal ကို ပံ့ပိုးပေးသော နောက်ထပ် structure ဖြစ်သည်။ ၎င်းသည် red–black trees များထက် ပိုမို rigidly balanced ဖြစ်ပြီး၊ insert နှင့် removal ကို နှေးကွေးစေသော်လည်း retrieval ကို ပိုမို လျင်မြန်စေသည်။ ဤကြောင့် တစ်ကြိမ် တည်ဆောက်ပြီး reconstruction မပြုလုပ်ဘဲ load လုပ်နိုင်သော data structures များအတွက် ဆွဲဆောင်မှု ရှိသည်၊ ဥပမာ ဘာသာစကား dictionaries များ (သို့မဟုတ် program dictionaries၊ ဥပမာ assembler သို့မဟုတ် interpreter ၏ opcodes များ) + - [MIT AVL Trees / AVL Sort (video)](https://www.youtube.com/watch?v=FNeL18KsWPc&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=6) + - [AVL Trees (video)](https://www.coursera.org/learn/data-structures/lecture/Qq5E0/avl-trees) + - [AVL Tree Implementation (video)](https://www.coursera.org/learn/data-structures/lecture/PKEBC/avl-tree-implementation) + - [Split And Merge](https://www.coursera.org/learn/data-structures/lecture/22BgE/split-and-merge) + - [[Review] AVL Trees (playlist) in 19 minutes (video)](https://www.youtube.com/playlist?list=PL9xmBV_5YoZOUFgdIeOPuH6cfSnNRMau-) + + - **Splay trees** + - လက်တွေ့တွင်: + Splay trees များကို ပုံမှန်အားဖြင့် caches, memory allocators, routers, garbage collectors, data compression, ropes (ရှည်လျားသော text strings အတွက် string ၏ အစားထိုး), Windows NT တွင် (virtual memory, networking နှင့် file system code တွင်) စသည်တို့၏ implementation တွင် အသုံးပြုသည် + - [CS 61B: Splay Trees (video)](https://archive.org/details/ucberkeley_webcast_G5QIXywcJlY) + - MIT Lecture: Splay Trees: + - အလွန် သင်္ချာပိုင်း ဖြစ်လာသော်လည်း နောက်ဆုံး ၁၀ မိနစ်ကို သေချာ ကြည့်ပါ။ + - [Video](https://www.youtube.com/watch?v=QnPl_Y6EqMo) + + - **Red/black trees** + - ဤများသည် 2-3 tree ၏ ဘာသာပြန်ချက် ဖြစ်သည် (အောက်တွင် ကြည့်ပါ)။ + - လက်တွေ့တွင်: + Red–black trees များသည် insertion time, deletion time, နှင့် search time အတွက် worst-case guarantees များ ပေးပါသည်။ + ဤကြောင့် real-time applications ကဲ့သို့ time-sensitive applications များတွင် တန်ဖိုးရှိရုံသာမက၊ worst-case guarantees များ ပေးသော အခြား data structures များတွင် valuable building blocks များ ဖြစ်စေပါသည်; + ဥပမာအားဖြင့်၊ computational geometry တွင် အသုံးပြုသော data structures များစွာသည် red-black trees များအပေါ် အခြေခံနိုင်သည်၊ နှင့် + လက်ရှိ Linux kernels တွင် အသုံးပြုသော Completely Fair Scheduler သည် red–black trees များကို အသုံးပြုသည်။ Java ၏ version 8 တွင်၊ + Collection HashMap ကို ဤသို့ ပြုပြင်ခဲ့သည် - poor hashcodes ရှိသော တူညီသော elements များကို သိမ်းဆည်းရန် LinkedList အစား Red-Black tree ကို အသုံးပြုသည် + - [Aduni - Algorithms - Lecture 4 (link jumps to the starting point) (video)](https://youtu.be/1W3x0f_RmUo?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=3871) + - [Aduni - Algorithms - Lecture 5 (video)](https://www.youtube.com/watch?v=hm2GHwyKF1o&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=5) + - [Red-Black Tree](https://en.wikipedia.org/wiki/Red%E2%80%93black_tree) + - [An Introduction To Binary Search And Red Black Tree](https://www.topcoder.com/thrive/articles/An%20Introduction%20to%20Binary%20Search%20and%20Red-Black%20Trees) + - [[Review] Red-Black Trees (playlist) in 30 minutes (video)](https://www.youtube.com/playlist?list=PL9xmBV_5YoZNqDI8qfOZgzbqahCUmUEin) + + - **2-3 search trees** + - လက်တွေ့တွင်: + 2-3 trees များတွင် AVL trees များနှင့် နှိုင်းယှဉ်သောအခါ inserts များ ပိုမို လျင်မြန်သော်လည်း searches များ နှေးကွေးသည် (height ပိုမို များသောကြောင့်)။ + - သင်သည် 2-3 trees များကို အလွန်ရှားရှားမှ အသုံးပြုမည်ဖြစ်သည် အကြောင်းမှာ ၎င်း၏ implementation တွင် မတူညီသော node အမျိုးအစားများ ပါဝင်သောကြောင့်ဖြစ်သည်။ အစား လူများသည် Red-Black trees များကို အသုံးပြုကြသည်။ + - [23-Tree Intuition and Definition (video)](https://www.youtube.com/watch?v=C3SsdUqasD4&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6&index=2) + - [Binary View of 23-Tree](https://www.youtube.com/watch?v=iYvBtGKsqSg&index=3&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6) + - [2-3 Trees (student recitation) (video)](https://www.youtube.com/watch?v=TOb1tuEZ2X4&index=5&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp) + + - **2-3-4 Trees (aka 2-4 trees)** + - လက်တွေ့တွင်: + 2-4 trees အားလုံးအတွက်၊ တူညီသော အစီအစဉ်တွင် data elements များရှိသော သက်ဆိုင်ရာ red–black trees များ ရှိသည်။ 2-4 trees များတွင် insertion နှင့် deletion + operations များသည် red–black trees များတွင် color-flipping နှင့် rotations များနှင့် တူညီသည်။ ဤကြောင့် 2-4 trees များသည် red-black trees များနောက်ကွယ်ရှိ logic ကို နားလည်ရန်အတွက် အရေးကြီးသော ကိရိယာ ဖြစ်စေပါသည်၊ နှင့် ဤကြောင့် မြောက်မြားစွာသော အခြေခံ algorithm စာများတွင် red–black trees များမတိုင်မီ 2-4 trees များကို မိတ်ဆက်သည်၊ **2-4 trees များကို လက်တွေ့တွင် များစွာ အသုံးမပြုသော်လည်းပင်**။ + - [CS 61B Lecture 26: Balanced Search Trees (video)](https://archive.org/details/ucberkeley_webcast_zqrqYXkth6Q) + - [Bottom Up 234-Trees (video)](https://www.youtube.com/watch?v=DQdMYevEyE4&index=4&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6) + - [Top Down 234-Trees (video)](https://www.youtube.com/watch?v=2679VQ26Fp4&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6&index=5) + + - **N-ary (K-ary, M-ary) trees** + - မှတ်စု: N သို့မဟုတ် K သည် branching factor (max branches) ဖြစ်သည် + - binary trees များသည် branching factor = 2 ရှိသော 2-ary tree ဖြစ်သည် + - 2-3 trees များသည် 3-ary ဖြစ်သည် + - [K-Ary Tree](https://en.wikipedia.org/wiki/K-ary_tree) + + - **B-Trees** + - ပျော်စရာ အချက်အလက်: ၎င်းသည် လျှို့ဝှက်ချက်ဖြစ်သော်လည်း B သည် Boeing, Balanced, သို့မဟုတ် Bayer (co-inventor) အတွက် ရပ်နိုင်သည်။ + - လက်တွေ့တွင်: + B-trees များကို databases များတွင် ကျယ်ကျယ်ပြန့်ပြန့် အသုံးပြုကြသည်။ ခေတ်သစ် filesystems အများစုမှာ B-trees (သို့မဟုတ် Variants) ကို အသုံးပြုကြသည်။ databases တွင် အသုံးပြုခြင်းအပြင်၊ B-tree ကို filesystems များတွင်လည်း အသုံးပြုပြီး အထူးသော file တစ်ခုတွင် arbitrary block တစ်ခုကို လျင်မြန်စွာ random access ပေးရန်အတွက် ဖြစ်သည်။ အခြေခံ ပြဿနာမှာ file block address ကို disk block (သို့မဟုတ် cylinder head sector လိုမျိုး) address သို့ ပြောင်းလဲခြင်း ဖြစ်သည် + - [B-Tree](https://en.wikipedia.org/wiki/B-tree) + - [B-Tree Datastructure](http://btechsmartclass.com/data_structures/b-trees.html) + - [Introduction to B-Trees (video)](https://www.youtube.com/watch?v=I22wEC1tTGo&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6&index=6) + - [B-Tree Definition and Insertion (video)](https://www.youtube.com/watch?v=s3bCdZGrgpA&index=7&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6) + - [B-Tree Deletion (video)](https://www.youtube.com/watch?v=svfnVhJOfMc&index=8&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6) + - [MIT 6.851 - Memory Hierarchy Models (video)](https://www.youtube.com/watch?v=V3omVLzI0WE&index=7&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf) + - cache-oblivious B-Trees များကို ဖုံးလွှမ်းသည်၊ အလွန်စိတ်ဝင်စားဖွယ် data structures များ + - ပထမ 37 မိနစ်များသည် အလွန် နည်းပညာဆိုင်ရာ ဖြစ်ပြီး ကျော်နိုင်သည် (B သည် block size, cache line size) + - [[Review] B-Trees (playlist) in 26 minutes (video)](https://www.youtube.com/playlist?list=PL9xmBV_5YoZNFPPv98DjTdD9X6UI9KMHz) + +- ### k-D Trees + - rectangle သို့မဟုတ် higher-dimensional object တစ်ခုတွင် points အရေအတွက်ကို ရှာဖွေရန်အတွက် အလွန်ကောင်းသည် + - k-nearest neighbors အတွက် ကောင်းမွန်သော fit ဖြစ်သည် + - [kNN K-d tree algorithm (video)](https://www.youtube.com/watch?v=Y4ZgLlDfKDg) + +- ### Skip lists + - "ဤများသည် အနည်းငယ် cult data structure ဖြစ်သည်" - Skiena + - [Randomization: Skip Lists (video)](https://www.youtube.com/watch?v=2g9OSRKJuzM&index=10&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp) + - [For animations and a little more detail](https://en.wikipedia.org/wiki/Skip_list) + +- ### Network Flows + - [Ford-Fulkerson in 5 minutes — Step by step example (video)](https://www.youtube.com/watch?v=Tl90tNtKvxs) + - [Ford-Fulkerson Algorithm (video)](https://www.youtube.com/watch?v=v1VgJmkEJW0) + - [Network Flows (video)](https://www.youtube.com/watch?v=2vhN4Ice5jI) + +- ### Disjoint Sets & Union Find + - [UCB 61B - Disjoint Sets; Sorting & selection (video)](https://archive.org/details/ucberkeley_webcast_MAEGXTwmUsI) + - [Sedgewick Algorithms - Union-Find (6 videos)](https://www.coursera.org/learn/algorithms-part1/home/week/1) + +- ### Math for Fast Processing + - [Integer Arithmetic, Karatsuba Multiplication (video)](https://www.youtube.com/watch?v=eCaXlAaN2uE&index=11&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) + - [The Chinese Remainder Theorem (used in cryptography) (video)](https://www.youtube.com/watch?v=ru7mWZJlRQg) + +- ### Treap + - binary search tree နှင့် heap ၏ ပေါင်းစပ်မှု + - [Treap](https://en.wikipedia.org/wiki/Treap) + - [Data Structures: Treaps explained (video)](https://www.youtube.com/watch?v=6podLUYinH8) + - [Applications in set operations](https://www.cs.cmu.edu/~scandal/papers/treaps-spaa98.pdf) + +- ### Linear Programming (videos) + - [Linear Programming](https://www.youtube.com/watch?v=M4K6HYLHREQ) + - [Finding minimum cost](https://www.youtube.com/watch?v=2ACJ9ewUC6U) + - [Finding maximum value](https://www.youtube.com/watch?v=8AA_81xI3ik) + - [Solve Linear Equations with Python - Simplex Algorithm](https://www.youtube.com/watch?v=44pAWI7v5Zk) + +- ### Geometry, Convex hull (videos) + - [Graph Alg. IV: Intro to geometric algorithms - Lecture 9](https://youtu.be/XIAQRlNkJAw?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=3164) + - [Geometric Algorithms: Graham & Jarvis - Lecture 10](https://www.youtube.com/watch?v=J5aJEcOr6Eo&index=10&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm) + - [Divide & Conquer: Convex Hull, Median Finding](https://www.youtube.com/watch?v=EzeYI7p9MjU&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=2) + +- ### Discrete math + - [Computer Science 70, 001 - Spring 2015 - Discrete Mathematics and Probability Theory](http://www.infocobuild.com/education/audio-video-courses/computer-science/cs70-spring2015-berkeley.html) + - [Discrete Mathematics by Shai Simonson (19 videos)](https://www.youtube.com/playlist?list=PLWX710qNZo_sNlSWRMVIh6kfTjolNaZ8t) + - [Discrete Mathematics By IIT Ropar NPTEL](https://nptel.ac.in/courses/106/106/106106183/) + +--- + +**[⬆ မာတိကာသို့ ပြန်သွားပါ](#မာတိကာ)** + +## အချို့ အကြောင်းအရာများအတွက် နောက်ထပ် အသေးစိတ် + + ကျွန်တော်သည် အပေါ်တွင် တင်ပြခဲ့သော အကြံဥာဏ်များအချို့ကို အားဖြည့်ရန်အတွက် ဤများကို ထည့်ခဲ့သော်လည်း၊ အပေါ်တွင် မထည့်လိုခဲ့ပါ အကြောင်းမှာ ၎င်းသည် အလွန်များပြားသောကြောင့်ဖြစ်သည်။ အကြောင်းအရာတစ်ခုကို overdoing လုပ်ရန် လွယ်ကူသည်။ + သင်သည် ဤရာစုတွင် အလုပ်ရလိုသည်၊ မဟုတ်လား? + +- **SOLID** + - [ ] [Bob Martin SOLID Principles of Object Oriented and Agile Design (video)](https://www.youtube.com/watch?v=TMuno5RZNeE) + - [ ] S - [Single Responsibility Principle](http://www.oodesign.com/single-responsibility-principle.html) | [Single responsibility to each Object](http://www.javacodegeeks.com/2011/11/solid-single-responsibility-principle.html) + - [more flavor](https://docs.google.com/open?id=0ByOwmqah_nuGNHEtcU5OekdDMkk) + - [ ] O - [Open/Closed Principle](http://www.oodesign.com/open-close-principle.html) | [On production level Objects are ready for extension but not for modification](https://en.wikipedia.org/wiki/Open/closed_principle) + - [more flavor](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgN2M5MTkwM2EtNWFkZC00ZTI3LWFjZTUtNTFhZGZiYmUzODc1&hl=en) + - [ ] L - [Liskov Substitution Principle](http://www.oodesign.com/liskov-s-substitution-principle.html) | [Base Class and Derived class follow 'IS A' Principle](http://stackoverflow.com/questions/56860/what-is-the-liskov-substitution-principle) + - [more flavor](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgNzAzZjA5ZmItNjU3NS00MzQ5LTkwYjMtMDJhNDU5ZTM0MTlh&hl=en) + - [ ] I - [Interface segregation principle](http://www.oodesign.com/interface-segregation-principle.html) | Clients များသည် ၎င်းတို့မအသုံးပြုသော interfaces များကို implement လုပ်ရန် အတင်းအကြပ် မလုပ်သင့်ပါ + - [Interface Segregation Principle in 5 minutes (video)](https://www.youtube.com/watch?v=3CtAfl7aXAQ) + - [more flavor](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgOTViYjJhYzMtMzYxMC00MzFjLWJjMzYtOGJiMDc5N2JkYmJi&hl=en) + - [ ] D -[Dependency Inversion principle](http://www.oodesign.com/dependency-inversion-principle.html) | objects များ၏ composition တွင် dependency ကို လျှော့ချပါ။ + - [Why Is The Dependency Inversion Principle And Why Is It Important](http://stackoverflow.com/questions/62539/what-is-the-dependency-inversion-principle-and-why-is-it-important) + - [more flavor](http://docs.google.com/a/cleancoder.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwhCYaYDn8EgMjdlMWIzNGUtZTQ0NC00ZjQ5LTkwYzQtZjRhMDRlNTQ3ZGMz&hl=en) + +- **Union-Find** + - [ ] [Overview](https://www.coursera.org/learn/data-structures/lecture/JssSY/overview) + - [ ] [Naive Implementation](https://www.coursera.org/learn/data-structures/lecture/EM5D0/naive-implementations) + - [ ] [Trees](https://www.coursera.org/learn/data-structures/lecture/Mxu0w/trees) + - [ ] [Union By Rank](https://www.coursera.org/learn/data-structures/lecture/qb4c2/union-by-rank) + - [ ] [Path Compression](https://www.coursera.org/learn/data-structures/lecture/Q9CVI/path-compression) + - [ ] [Analysis Options](https://www.coursera.org/learn/data-structures/lecture/GQQLN/analysis-optional) + +- **နောက်ထပ် Dynamic Programming** (videos) + - [ ] [6.006: Dynamic Programming I: Fibonacci, Shortest Paths](https://www.youtube.com/watch?v=r4-cftqTcdI&ab_channel=MITOpenCourseWare) + - [ ] [6.006: Dynamic Programming II: Text Justification, Blackjack](https://www.youtube.com/watch?v=KLBCUx1is2c&ab_channel=MITOpenCourseWare) + - [ ] [6.006: DP III: Parenthesization, Edit Distance, Knapsack](https://www.youtube.com/watch?v=TDo3r5M1LNo&ab_channel=MITOpenCourseWare) + - [ ] [6.006: DP IV: Guitar Fingering, Tetris, Super Mario Bros.](https://www.youtube.com/watch?v=i9OAOk0CUQE&ab_channel=MITOpenCourseWare) + - [ ] [6.046: Dynamic Programming & Advanced DP](https://www.youtube.com/watch?v=Tw1k46ywN6E&index=14&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp) + - [ ] [6.046: Dynamic Programming: All-Pairs Shortest Paths](https://www.youtube.com/watch?v=NzgFUwOaoIw&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=15) + - [ ] [6.046: Dynamic Programming (student recitation)](https://www.youtube.com/watch?v=krZI60lKPek&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=12) + +- **Advanced Graph Processing** (videos) + - [ ] [Synchronous Distributed Algorithms: Symmetry-Breaking. Shortest-Paths Spanning Trees](https://www.youtube.com/watch?v=mUBmcbbJNf4&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=27) + - [ ] [Asynchronous Distributed Algorithms: Shortest-Paths Spanning Trees](https://www.youtube.com/watch?v=kQ-UQAzcnzA&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp&index=28) + +- MIT **Probability** (mathy, and go slowly, which is good for mathy things) (videos): + - [ ] [MIT 6.042J - Probability Introduction](https://www.youtube.com/watch?v=SmFwFdESMHI&index=18&list=PLB7540DEDD482705B) + - [ ] [MIT 6.042J - Conditional Probability](https://www.youtube.com/watch?v=E6FbvM-FGZ8&index=19&list=PLB7540DEDD482705B) + - [ ] [MIT 6.042J - Independence](https://www.youtube.com/watch?v=l1BCv3qqW4A&index=20&list=PLB7540DEDD482705B) + - [ ] [MIT 6.042J - Random Variables](https://www.youtube.com/watch?v=MOfhhFaQdjw&list=PLB7540DEDD482705B&index=21) + - [ ] [MIT 6.042J - Expectation I](https://www.youtube.com/watch?v=gGlMSe7uEkA&index=22&list=PLB7540DEDD482705B) + - [ ] [MIT 6.042J - Expectation II](https://www.youtube.com/watch?v=oI9fMUqgfxY&index=23&list=PLB7540DEDD482705B) + - [ ] [MIT 6.042J - Large Deviations](https://www.youtube.com/watch?v=q4mwO2qS2z4&index=24&list=PLB7540DEDD482705B) + - [ ] [MIT 6.042J - Random Walks](https://www.youtube.com/watch?v=56iFMY8QW2k&list=PLB7540DEDD482705B&index=25) + +- [ ] [Simonson: Approximation Algorithms (video)](https://www.youtube.com/watch?v=oDniZCmNmNw&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=19) + +- **String Matching** + - Rabin-Karp (videos): + - [ ] [Rabin Karps Algorithm](https://www.coursera.org/lecture/data-structures/rabin-karps-algorithm-c0Qkw) + - [ ] [Precomputing](https://www.coursera.org/learn/data-structures/lecture/nYrc8/optimization-precomputation) + - [ ] [Optimization: Implementation and Analysis](https://www.coursera.org/learn/data-structures/lecture/h4ZLc/optimization-implementation-and-analysis) + - [ ] [Table Doubling, Karp-Rabin](https://www.youtube.com/watch?v=BRO7mVIFt08&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=9) + - [ ] [Rolling Hashes, Amortized Analysis](https://www.youtube.com/watch?v=w6nuXg0BISo&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=32) + - Knuth-Morris-Pratt (KMP): + - [ ] [The Knuth-Morris-Pratt (KMP) String Matching Algorithm](https://www.youtube.com/watch?v=5i7oKodCRJo) + - Boyer–Moore string search algorithm + - [ ] [Boyer-Moore String Search Algorithm](https://en.wikipedia.org/wiki/Boyer%E2%80%93Moore_string_search_algorithm) + - [ ] [Advanced String Searching Boyer-Moore-Horspool Algorithms (video)](https://www.youtube.com/watch?v=QDZpzctPf10) + - [ ] [Coursera: Algorithms on Strings](https://www.coursera.org/learn/algorithms-on-strings/home/week/1) + - အစမှာ အလွန်ကောင်းစတင်သော်လည်း KMP ကို ကျော်သွားပြီးနောက် လိုအပ်သည်ထက် ရှုပ်ထွေးလာသည် + - tries များ၏ ကောင်းမွန်သော ရှင်းလင်းချက် + - ကျော်နိုင်သည် + +- **Sorting** + + - Stanford sorting ဆိုင်ရာ ပို့ချပို့ချများ: + - [ ] [Lecture 15 | Programming Abstractions (video)](https://www.youtube.com/watch?v=ENp00xylP7c&index=15&list=PLFE6E58F856038C69) + - [ ] [Lecture 16 | Programming Abstractions (video)](https://www.youtube.com/watch?v=y4M9IVgrVKo&index=16&list=PLFE6E58F856038C69) + - Shai Simonson: + - [ ] [Algorithms - Sorting - Lecture 2 (video)](https://www.youtube.com/watch?v=odNJmw5TOEE&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=2) + - [ ] [Algorithms - Sorting II - Lecture 3 (video)](https://www.youtube.com/watch?v=hj8YKFTFKEE&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=3) + - Steven Skiena sorting ဆိုင်ရာ ပို့ချပို့ချများ: + - [ ] [CSE373 2020 - Mergesort/Quicksort (video)](https://www.youtube.com/watch?v=jUf-UQ3a0kg&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=8) + - [ ] [CSE373 2020 - Linear Sorting (video)](https://www.youtube.com/watch?v=0ksyQKmre84&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=9) + +- NAND To Tetris: [Build a Modern Computer from First Principles](https://www.coursera.org/learn/build-a-computer) + +**[⬆ မာတိကာသို့ ပြန်သွားပါ](#မာတိကာ)** + +## ဗီဒီယို စီးရီးများ + +နောက်ကျောင်းထိုင်ပြီး ပျော်ရွှင်ပါ။ + +- [ ] [List of individual Dynamic Programming problems (each is short)](https://www.youtube.com/playlist?list=PLrmLmBdmIlpsHaNTPP_jHHDx_os9ItYXr) + +- [ ] [x86 Architecture, Assembly, Applications (11 videos)](https://www.youtube.com/playlist?list=PL038BE01D3BAEFDB0) + +- [ ] [MIT 18.06 Linear Algebra, Spring 2005 (35 videos)](https://www.youtube.com/playlist?list=PLE7DDD91010BC51F8) + +- [ ] [Excellent - MIT Calculus Revisited: Single Variable Calculus](https://www.youtube.com/playlist?list=PL3B08AE665AB9002A) + +- [ ] [Skiena lectures from Algorithm Design Manual - CSE373 2020 - Analysis of Algorithms (26 videos)](https://www.youtube.com/watch?v=22hwcnXIGgk&list=PLOtl7M3yp-DX6ic0HGT0PUX_wiNmkWkXx&index=1) + +- [ ] [UC Berkeley 61B (Spring 2014): Data Structures (25 videos)](https://archive.org/details/ucberkeley-webcast-PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd) + +- [ ] [UC Berkeley 61B (Fall 2006): Data Structures (39 videos)](https://archive.org/details/ucberkeley-webcast-PL4BBB74C7D2A1049C) + +- [ ] [UC Berkeley 61C: Machine Structures (26 videos)](https://archive.org/details/ucberkeley-webcast-PL-XXv-cvA_iCl2-D-FS5mk0jFF6cYSJs_) + +- [ ] [OOSE: Software Dev Using UML and Java (21 videos)](https://www.youtube.com/playlist?list=PLJ9pm_Rc9HesnkwKlal_buSIHA-jTZMpO) + +- [ ] [MIT 6.004: Computation Structures (49 videos)](https://www.youtube.com/playlist?list=PLDSlqjcPpoL64CJdF0Qee5oWqGS6we_Yu) + +- [ ] [Carnegie Mellon - Computer Architecture Lectures (39 videos)](https://www.youtube.com/playlist?list=PL5PHm2jkkXmi5CxxI7b3JCL1TWybTDtKq) + +- [ ] [MIT 6.006: Intro to Algorithms (47 videos)](https://www.youtube.com/watch?v=HtSuA80QTyo&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&nohtml5=False) + +- [ ] [MIT 6.033: Computer System Engineering (22 videos)](https://www.youtube.com/watch?v=zm2VP0kHl1M&list=PL6535748F59DCA484) + +- [ ] [MIT 6.034 Artificial Intelligence, Fall 2010 (30 videos)](https://www.youtube.com/playlist?list=PLUl4u3cNGP63gFHB6xb-kVBiQHYe_4hSi) + +- [ ] [MIT 6.042J: Mathematics for Computer Science, Fall 2010 (25 videos)](https://www.youtube.com/watch?v=L3LMbpZIKhQ&list=PLB7540DEDD482705B) + +- [ ] [MIT 6.046: Design and Analysis of Algorithms (34 videos)](https://www.youtube.com/watch?v=2P-yW7LQr08&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp) + +- [ ] [MIT 6.824: Distributed Systems, Spring 2020 (20 videos)](https://www.youtube.com/watch?v=cQP8WApzIQQ&list=PLrw6a1wE39_tb2fErI4-WkMbsvGQk9_UB) + +- [ ] [MIT 6.851: Advanced Data Structures (22 videos)](https://www.youtube.com/watch?v=T0yzrZL1py0&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf&index=1) + +- [ ] [MIT 6.854: Advanced Algorithms, Spring 2016 (24 videos)](https://www.youtube.com/playlist?list=PL6ogFv-ieghdoGKGg2Bik3Gl1glBTEu8c) + +- [ ] [Harvard COMPSCI 224: Advanced Algorithms (25 videos)](https://www.youtube.com/playlist?list=PL2SOU6wwxB0uP4rJgf5ayhHWgw7akUWSf) + +- [ ] [MIT 6.858 Computer Systems Security, Fall 2014](https://www.youtube.com/watch?v=GqmQg-cszw4&index=1&list=PLUl4u3cNGP62K2DjQLRxDNRi0z2IRWnNh) + +- [ ] [Stanford: Programming Paradigms (27 videos)](https://www.youtube.com/playlist?list=PL9D558D49CA734A02) + +- [ ] [Introduction to Cryptography by Christof Paar](https://www.youtube.com/playlist?list=PL6N5qY2nvvJE8X75VkXglSrVhLv1tVcfy) + - [Course Website along with Slides and Problem Sets](http://www.crypto-textbook.com/) + +- [ ] [Mining Massive Datasets - Stanford University (94 videos)](https://www.youtube.com/playlist?list=PLLssT5z_DsK9JDLcT8T62VtzwyW9LNepV) + +- [ ] [Graph Theory by Sarada Herke (67 videos)](https://www.youtube.com/user/DrSaradaHerke/playlists?shelf_id=5&view=50&sort=dd) + +**[⬆ မာတိကာသို့ ပြန်သွားပါ](#မာတိကာ)** + +## Computer Science သင်ခန်းစာများ + +- [Directory of Online CS Courses](https://github.com/open-source-society/computer-science) +- [Directory of CS Courses (many with online lectures)](https://github.com/prakhar1989/awesome-courses) + +**[⬆ မာတိကာသို့ ပြန်သွားပါ](#မာတိကာ)** + +## Algorithms implementation + +- [Multiple Algorithms implementation by Princeton University](https://algs4.cs.princeton.edu/code) + +**[⬆ မာတိကာသို့ ပြန်သွားပါ](#မာတိကာ)** + +## စာတမ်းများ + +- [Love classic papers?](https://www.cs.cmu.edu/~crary/819-f09/) +- [1978: Communicating Sequential Processes](http://spinroot.com/courses/summer/Papers/hoare_1978.pdf) + - [implemented in Go](https://godoc.org/github.com/thomas11/csp) +- [2003: The Google File System](http://static.googleusercontent.com/media/research.google.com/en//archive/gfs-sosp2003.pdf) + - ၂၀၁၂ တွင် Colossus မှ အစားထိုးခဲ့သည် +- [2004: MapReduce: Simplified Data Processing on Large Clusters]( http://static.googleusercontent.com/media/research.google.com/en//archive/mapreduce-osdi04.pdf) + - အများစုမှာ Cloud Dataflow မှ အစားထိုးခဲ့သလား? +- [2006: Bigtable: A Distributed Storage System for Structured Data](https://static.googleusercontent.com/media/research.google.com/en//archive/bigtable-osdi06.pdf) +- [2006: The Chubby Lock Service for Loosely-Coupled Distributed Systems](https://research.google.com/archive/chubby-osdi06.pdf) +- [2007: Dynamo: Amazon's Highly Available Key-value Store](http://s3.amazonaws.com/AllThingsDistributed/sosp/amazon-dynamo-sosp2007.pdf) + - Dynamo paper သည် NoSQL revolution ကို စတင်စေခဲ့သည် +- [2007: What Every Programmer Should Know About Memory (very long, and the author encourages skipping of some sections)](https://www.akkadia.org/drepper/cpumemory.pdf) +- 2012: AddressSanitizer: A Fast Address Sanity Checker: + - [paper](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/37752.pdf) + - [video](https://www.usenix.org/conference/atc12/technical-sessions/presentation/serebryany) +- 2013: Spanner: Google's Globally-Distributed Database: + - [paper](http://static.googleusercontent.com/media/research.google.com/en//archive/spanner-osdi2012.pdf) + - [video](https://www.usenix.org/node/170855) +- [2015: Continuous Pipelines at Google](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/43790.pdf) +- [2015: High-Availability at Massive Scale: Building Google's Data Infrastructure for Ads](https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/44686.pdf) +- [2015: How Developers Search for Code: A Case Study](http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/43835.pdf) +- နောက်ထပ် စာတမ်းများ: [1,000 papers](https://github.com/0voice/computer_expert_paper) + +**[⬆ မာတိကာသို့ ပြန်သွားပါ](#မာတිကာ)** + +## LICENSE + +[CC-BY-SA-4.0](./LICENSE.txt) \ No newline at end of file