README.uz-UZ.md
Bu repozitoriyada JavaScript-ga asoslangan ko'plab mashhur algoritmlar va ma'lumotlar tuzilmalarining namunalari mavjud.
Har bir algoritm va ma'lumotlar tuzilmasining alohida README fayli bo'lib, unda tegishli tushuntirishlar va qo'shimcha o'qish uchun havolalar (shu jumladan YouTube videolariga ham havolalar) mavjud.
Read this in other languages: 简体中文, 繁體中文, 한국어, 日本語, Polski, Français, Español, Português, Русский, Türkçe, Italiana, Bahasa Indonesia, Українська, Arabic, Tiếng Việt, Deutsch, Uzbek עברית
Ma'lumotlar tuzilmasi - bu kompyuterda ma'lumotlarni samarali tarzda olish va o'zgartirish uchun ularni tashkil etish va saqlashning ma'lum bir usuli. Ayniqsa, ma'lumotlar tuzilmasi ma'lumot qiymatlarining to'plami, ular orasidagi munosabatlar va ma'lumotlarga qo'llanilishi mumkin bo'lgan funksiyalar yoki operatsiyalardir.
B - Boshlang'ich, A - Ilg'or
B Bog'langan ro'yxatB Ikki marta bog'langan ro'yxatB NavbatB StekB Hash jadvaliB Heap - maksimal va minimal heap versiyalariB Ustuvor navbatA TrieA Daraxt
A Ikkilik qidiruv daraxtA AVL daraxtA Qizil-qora daraxtA Segment daraxt - min/max/sum diapazon so'rovlari bilan misollarA Fenwick daraxt (ikkilik indeksli daraxt)A Graf (yo'naltirilgan hamda yo'naltirilmagan)A Ajratilgan to'plam - union-find ma'lumotlar strukturasi yoki merge-find to'plamiA Bloom filtriA LRU keshi - Eng kam ishlatilgan (LRU) keshiAlgoritm muammolar sinfini qanday hal qilishning aniq spetsifikatsiyasi. Bu operatsiyalar ketma-ketligini aniqlaydigan qoidalar to'plami.
B - Boshlang'ich, A - Ilg'or
B Bit manipulatsiyasi - bitlarni qo'yish/olish/yangilash/tozalash, ikkilikka ko'paytirish/bo'lish, manfiy qilish va hokazo.B Ikkilik suzuvchi nuqta - suzuvchi nuqtali sonlarning ikkilik tasviri.B FaktorialB Fibonachchi raqam - klassik va yopiq shakldagi versiyalarB Asosiy omillar - tub omillarni topish va ularni Xardi-Ramanujan teoremasi yordamida sanashB Birlamchilik testi (sinov bo'linish usuli)B Evklid algoritmi - eng katta umumiy bo'luvchini (EKUB) hisoblashB Eng kichik umumiy karrali (EKUK)B Eratosfen elagi - berilgan chegaragacha barcha tub sonlarni topishB Ikkining darajasimi - raqamning ikkining darajasi ekanligini tekshirish (sodda va bitli algoritmlar)B Paskal uchburchagiB Kompleks sonlar - kompleks sonlar va ular bilan asosiy amallarB Radian & Daraja - radianlarni darajaga va orqaga aylantirishB Tez ko'tarishB Horner metodi - polinomlarni baholashB Matritsalar - matritsalar va asosiy matritsa operatsiyalari (ko'paytirish, transpozitsiya va boshqalar).B Evklid masofasi - ikki nuqta/vektor/matritsa orasidagi masofaA Butun sonlarni bo'lishA Kvadrat ildiz - Nyuton metodiA Liu Hui π algoritmi - N-gonlarga asoslangan π ning taxminiy hisoblariA Diskret Furye transformatsiyasi - vaqt funksiyasini (signalni) uni tashkil etuvchi chastotalarga ajratishB Karteziya maxsuloti - bir nechta to'plamlarning ko'paytmasiB Fisher–Yates Shuffle - chekli ketma-ketlikni tasodifiy almashtirishA Power Set - to'plamning barcha kichik to'plamlari (bitwise, backtracking va kaskadli echimlar)A Permutatsiyalar (takroriyalash bilan va takroriyalashsiz)A Kombinatsiyalar (takroriyalash bilan va takroriyalashsiz)A Eng uzun umumiy ketma-ketlik (LCS)A Eng uzun ortib boruvchi ketma-ketlikA Eng qisqa umumiy ketma-ketlik (SCS)A Knapsack muammosi - "0/1" va "Bir-biriga bog'lanmagan"A Maksimal kichik massiv - Toʻliq kuch va dinamik dasturlash (Kadane usuli) versiyalariA Kombinatsiya yig'indisi - ma'lum summani tashkil etuvchi barcha kombinatsiyalarni topishB Hamming masofasi - belgilarning bir-biridan farq qiladigan pozitsiyalar soniB Palindrom - satrning teskari tomoni ham bir xil ekanligini tekshirishA Levenshtein masofasi - ikki ketma-ketlik o'rtasidagi minimal tahrirlash masofasiA Knuth–Morris–Pratt Algoritmi (KMP Algoritmi) - kichik qatorlarni qidirish (mosh keluvchi naqshni qidirish)A Z Algoritmi - kichik qatorlarni qidirish (mosh keluvchi naqshni qidirish)A Rabin Karp Algoritmi - kichik qatorlarni qidirishA Eng uzun umumiy kichik matnA Regulyar ifoda moslashuvi (RegEx)B Linear qidirishB Jump qidirish (yoki Blok qidirish) - saralangan qatorda qidirishB Ikkilik qidirish - saralangan qatorda qidirishB Interpolatsiya qidirish - bir tekis taqsimlangan saralangan qatorda qidirishB Pufakcha tartiblashB Tanlash tartibiB Kiritish tartibiB Heap tartibiB Birlashtirish tartibiB Tezkor saralash - joyida va joyida bo'lmagan amalga oshirishB Shell tartiblashB Sanash tartibiB Radiksli tartiblashB Bucket tartiblashB Birinchi-pastga qarab qidirish (Depth-First Search)B Birinchi-yonga qarab qidirish (Breadth-First Search)B Birinchi-pastga qarab qidirish (Depth-First Search)B Birinchi-yonga qarab qidirish (Breadth-First Search)B Kruskal Algoritmi - og'irlikdagi yo'naltirilmagan grafik uchun Minimal kengayuvchi daraxtni (MST) topishA Dijkstra Algoritmi - grafikning bir cho'qqisidan qolgan barcha nuqtalarga eng qisqa yo'llarni topishA Bellman-Ford Algoritmi - grafikning bir cho'qqisidan qolgan barcha nuqtalarga eng qisqa yo'llarni topishA Floyd-Warshall Algoritmi - grafikning barcha uchlari orasidagi eng qisqa masofalarni topishA Siklni aniqlash - yo'naltirilgan va yo'naltirilmagan grafiklar uchun (DFS va Disjoint Set-ga asoslangan versiyalar)A Prim Algoritmi - og'irlikdagi yo'naltirilmagan grafik uchun Minimal kengayuvchi daraxtni (MST) topishA Topologik saralash - DFS metodiA Artikulyatsiya nuqtalari - Tarjan algoritmi (DFS asosida)A Ko'priklar - DFS asosidagi algoritmA Eyler yo'li va Eyler sxemasi - Fleury algoritmi - Har bir chekkaga bir marta tashrif buyurishA Gamilton sikli - Har bir cho'qqiga bir marta tashrif buyurishA Kuchli bog'langan komponentlar - Kosaraju algoritmiA Sayohatchi sotuvchi muammosi - har bir shaharga tashrif buyuradigan va kelib chiqqan shaharga qaytib keladigan eng qisqa yo'lB Polynomial Hash - polinomga asoslangan hash funktsiyasiB Rail Fence Cipher - xabarlarni kodlash uchun transpozitsiya shifrlash algoritmiB Caesar Cipher - oddiy almashtirish shifridirB Hill Cipher - chiziqli algebraga asoslangan almashtirish shifriB NanoNeuron - Mashinalar aslida qanday o'rganishi mumkinligini ko'rsatadigan 7 ta oddiy JS funksiyasi (forward/backward tarqalish)B k-NN - eng yaqin qo'shnilarni tasniflash algoritmiB k-Means - k-Means kalsterlash algoritmiB Seam Carving - kontentga moslashuvchan rasm o'lchamini o'zgartirish algoritmiB Weighted Random - elementlarning og'irligi asosida ro'yxatdan tasodifiy elementni tanlashA Genetik algoritm - avtoturargohni o'rgatish uchun genetik algoritm qanday qo'llanilishiga misol.B Xanoy minorasiB Kvadrat matritsaning aylanishi - joyidagi algoritmB Sakrash o'yini - orqaga qaytish, dinamik dasturlash (yuqoridan pastga + pastdan yuqoriga) va ochko'z misollarB Noyob yo'llar - orqaga qaytish, dinamik dasturlash va Paskal uchburchagiga asoslangan misollaB Yomg'ir teraslari - yomg'ir suvini ushlab turish muammosi (dinamik dasturlash va qo'pol kuch versiyalari)B Rekursiv zinapoya - yuqoriga chiqish yo'llari sonini hisoblash (4 ta echim)B Aksiyalarni sotib olish va sotish uchun eng yaxshi vaqt - bo'linib-zabt etish va bir marta o'tish misollariA N-Queens MuommosiA Ritsar sayohatiAlgorithmic paradigm - bu algoritmlar sinfini loyihalashtirishga asos bo'lib xizmat qiladigan umumiy usul yoki yondashuv. Bu algoritm tushunchasidan yuqori darajadagi abstraktsiya bo'lib, algoritm kompyuter dasturi tushunchasidan yuqori darajadagi abstraktsiya bo'lgani kabi.
Brute Force - barcha imkoniyatlarni ko'rib chiqib va eng yaxshi echimni tanlash
B Chiziqli qidirishB Yomg'irli teraslar - yomg'ir suvini to'plash muammosiB Rekursiv zinapoya - cho'qqiga chiqish yo'llari sonini hisoblashA Maksimal kichik massivA Sayohatchi sotuvchi muammosi - har bir shaharga tashrif buyuradigan va kelib chiqqan shaharga qaytib keladigan eng qisqa yo'lA Diskret Furye transformatsiyasi - vaqt funksiyasini (signalni) uni tashkil etuvchi chastotalarga ajratishGreedy - kelajakni o'ylamasdan, hozirgi vaqtda eng yaxshi variantni tanlash
B Sakrash o'yiniA Bog'lanmagan yukxalta muammosiA Dijkstra Algoritmi - grafikning bir cho'qqisidan qolgan barcha nuqtalarga eng qisqa yo'llarni topishA Prim Algoritmi - og'irlikdagi yo'naltirilmagan grafik uchun Minimal kengayuvchi daraxtni (MST) topishA Kruskal Algoritmi - og'irlikdagi yo'naltirilmagan grafik uchun Minimal kengayuvchi daraxtni (MST) topishDivide and Conquer - muammoni kichikroq qismlarga bo'lib va keyin bu qismlarni hal qilish
B Ikkilik qidiruvB Xanoy minorasiB Paskal uchburchagiB Evklid Algoritmi - eng katta umumiy bo'luvchini (EKUB) hisoblashB Birlashtirish tartibiB Tezkor saralashB Birinchi-pastga qarab qidirish daraxti (DFS)B Birinchi-pastga qarab qidirish grafigi (DFS)B Matritsalar - turli shakldagi matritsalarni hosil qilish va kesib o'tishB Sakrash o'yiniB Tez ko'tarishB Aksiyalarni sotib olish va sotish uchun eng yaxshi vaqt - bo'linib-zabt etish va bir marta o'tish misollariA Permutatsiyalar (takroriyalash bilan va takroriyalashsiz)A Kombinatsiyalar (takroriyalash bilan va takroriyalashsiz)A Maksimal kichik massivDinamik dasturlash - ilgari topilgan kichik yechimlar yordamida yechim yaratish
B Fibonachchi raqamB Sakrash o'yiniB Noyob yo'llarB Yomg'ir teraslari - yomg'ir suvini to'plash muammosiB Recursive Staircase - count the number of ways to reach to the topB Seam Carving - kontentga moslashuvchan rasm o'lchamini o'zgartirish algoritmiA Levenshtein masofasi - ikki ketma-ketlik o'rtasidagi minimal tahrirlash masofasiA Eng uzun umumiy ketma-ketlik (LCS)A Eng uzun umumiy kichik matnA Eng uzun ortib boruvchi ketma-ketlikA Eng qisqa umumiy ketma-ketlikA 0/1 Knapsak muommosiA Butun sonlarni bo'lishA Maksimal kichik massivA Bellman-Ford Algoritmi - grafikning bir cho'qqisidan qolgan barcha nuqtalarga eng qisqa yo'llarni topishA Floyd-Warshall Algoritmi -grafikning barcha uchlari orasidagi eng qisqa masofalarni topishA Regulyar ifoda moslashuviBacktracking - brute forcega o'xshab, barcha mumkin bo'lgan yechimlarni generatsiya qilishga harakat qiladi, lekin har safar keyingi yechimni yaratganingizda, yechim barcha shartlarga javob beradimi yoki yo'qligini tekshirasiz va shundan keyingina keyingi yechimlarni ishlab chiqarishni davom ettirasiz. Aks holda, orqaga qaytib, yechim topishning boshqa yo'liga o'tasiz. Odatda state-space ning DFS-qidiruvi ishlatiladi.
B Sakrash o'yiniB Noyob yo'llarB Power Set - to'plamning barcha kichik to'plamlariA Gamilton sikli - Har bir cho'qqiga bir marta tashrif buyurishA N-Queens muommosiA Ritsar sayohatiA Kombinatsiya yig'indisi - ma'lum summani tashkil etuvchi barcha kombinatsiyalarni topishBranch & Bound - shu paytgacha topilgan eng arzon echimdan kattaroq xarajatlarga ega qisman echimlarni bekor qilish uchun, backtracking qidiruvining har bir bosqichida topilgan eng arzon echimni eslab qoling va shu paytgacha topilgan eng arzon yechim narxidan muammoni eng kam xarajatli yechim narxining past chegarasi sifatida foydalaning. Odatda state-space daraxtining DFS o'tishi bilan birgalikda BFS traversal qo'llaniladi.
Barcha dependensiylarni o'rnating
npm install
ESLint ni ishga tushiring
Kod sifatini tekshirish uchun ESLint ni ishga tushirishingiz mumkin.
npm run lint
Barcha testlarni ishga tushuring
npm test
Testlarni nom bo'yicha ishga tushirish
npm test -- 'LinkedList'
Muammolarni bartaraf qilish (Troubleshooting)
Agar linting yoki sinov muvaffaqiyatsiz bo'lsa, node_modules papkasini o'chirib, npm paketlarini qayta o'rnatishga harakat qiling:
rm -rf ./node_modules
npm i
Shuningdek, to'g'ri Node versiyasidan foydalanayotganingizga ishonch hosil qiling (>=16). Agar Node versiyasini boshqarish uchun nvm dan foydalanayotgan bo'lsangiz, loyihaning ildiz papkasidan nvm use ni ishga tushiring va to'g'ri versiya tanlanadi.
O'yin maydoni (Playground)
./src/playground/playground.js faylida ma'lumotlar strukturalari va algoritmlar bilan o'ynashingiz, ./src/playground/test/playground.test.js faylida esa ular uchun testlar yozishingiz mumkin.
Shundan so'ng, playground kodingiz kutilgandek ishlashini tekshirish uchun quyidagi buyruqni ishga tushirishingiz kifoya:
npm test -- 'playground'
Big O notation algoritmlarni kirish hajmi oshgani sayin ularning ishlash vaqti yoki bo'sh joy talablari qanday o'sishiga qarab tasniflash uchun ishlatiladi. Quyidagi jadvalda siz Big O notatsiyasida ko'rsatilgan algoritmlarning o'sishining eng keng tarqalgan tartiblarini topishingiz mumkin.
Manba: Big O Cheat Sheet.
Quyida eng ko'p qo'llaniladigan Big O notatsiyalarining ro'yxati va ularning kirish ma'lumotlarining turli o'lchamlariga nisbatan ishlashini taqqoslash keltirilgan.
| Big O Notatsiya | Turi | 10 ta element uchun hisob-kitoblar | 100 ta element uchun hisob-kitoblar | 1000 ta element uchun hisob-kitoblar |
|---|---|---|---|---|
| O(1) | O'zgarmas | 1 | 1 | 1 |
| O(log N) | Logarifmik | 3 | 6 | 9 |
| O(N) | Chiziqli | 10 | 100 | 1000 |
| O(N log N) | n log(n) | 30 | 600 | 9000 |
| O(N^2) | Kvadrat | 100 | 10000 | 1000000 |
| O(2^N) | Eksponensial | 1024 | 1.26e+29 | 1.07e+301 |
| O(N!) | Faktorial | 3628800 | 9.3e+157 | 4.02e+2567 |
| Ma'lumotlar tuzilmalari | Kirish | Qidirish | Kiritish | O'chirish | Izohlar |
|---|---|---|---|---|---|
| Massiv | 1 | n | n | n | |
| Stak | n | n | 1 | 1 | |
| Navbat | n | n | 1 | 1 | |
| Bog'langan ro'yhat | n | n | 1 | n | |
| Hash jadval | - | n | n | n | Mukammal xash funksiyasi bo'lsa, xarajatlar O (1) bo'ladi. |
| Ikkilik qidiruv daraxti | n | n | n | n | Balanslangan daraxt narxida O(log(n)) bo'ladi. |
| B-daraxti | log(n) | log(n) | log(n) | log(n) | |
| Qizil-qora daraxt | log(n) | log(n) | log(n) | log(n) | |
| AVL Daraxt | log(n) | log(n) | log(n) | log(n) | |
| Bloom filtri | - | 1 | 1 | - | Qidiruv paytida noto'g'ri pozitivlar bo'lishi mumkin |
| Nomi | Eng yaxshi | O'rta | Eng yomon | Xotira | Barqaror | Izohlar |
|---|---|---|---|---|---|---|
| Pufakcha tartiblash | n | n<sup>2</sup> | n<sup>2</sup> | 1 | Ha | |
| Kiritish tartibi | n | n<sup>2</sup> | n<sup>2</sup> | 1 | Ha | |
| Tanlash tartibi | n<sup>2</sup> | n<sup>2</sup> | n<sup>2</sup> | 1 | Yo'q | |
| Heap tartibi | n log(n) | n log(n) | n log(n) | 1 | Yo'q | |
| Birlashtirish tartibi | n log(n) | n log(n) | n log(n) | n | Ha | |
| Tezkor saralash | n log(n) | n log(n) | n<sup>2</sup> | log(n) | Yo'q | Tezkor saralash odatda O(log(n)) stek maydoni bilan joyida amalga oshiriladi |
| Shell tartiblash | n log(n) | depends on gap sequence | n (log(n))<sup>2</sup> | 1 | Yo'q | |
| Sanash tartibi | n + r | n + r | n + r | n + r | Ha | r - massivdagi eng katta raqam |
| Radiksli tartiblash | n * k | n * k | n * k | n + k | Ha | k - eng uzun kalitning uzunligi |
Siz ushbu loyihani ❤️️ GitHub yoki ❤️️ Patreon orqali qo'llab-quvvatlashingiz mumkin.
Ushbu loyihani qo'llab-quvvatlagan odamlar ∑ = 1
A few more projects and articles about JavaScript and algorithms on trekhleb.dev