mirror of
https://github.com/trekhleb/javascript-algorithms.git
synced 2026-03-13 08:51:02 +08:00
Add README in Russian.
This commit is contained in:
@@ -1,14 +1,11 @@
|
||||
# Алгоритмы и структуры данных в JavaScript
|
||||
# Алгоритмы и структуры данных на JavaScript
|
||||
|
||||
[](https://travis-ci.org/trekhleb/javascript-algorithms)
|
||||
[](https://codecov.io/gh/trekhleb/javascript-algorithms)
|
||||
|
||||
В этом репозитории содержатся базовые JavaScript-примеры
|
||||
многих популярных алгоритмов и структур данных.
|
||||
В этом репозитории содержатся базовые JavaScript-примеры многих популярных алгоритмов и структур данных.
|
||||
|
||||
Для каждого алгоритма и структуры данных есть свой файл README
|
||||
с соответствующими пояснениями и ссылками на материалы для дальнейшего
|
||||
изучения (в том числе и ссылки на видеоролики в Ютубе).
|
||||
Для каждого алгоритма и структуры данных есть свой файл README с соответствующими пояснениями и ссылками на материалы для дальнейшего изучения (в том числе и ссылки на видеоролики в YouTube).
|
||||
|
||||
_Читать на других языках:_
|
||||
[_English_](https://github.com/trekhleb/javascript-algorithms/),
|
||||
@@ -21,16 +18,13 @@ _Читать на других языках:_
|
||||
[_Español_](README.es-ES.md),
|
||||
[_Português_](README.pt-BR.md)
|
||||
|
||||
*☝ Замечание: этот репозиторий предназначен только для
|
||||
учебно-исследовательских целей (**не** для продакшена).*
|
||||
*☝ Замечание: этот репозиторий предназначен для учебно-исследовательских целей (**не** для использования в продакшн-системах).*
|
||||
|
||||
## Структуры данных
|
||||
|
||||
Структура данных — определённый способ систематизации и хранения данных в компьютере таким образом,
|
||||
чтобы они могли быть легко доступны и изменяемы. Структура данных — совокупность коллекции значений
|
||||
данных, взаимосвязей между ними и функций или операций, которые могут применяться к данным.
|
||||
Структура данных (англ. data structure) — программная единица, позволяющая хранить и обрабатывать множество однотипных и/или логически связанных данных в вычислительной технике. Для добавления, поиска, изменения и удаления данных структура данных предоставляет некоторый набор функций, составляющих её интерфейс.
|
||||
|
||||
`B` - Новичок, `A` - Продвинутый
|
||||
`B` - Базовый уровень, `A` - Продвинутый уровень
|
||||
|
||||
* `B` [Связный список](src/data-structures/linked-list)
|
||||
* `B` [Двунаправленный связный список](src/data-structures/doubly-linked-list)
|
||||
@@ -52,12 +46,11 @@ _Читать на других языках:_
|
||||
|
||||
## Алгоритмы
|
||||
|
||||
Алгоритм — однозначная спецификация по решению целого ряда задач (иными словами,
|
||||
это список правил, чётко определяющих ту или иную последовательность операций).
|
||||
Алгоритм — конечная совокупность точно заданных правил решения некоторого класса задач или набор инструкций, описывающих порядок действий исполнителя для решения некоторой задачи.
|
||||
|
||||
`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/longest-increasing-subsequence)
|
||||
* `A` [Наименьшая общая суперпоследовательность](src/algorithms/sets/shortest-common-supersequence)
|
||||
* `A` [Наименьшая общая супер-последовательность](src/algorithms/sets/shortest-common-supersequence)
|
||||
* `A` [Задача о рюкзаке](src/algorithms/sets/knapsack-problem) — "0/1" и "неограниченный" рюкзаки
|
||||
* `A` [Максимальный подмассив](src/algorithms/sets/maximum-subarray) — метод полного перебора и алгоритм Кадане
|
||||
* `A` [Максимальный под-массив](src/algorithms/sets/maximum-subarray) — метод полного перебора и алгоритм Кадане
|
||||
* `A` [Комбинации сумм](src/algorithms/sets/combination-sum) — нахождение всех комбинаций, сумма каждой из которых равна заданному числу
|
||||
* **Алгоритмы на строках**
|
||||
* **Алгоритмы работы со строками**
|
||||
* `B` [Расстояние Хэмминга](src/algorithms/string/hamming-distance) — число позиций, в которых соответствующие символы различны
|
||||
* `A` [Расстояние Левенштейна](src/algorithms/string/levenshtein-distance) — метрика, измеряющая разность между двумя последовательностями
|
||||
* `A` [Алгоритм Кнута — Морриса — Пратта](src/algorithms/string/knuth-morris-pratt) — поиск подстроки (сопоставление с шаблоном)
|
||||
@@ -101,7 +94,7 @@ _Читать на других языках:_
|
||||
* `B` [Поиск с перескоком](src/algorithms/search/jump-search) (поиск блоков) — поиск в упорядоченном массиве
|
||||
* `B` [Двоичный поиск](src/algorithms/search/binary-search) — поиск в упорядоченном массиве
|
||||
* `B` [Интерполяционный поиск](src/algorithms/search/interpolation-search) — поиск в равномерно распределённом упорядоченном массиве.
|
||||
* **Сортировки**
|
||||
* **Алгоритмы сортировки**
|
||||
* `B` [Сортировка пузырьком](src/algorithms/sorting/bubble-sort)
|
||||
* `B` [Сортировка выбором](src/algorithms/sorting/selection-sort)
|
||||
* `B` [Сортировка вставками](src/algorithms/sorting/insertion-sort)
|
||||
@@ -147,11 +140,9 @@ _Читать на других языках:_
|
||||
* `A` [Задача об N ферзях](src/algorithms/uncategorized/n-queens)
|
||||
* `A` [Маршрут коня](src/algorithms/uncategorized/knight-tour)
|
||||
|
||||
### Парадигмы программирования
|
||||
### Алгоритмы по парадигме программирования
|
||||
|
||||
Парадигма программирования — общий метод или подход, лежащий в основе целого класса алгоритмов.
|
||||
Понятие "парадигма программирования" является более абстрактным по отношению к понятию "алгоритм",
|
||||
которое в свою очередь является более абстрактным по отношению к понятию "компьютерная пограмма".
|
||||
Парадигма программирования — общий метод или подход, лежащий в основе целого класса алгоритмов. Понятие "парадигма программирования" является более абстрактным по отношению к понятию "алгоритм", которое в свою очередь является более абстрактным по отношению к понятию "компьютерная программа".
|
||||
|
||||
* **Алгоритмы полного перебора** — поиск лучшего решения исчерпыванием всевозможных вариантов
|
||||
* `B` [Линейный поиск](src/algorithms/search/linear-search)
|
||||
@@ -196,9 +187,7 @@ _Читать на других языках:_
|
||||
* `A` [Алгоритм Беллмана — Форда](src/algorithms/graph/bellman-ford) — поиск кратчайшего пути во взвешенном графе
|
||||
* `A` [Алгоритм Флойда — Уоршелла](src/algorithms/graph/floyd-warshall) — нахождение кратчайших путей от одной из вершин графа до всех остальных
|
||||
* `A` [Разборщик регулярных выражений](src/algorithms/string/regular-expression-matching)
|
||||
* **Поиск с возвратом (бэктрекинг)** — при поиске решения многократно делается попытка расширить текущее частичное решение. Если расширение
|
||||
невозможно, то происходит возврат к предыдущему более короткому частичному решению, и делается попытка его расширить другим возможным способом.
|
||||
Обычно используется обход пространства состояний в глубину.
|
||||
* **Поиск с возвратом (бэктрекинг)** — при поиске решения многократно делается попытка расширить текущее частичное решение. Если расширение невозможно, то происходит возврат к предыдущему более короткому частичному решению, и делается попытка его расширить другим возможным способом. Обычно используется обход пространства состояний в глубину.
|
||||
* `B` [Прыжки](src/algorithms/uncategorized/jump-game)
|
||||
* `B` [Поиск уникальных путей](src/algorithms/uncategorized/unique-paths)
|
||||
* `B` [Булеан](src/algorithms/sets/power-set) — все подмножества заданного множества
|
||||
@@ -206,38 +195,38 @@ _Читать на других языках:_
|
||||
* `A` [Задача об N ферзях](src/algorithms/uncategorized/n-queens)
|
||||
* `A` [Маршрут коня](src/algorithms/uncategorized/knight-tour)
|
||||
* `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'
|
||||
|
||||
### Нотация «О» большое
|
||||
|
||||
*Нотация «О» большое* используется для классификации алгоритмов в соответствии с ростом времени выполнения и затрачиваемой памяти при увеличении размера входных данных.
|
||||
На диаграмме ниже представлены общие порядки роста алгоритмов в соответствии с нотацией «О» большое.
|
||||
*Нотация «О» большое* используется для классификации алгоритмов в соответствии с ростом времени выполнения и затрачиваемой памяти при увеличении размера входных данных. На диаграмме ниже представлены общие порядки роста алгоритмов в соответствии с нотацией «О» большое.
|
||||
|
||||

|
||||
|
||||
@@ -286,7 +274,7 @@ npm test -- 'playground'
|
||||
| **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 | - | Возможно получение ложноположительного срабатывания |
|
||||
| **Фильтр Блума** | - | 1 | 1 | - | Возможно получение ложно-положительного срабатывания |
|
||||
|
||||
### Сложности алгоритмов сортировки
|
||||
|
||||
|
||||
Reference in New Issue
Block a user