提交 e55dc809 编写于 作者: O Oleksii Trekhleb

Add README in Russian.

上级 87b5b2b5
......@@ -18,7 +18,8 @@ _Léelo en otros idiomas:_
[_Polski_](README.pl-PL.md),
[_Français_](README.fr-FR.md),
[_Português_](README.pt-BR.md),
[_Türk_](README.tr-TR.md)
[_Türk_](README.tr-TR.md),
[_Русский_](README.ru-RU.md)
*☝ Nótese que este proyecto está pensado con fines de aprendizaje e investigación,
y **no** para ser usado en producción.*
......
......@@ -19,7 +19,8 @@ _Lisez ceci dans d'autres langues:_
[_Polski_](README.pl-PL.md),
[_Español_](README.es-ES.md),
[_Português_](README.pt-BR.md),
[_Türk_](README.tr-TR.md)
[_Türk_](README.tr-TR.md),
[_Русский_](README.ru-RU.md)
## Data Structures
......
......@@ -18,7 +18,8 @@ _Read this in other languages:_
[_Français_](README.fr-FR.md),
[_Español_](README.es-ES.md),
[_Português_](README.pt-BR.md),
[_Türk_](README.tr-TR.md)
[_Türk_](README.tr-TR.md),
[_Русский_](README.ru-RU.md)
## データ構造
......
......@@ -17,7 +17,8 @@ _Read this in other languages:_
[_Français_](README.fr-FR.md),
[_Español_](README.es-ES.md),
[_Português_](README.pt-BR.md),
[_Türk_](README.tr-TR.md)
[_Türk_](README.tr-TR.md),
[_Русский_](README.ru-RU.md)
## 자료 구조
......
......@@ -19,10 +19,11 @@ _Read this in other languages:_
[_Français_](README.fr-FR.md),
[_Español_](README.es-ES.md),
[_Português_](README.pt-BR.md),
[_Türk_](README.tr-TR.md)
[_Türk_](README.tr-TR.md),
[_Русский_](README.ru-RU.md)
*☝ Note that this project is meant to be used for learning and researching purposes
only and it is **not** meant to be used for production.*
only, and it is **not** meant to be used for production.*
## Data Structures
......
......@@ -19,7 +19,8 @@ _Read this in other languages:_
[_Français_](README.fr-FR.md),
[_Español_](README.es-ES.md),
[_Português_](README.pt-BR.md),
[_Türk_](README.tr-TR.md)
[_Türk_](README.tr-TR.md),
[_Русский_](README.ru-RU.md)
## Struktury Danych
......
......@@ -19,7 +19,8 @@ _Leia isto em outros idiomas:_
[_Polski_](README.pl-PL.md),
[_Français_](README.fr-FR.md),
[_Español_](README.es-ES.md),
[_Türk_](README.tr-TR.md)
[_Türk_](README.tr-TR.md),
[_Русский_](README.ru-RU.md)
## Estrutura de Dados
......
# Алгоритмы и структуры данных в JavaScript
# Алгоритмы и структуры данных на JavaScript
[![Build Status](https://travis-ci.org/trekhleb/javascript-algorithms.svg?branch=master)](https://travis-ci.org/trekhleb/javascript-algorithms)
[![codecov](https://codecov.io/gh/trekhleb/javascript-algorithms/branch/master/graph/badge.svg)](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'
### Нотация «О» большое
*Нотация «О» большое* используется для классификации алгоритмов в соответствии с ростом времени выполнения и затрачиваемой памяти при увеличении размера входных данных.
На диаграмме ниже представлены общие порядки роста алгоритмов в соответствии с нотацией «О» большое.
*Нотация «О» большое* используется для классификации алгоритмов в соответствии с ростом времени выполнения и затрачиваемой памяти при увеличении размера входных данных. На диаграмме ниже представлены общие порядки роста алгоритмов в соответствии с нотацией «О» большое.
![Big O graphs](./assets/big-o-graph.png)
......@@ -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 | - | Возможно получение ложно-положительного срабатывания |
### Сложности алгоритмов сортировки
......
......@@ -17,7 +17,8 @@ _Read this in other languages:_
[_Polski_](README.pl-PL.md),
[_Français_](README.fr-FR.md),
[_Español_](README.es-ES.md),
[_Português_](README.pt-BR.md)
[_Português_](README.pt-BR.md),
[_Русский_](README.ru-RU.md)
*☝ Not, bu proje araştırma ve öğrenme amacı ile yapılmış
olup üretim için **yaplılmamıştır**.*
......
......@@ -16,7 +16,8 @@ _Read this in other languages:_
[_Français_](README.fr-FR.md),
[_Español_](README.es-ES.md),
[_Português_](README.pt-BR.md),
[_Türk_](README.tr-TR.md)
[_Türk_](README.tr-TR.md),
[_Русский_](README.ru-RU.md)
*注意:这个项目仅用于学习和研究,**不是**用于生产环境。*
......
......@@ -15,7 +15,8 @@ _Read this in other languages:_
[_Français_](README.fr-FR.md),
[_Español_](README.es-ES.md),
[_Português_](README.pt-BR.md),
[_Türk_](README.tr-TR.md)
[_Türk_](README.tr-TR.md),
[_Русский_](README.ru-RU.md)
## 資料結構
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册