Skip to content

Latest commit

 

History

History
299 lines (258 loc) · 29.9 KB

README.ru-RU.md

File metadata and controls

299 lines (258 loc) · 29.9 KB

JavaScript: Алгоритмы и Структуры Данных

Build Status codecov

Этот репозиторий содержит JavaScript-примеры многих популярных алгоритмов и структур данных.

Каждый алгоритм и структура данных имеет собственный отдельный README файл с объяснением и ссылками для получения подробной информации (включая видеоролики на YouTube).

Read this in other languages: English, 简体中文, 繁體中文, 한국어, 日本語, Polski, Français, Español, Português

☝Обратите внимание, проект предназначен для использования только в учебных и исследовательских целях - не предназначен для использования в реальных проектах.

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

Структура данных - это особый способ организации и хранения данных в компьютере, который позволяет данным быть доступными и эффективно изменяться. Также, структура данных - это коллекция данных, содержащая зависимости между ними и функции или операции, работающие с данными.

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'

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

Ссылки на источники

▶ Data Structures and Algorithms on YouTube

Big O нотации

Big O нотации используется для классификации алгоритмов в соответствии с тем, как их требования к времени выполнения или пространству растут по мере увеличения размера входных данных. На диаграмме ниже вы можете найти наиболее распространенные порядки роста алгоритмов, указанных в нотации Big O.

Big O graphs

Источник: Big O Cheat Sheet.

Ниже приведен список некоторых из наиболее часто используемых обозначений Big O и их сравнение производительности с различными размерами входных данных.

Big O нотация Вычисления для 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 - Возможны ложные срабатывания при поиске

Сложность операций сортировки

Name Лучшее Среднее Худшее Память Стабильность Комментарий
Пузырьковая Сортировка 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 No
Сортировка Подсчётом n + r n + r n + r n + r Да r - самое большое число в массиве
Поразрядная Сортировка n * k n * k n * k n + k Да k - длина самого длинного ключа