pestler / Javascript-algorithms

πŸ“ Algorithms and data structures implemented in JavaScript with explanations and links to further readings

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Алгоритмы ΠΈ структуры Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° JavaScript

CI codecov

Π’ этом Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ содСрТатся Π±Π°Π·ΠΎΠ²Ρ‹Π΅ JavaScript-ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΌΠ½ΠΎΠ³ΠΈΡ… популярных Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² ΠΈ структур Π΄Π°Π½Π½Ρ‹Ρ….

Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° ΠΈ структуры Π΄Π°Π½Π½Ρ‹Ρ… Π΅ΡΡ‚ΡŒ свой Ρ„Π°ΠΉΠ» README с ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΠΈ пояснСниями ΠΈ ссылками Π½Π° ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹ для дальнСйшСго изучСния (Π² Ρ‚ΠΎΠΌ числС ΠΈ ссылки Π½Π° Π²ΠΈΠ΄Π΅ΠΎΡ€ΠΎΠ»ΠΈΠΊΠΈ Π² YouTube).

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° Π΄Π°Π½Π½Ρ‹Ρ… (Π°Π½Π³Π». data structure) β€” программная Π΅Π΄ΠΈΠ½ΠΈΡ†Π°, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π°Ρ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΈ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ мноТСство ΠΎΠ΄Π½ΠΎΡ‚ΠΈΠΏΠ½Ρ‹Ρ… ΠΈ/ΠΈΠ»ΠΈ логичСски связанных Π΄Π°Π½Π½Ρ‹Ρ… Π² Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Ρ‚Π΅Ρ…Π½ΠΈΠΊΠ΅. Для добавлСния, поиска, измСнСния ΠΈ удалСния Π΄Π°Π½Π½Ρ‹Ρ… структура Π΄Π°Π½Π½Ρ‹Ρ… прСдоставляСт Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… Π΅Ρ‘ интСрфСйс.

B - Π‘Π°Π·ΠΎΠ²Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ, A - ΠŸΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ

Алгоритмы

Алгоритм β€” конСчная ΡΠΎΠ²ΠΎΠΊΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ Ρ‚ΠΎΡ‡Π½ΠΎ Π·Π°Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€Π°Π²ΠΈΠ» Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ класса Π·Π°Π΄Π°Ρ‡ ΠΈΠ»ΠΈ Π½Π°Π±ΠΎΡ€ инструкций, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΡ… порядок дСйствий исполнитСля для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ.

B - Π‘Π°Π·ΠΎΠ²Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ, A - ΠŸΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ

Алгоритмы ΠΏΠΎ Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ΅

Алгоритмы ΠΏΠΎ ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠ΅ программирования

ΠŸΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠ° программирования β€” ΠΎΠ±Ρ‰ΠΈΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΈΠ»ΠΈ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄, Π»Π΅ΠΆΠ°Ρ‰ΠΈΠΉ Π² основС Ρ†Π΅Π»ΠΎΠ³ΠΎ класса Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ². ΠŸΠΎΠ½ΡΡ‚ΠΈΠ΅ "ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠ° программирования" являСтся Π±ΠΎΠ»Π΅Π΅ абстрактным ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ ΠΊ ΠΏΠΎΠ½ΡΡ‚ΠΈΡŽ "Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ", ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ являСтся Π±ΠΎΠ»Π΅Π΅ абстрактным ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ ΠΊ ΠΏΠΎΠ½ΡΡ‚ΠΈΡŽ "ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Π°Ρ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°".

Как ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ этот Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ

Установка всСх зависимостСй

npm install

Запуск ESLint

Π­Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π²Π°ΠΌ для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ качСства ΠΊΠΎΠ΄Π°.

npm run lint

Запуск всСх тСстов

npm test

Запуск ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠ³ΠΎ тСста

npm test -- 'LinkedList'

ΠŸΠ΅ΡΠΎΡ‡Π½ΠΈΡ†Π°

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ с Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°ΠΌΠΈ ΠΈ структурами Π΄Π°Π½Π½Ρ‹Ρ… Π² Ρ„Π°ΠΉΠ»Π΅ ./src/playground/playground.js (Ρ„Π°ΠΉΠ» ./src/playground/__test__/playground.test.js ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для написания тСстов).

Для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ работоспособности вашСго ΠΊΠΎΠ΄Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

npm test -- 'playground'

ПолСзная информация

Бсылки

β–Ά О структурах Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°Ρ…

Нотация «О» большоС

