В этом репозитории содержатся базовые JavaScript-примеры
многих популярных алгоритмов и структур данных.
В этом репозитории содержатся базовые JavaScript-примеры многих популярных алгоритмов и структур данных.
Для каждого алгоритма и структуры данных есть свой файл README
с соответствующими пояснениями и ссылками на материалы для дальнейшего
изучения (в том числе и ссылки на видеоролики в Ютубе).
Для каждого алгоритма и структуры данных есть свой файл README с соответствующими пояснениями и ссылками на материалы для дальнейшего изучения (в том числе и ссылки на видеоролики в YouTube).
*☝ Замечание: этот репозиторий предназначен только для
учебно-исследовательских целей (**не** для продакшена).*
*☝ Замечание: этот репозиторий предназначен для учебно-исследовательских целей (**не** для использования в продакшн-системах).*
## Структуры данных
Структура данных — определённый способ систематизации и хранения данных в компьютере таким образом,
чтобы они могли быть легко доступны и изменяемы. Структура данных — совокупность коллекции значений
данных, взаимосвязей между ними и функций или операций, которые могут применяться к данным.
Структура данных (англ. data structure) — программная единица, позволяющая хранить и обрабатывать множество однотипных и/или логически связанных данных в вычислительной технике. Для добавления, поиска, изменения и удаления данных структура данных предоставляет некоторый набор функций, составляющих её интерфейс.
Алгоритм — однозначная спецификация по решению целого ряда задач (иными словами,
это список правил, чётко определяющих ту или иную последовательность операций).
Алгоритм — конечная совокупность точно заданных правил решения некоторого класса задач или набор инструкций, описывающих порядок действий исполнителя для решения некоторой задачи.
`B`— Новичок, `A` — Продвинутый
`B`- Базовый уровень, `A` - Продвинутый уровень
### Тематическое разделение алгоритмов
### Алгоритмы по тематике
* **Математика**
* `B` [Битовые манипуляции](src/algorithms/math/bits) — получение/запись/сброс/обновление битов, умножение/деление на 2, сделать отрицательным и т.п.
@ -84,11 +77,11 @@ _Читать на других языках:_
* `A` [Сочетания](src/algorithms/sets/combinations) (с повторениями и без повторений)
* `A` [Наибольшая общая подпоследовательность](src/algorithms/sets/longest-common-subsequence)
Парадигма программирования — общий метод или подход, лежащий в основе целого класса алгоритмов.
Понятие "парадигма программирования" является более абстрактным по отношению к понятию "алгоритм",
которое в свою очередь является более абстрактным по отношению к понятию "компьютерная пограмма".
Парадигма программирования — общий метод или подход, лежащий в основе целого класса алгоритмов. Понятие "парадигма программирования" является более абстрактным по отношению к понятию "алгоритм", которое в свою очередь является более абстрактным по отношению к понятию "компьютерная программа".
* **Алгоритмы полного перебора** — поиск лучшего решения исчерпыванием всевозможных вариантов
* **Поиск с возвратом (бэктрекинг)** — при поиске решения многократно делается попытка расширить текущее частичное решение. Если расширение
невозможно, то происходит возврат к предыдущему более короткому частичному решению, и делается попытка его расширить другим возможным способом.
Обычно используется обход пространства состояний в глубину.
* **Поиск с возвратом (бэктрекинг)** — при поиске решения многократно делается попытка расширить текущее частичное решение. Если расширение невозможно, то происходит возврат к предыдущему более короткому частичному решению, и делается попытка его расширить другим возможным способом. Обычно используется обход пространства состояний в глубину.
* `A` [Комбинации сумм](src/algorithms/sets/combination-sum) — нахождение всех комбинаций, сумма каждой из которых равна заданному числу
* **Метод ветвей и границ** — основан на упорядоченном переборе решений и рассмотрении только тех из них, которые являются перспективными
(по тем или иным признакам) и отбрасывании бесперспективных множеств решений. Обычно используется обход в ширину в совокупности с обходом
дерева пространства состояний в глубину.
* **Метод ветвей и границ** — основан на упорядоченном переборе решений и рассмотрении только тех из них, которые являются перспективными (по тем или иным признакам) и отбрасывании бесперспективных множеств решений. Обычно используется обход в ширину в совокупности с обходом дерева пространства состояний в глубину.
## Команды по использованию репозитория
## Как использовать этот репозиторий
**Установка всех зависимостей**
```
npm install
```
**Запустить ESLint**
**Запуск ESLint**
Возможно, эта команда потребуется Вам для проверки качества кода.
Эта команда может потребоваться вам для проверки качества кода.
```
npm run lint
```
**Запустить все тесты**
**Запуск всех тестов**
```
npm test
```
**Запустить определённый тест**
**Запуск определённого теста**
```
npm test -- 'LinkedList'
```
**Playground**
**Песочница**
Вы можете поэкспериментировать с алгоритмами и структурами данных в файле `./src/playground/playground.js`
Вы можете экспериментировать с алгоритмами и структурами данных в файле `./src/playground/playground.js`
(файл `./src/playground/__test__/playground.test.js` предназначен для написания тестов).
Для проверки работоспособности вашего кода используйте команду:
@ -254,8 +243,7 @@ npm test -- 'playground'
### Нотация «О» большое
*Нотация «О» большое* используется для классификации алгоритмов в соответствии с ростом времени выполнения и затрачиваемой памяти при увеличении размера входных данных.
На диаграмме ниже представлены общие порядки роста алгоритмов в соответствии с нотацией «О» большое.
*Нотация «О» большое* используется для классификации алгоритмов в соответствии с ростом времени выполнения и затрачиваемой памяти при увеличении размера входных данных. На диаграмме ниже представлены общие порядки роста алгоритмов в соответствии с нотацией «О» большое.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.