Skip to content

Latest commit

 

History

History
358 lines (302 loc) · 27.4 KB

README.uz-UZ.md

File metadata and controls

358 lines (302 loc) · 27.4 KB

JavaScript algoritmlari va ma'lumotlar tuzilmalari

CI codecov repo size

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

Yodda tuting, bu loyiha faqat o'quv va tadqiqot maqsadida ishlatilishi uchun mo'ljallangan va ishlab chiqarishda ishlatilishi mumkin emas.

Ma'lumotlar tuzilmalari

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

Algoritmlar

Algoritm muammolar sinfini qanday hal qilishning aniq spetsifikatsiyasi. Bu operatsiyalar ketma-ketligini aniqlaydigan qoidalar to'plami.

B - Boshlang'ich, A - Ilg'or

Mavzu bo'yicha algoritmlar

Paradigma bo'yicha algoritmlar

Algorithmic 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.

Ushbu repozitoriyadan qanday foydalanish kerak

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'

Foydali ma'lumotlar

Manbalar

Big O Notation

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.

Big O grafiklar

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 tuzilmalarining operatsiyalari murakkabligi

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

Massivlarni saralash algoritmlarining murakkabligi

Nomi Eng yaxshi O'rta Eng yomon Xotira Barqaror Izohlar
Pufakcha tartiblash n n2 n2 1 Ha
Kiritish tartibi n n2 n2 1 Ha
Tanlash tartibi n2 n2 n2 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) n2 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))2 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

Loyihani qo'llab-quvvatlovchilar

Siz ushbu loyihani ❤️️ GitHub yoki ❤️️ Patreon orqali qo'llab-quvvatlashingiz mumkin.

Ushbu loyihani qo'llab-quvvatlagan odamlar ∑ = 1

Muallif

@trekhleb

A few more projects and articles about JavaScript and algorithms on trekhleb.dev