DavinJ-0316 / javascript-algorithms-1

📝 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

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

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

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

Структура данных (англ. data structure) — программная единица, позволяющая хранить и обрабатывать множество однотипных и/или логически связанных данных в вычислительной технике. Для добавления, поиска, изменения и удаления данных структура данных предоставляет некоторый набор функций, составляющих её интерфейс.

B - Базовый уровень, A - Продвинутый уровень

Алгоритмы

Алгоритм — конечная совокупность точно заданных правил решения некоторого класса задач или набор инструкций, описывающих порядок действий исполнителя для решения некоторой задачи.

B - Базовый уровень, A - Продвинутый уровень

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

Ссылки

▶ О структурах данных и алгоритмах

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

Нотация «О» большое используется для классификации алгоритмов в соответствии с ростом времени выполнения и затрачиваемой памяти при увеличении размера входных данных. На диаграмме ниже представлены общие порядки роста алгоритмов в соответствии с нотацией «О» большое.

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:TypeScript 96.7%Language:JavaScript 3.3%