Skip to content

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

License

Notifications You must be signed in to change notification settings

cyberspacedk/Javascript-algorithms

Β 
Β 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Алгоритмы ΠΈ структуры Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° 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

Resources

License

Code of conduct

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • JavaScript 100.0%