Алгоритми JavaScript та структури даних

October 22, 2025 · View on GitHub

CI codecov

Даний репозиторій приклади багатьох популярних алгоритмів та структур даних на основі JavaScript.

Кожен алгоритм та структура даних має свій окремий README-файл із відповідними поясненнями та посиланнями для подальшого вивчення (включаючи посилання на відео на YouTube).

Вивчення матеріалу на інших мовах: English, 简体中文, 繁體中文, 한국어, 日本語, Polski, Français, Español, Português, Русский, Türk, Italiana, Bahasa Indonesia, Arabic, Tiếng Việt, Deutsch, Uzbek עברית

Структури даних

Структура даних (в програмуванні) - це спосіб організації даних в комп'ютерах. Часто разом зі структурою даних пов'язується і специфічний перелік операцій, що можуть бути виконаними над даними, організованими в таку структуру. Точніше, структура даних - це сукупність даних цінності, взаємозв'язки між ними та функції або операції, до яких можна застосувати дані.

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'

Корисна інформація

Список літератури

▶ Структури даних та алгоритми на YouTube

Асимптотична нотація великого О (нотація Ландау)

Асимптотична нотація великого О (нотація Ландау) розповсюджена математична нотація для формального запису асимптотичної поведінки функцій. Широко вживається в теорії складності обчислень, інформатиці та математиці. Асимптотична нотація великого О

Джерело: Асимптотична нотація великого О.

Нижче наведено список деяких найбільш часто використовуваних позначень нотації Ландаута їх порівняння продуктивності з різними розмірами вхідних даних.

Нотація ЛандауОбчислення для 10 елементівОбчислення для 100 елементівОбчислення для 1000 елементів
O(1)111
O(log N)369
O(N)101001000
O(N log N)306009000
O(N^2)100100001000000
O(2^N)10241.26e+291.07e+301
O(N!)36288009.3e+1574.02e+2567

Складність операцій в структурі даних

Структура данихДоступПошукВставкаВидаленняКоментарі
Масив1nnn
Купаnn11
Чергаnn11
Зв’язаний списокnn1n
Хеш-таблиця-nnnУ разі ідеальної хеш-функції - O(1)
Бінарне дерево пошукуnnnnУ разі збалансованого дерева витрати становитимуть O (log (n))
Б-деревоlog(n)log(n)log(n)log(n)
Червоно-чорне деревоlog(n)log(n)log(n)log(n)
АВЛ-деревоlog(n)log(n)log(n)log(n)
Фільтр Блума-11-Під час пошуку можливі помилкові спрацьовування

Складність алгоритмів сортування масивів

НазваНайкращийСереднійНайгіршийПам'ятьСтабільністьКоментарі
Сортування бульбашкоюnn2n21Так
Сортування включеннямnn2n21Так
Сортування виборомn2n2n21Ні
Пірамідальне сортування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)n2log(n)НіШвидке сортування зазвичай виконується на місці з використанням O (log (n)) додаткової пам'яті
Сортування Шеллаn log(n)залежить від послідовності проміжківn (log(n))21Ні
Сортування підрахункомn + rn + rn + rn + rТакДе r - найбільше число в масиві
Сортування за розрядамиn * kn * kn * kn + kТакДе k - довжина найдовшого ключа

Патронати проекту

Ви можете підтримати цей проект через ❤️️ GitHub або ❤️️ Patreon.

Люди, які підтримують цей проект ∑ = 1

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