Нотация «О» большоС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для классификации Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² Π² соотвСтствии с ростом Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния ΠΈ Π·Π°Ρ‚Ρ€Π°Ρ‡ΠΈΠ²Π°Π΅ΠΌΠΎΠΉ памяти ΠΏΡ€ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…. На Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ΅ Π½ΠΈΠΆΠ΅ прСдставлСны ΠΎΠ±Ρ‰ΠΈΠ΅ порядки роста Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² Π² соотвСтствии с Π½ΠΎΡ‚Π°Ρ†ΠΈΠ΅ΠΉ «О» большоС.

Big O graphs

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: Big O Cheat Sheet.

НиТС прСдставлСны часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ обозначСния Π² Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ «О» большоС, Π° Ρ‚Π°ΠΊΠΆΠ΅ сравнСниС ΠΈΡ… ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚Π΅ΠΉ Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ€Π°Π·ΠΌΠ΅Ρ€Π°Ρ… Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ….

Нотация «О» большоС 10 элСмСнтов 100 элСмСнтов 1000 элСмСнтов
O(1) 1 1 1
O(log N) 3 6 9
O(N) 10 100 1000
O(N log N) 30 600 9000
O(N^2) 100 10000 1000000
O(2^N) 1024 1.26e+29 1.07e+301
O(N!) 3628800 9.3e+157 4.02e+2567

БлоТности ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π² структурах Π΄Π°Π½Π½Ρ‹Ρ…

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° Π΄Π°Π½Π½Ρ‹Ρ… ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Поиск Вставка Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ
Массив 1 n n n
Π‘Ρ‚Π΅ΠΊ n n 1 1
ΠžΡ‡Π΅Ρ€Π΅Π΄ΡŒ n n 1 1
Бвязный список n n 1 n
Π₯Сш-Ρ‚Π°Π±Π»ΠΈΡ†Π° - n n n Для идСальной Ρ…Π΅Ρˆ-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ β€” O(1)
Π”Π²ΠΎΠΈΡ‡Π½ΠΎΠ΅ Π΄Π΅Ρ€Π΅Π²ΠΎ поиска n n n n Π’ сбалансированном Π΄Π΅Ρ€Π΅Π²Π΅ β€” O(log(n))
B-Π΄Π΅Ρ€Π΅Π²ΠΎ log(n) log(n) log(n) log(n)
ΠšΡ€Π°ΡΠ½ΠΎ-Ρ‡Ρ‘Ρ€Π½ΠΎΠ΅ Π΄Π΅Ρ€Π΅Π²ΠΎ log(n) log(n) log(n) log(n)
АВЛ-Π΄Π΅Ρ€Π΅Π²ΠΎ log(n) log(n) log(n) log(n)
Π€ΠΈΠ»ΡŒΡ‚Ρ€ Π‘Π»ΡƒΠΌΠ° - 1 1 - Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π»ΠΎΠΆΠ½ΠΎ-ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ срабатывания

БлоТности Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² сортировки

НаимСнованиС Π›ΡƒΡ‡ΡˆΠΈΠΉ случай Π‘Ρ€Π΅Π΄Π½ΠΈΠΉ случай Π₯ΡƒΠ΄ΡˆΠΈΠΉ случай ΠŸΠ°ΠΌΡΡ‚ΡŒ Π£ΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ
Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΏΡƒΠ·Ρ‹Ρ€ΡŒΠΊΠΎΠΌ n n2 n2 1 Π”Π°
Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° вставками n n2 n2 1 Π”Π°
Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° Π²Ρ‹Π±ΠΎΡ€ΠΎΠΌ n2 n2 n2 1 НСт
Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΊΡƒΡ‡Π΅ΠΉ n log(n) n log(n) n log(n) 1 НСт
Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° слияниСм n log(n) n log(n) n log(n) n Π”Π°
Быстрая сортировка n log(n) n log(n) n2 log(n) НСт Быстрая сортировка ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ выполняСтся с использованиСм O(log(n)) Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ памяти
Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° Π¨Π΅Π»Π»Π° n log(n) зависит ΠΎΡ‚ Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹Ρ… шагов n (log(n))2 1 НСт
Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° подсчётом n + r n + r n + r n + r Π”Π° r β€” наибольшСС число Π² массивС
ΠŸΠΎΡ€Π°Π·Ρ€ΡΠ΄Π½Π°Ρ сортировка n * k n * k n * k n + k Π”Π° k β€” Π΄Π»ΠΈΠ½Π° самого Π΄Π»ΠΈΠ½Π½ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π°

About

πŸ“ Algorithms and data structures implemented in JavaScript with explanations and links to further readings

License:MIT License


Languages

Language:JavaScript 100.0%