Skip to content

Commit

Permalink
feat: update algorithms module with examples
Browse files Browse the repository at this point in the history
  • Loading branch information
stardustmeg committed Aug 3, 2024
1 parent 136d39c commit c20d765
Show file tree
Hide file tree
Showing 13 changed files with 22 additions and 2 deletions.
24 changes: 22 additions & 2 deletions stage0/modules/data-structures-part-1/algorithms.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,11 @@

Их эффективность:

![Наглядная сложность выполнения алгоритмов](https://github.com/rolling-scopes-school/tasks/blob/master/tasks/stage1/modules/data-structures-and-algorithms/images/big-o.png)
![Наглядная сложность выполнения алгоритмов](./images/big-o.png)

Следующее демо позволяет наглядно сравнить скорость выполнения некоторых алгоритмов сортировки, отличающихся значением Big-О (картинка кликабельна).

[![Demo images](https://github.com/rolling-scopes-school/tasks/blob/master/tasks/stage1/modules/data-structures-and-algorithms/images/algoritms-timer-demo.png)](https://algorithms-timer-demo.netlify.app/)
[![Demo images](./images/algoritms-timer-demo.png)](https://algorithms-timer-demo.netlify.app/)

### Пузырьковая сортировка

Expand All @@ -38,6 +38,8 @@
- Наилучший вариант: O(n).
- Средний и худший варианты: O(n²).

![Наглядное выполнение алгоритма](./images/bubble-sort-example.gif)

**Пузырьковая сортировка**

```js
Expand Down Expand Up @@ -68,6 +70,8 @@ bubbleSort(arr);
- Наилучший вариант: O(n).
- Средний и худший варианты: O(n log n).

![Наглядное выполнение алгоритма](./images/merge-sort-example.gif)

### Быстрая сортировка

- Весь набор данных делится пополам путём выбора среднего элемента и перемещения всех, кто меньше него, влево.
Expand All @@ -82,6 +86,8 @@ bubbleSort(arr);
- Средний вариант: O(n log n).
- Худший вариант: O(n²).

![Наглядное выполнение алгоритма](./images/quicksort-example.gif)

**Сравнение алгоритмов сортировки слиянием и быстрой сортировки**

Быстрая сортировка на практике зачастую эффективнее.
Expand Down Expand Up @@ -110,6 +116,8 @@ quickSort(arr);

[Что такое бинарный поиск](https://youtu.be/9EmO9_MK1gQ?t=34)

![Наглядное выполнение алгоритма](./images/binary_search_tree_example.gif)

**Бинарный поиск**

```js
Expand Down Expand Up @@ -174,6 +182,8 @@ binarySearchRecursiveMethod(arr, 5); // -1
- Двоичный поиск: O(log n).
- Вставка: недопустимо (если не делать этого в самом конце массива).

![Array](./images/array.webp)

### Список (связный список)

- Данные хранятся в узлах, указывающих на другие узлы. По итогу список выглядит, как вложенные друг в друга объекты.
Expand All @@ -185,13 +195,17 @@ binarySearchRecursiveMethod(arr, 5); // -1

- Существует двусвязный список: он имеет помимо nextNode и value ещё и previousNode (значение узла, ссылка на следующий узел и на предыдущий соответственно).

![List](./images/linked-list.webp)

### Стек

- Обычно реализуется с помощью связного списка, может быть создан и из массива
- Стеки — это LIFO-структуры данных (last in, first out).
- Аналог стека — стопка тарелок: последнюю добавленную в стопку тарелку возьмут первой.
- Голова – единственное место для вставки и удаления элементов.

![Stack](./images/stack.png)

### Очереди

- Как и стек очереди могут быть реализованы с помощью связного списка или массива.
Expand All @@ -205,6 +219,8 @@ binarySearchRecursiveMethod(arr, 5); // -1
- Двоичный поиск: O(n).
- Вставка: O(1).

![Queue](./images/queue.png)

### Хэш-таблица (объект)

- Данные хранятся в виде пар ключ-значение.
Expand All @@ -214,6 +230,8 @@ binarySearchRecursiveMethod(arr, 5); // -1
- Поиск: O(1).
- Вставка: O(1).

![Hash table](./images/hash-table.jpg)

### Двоичное дерево

- Двоичное дерево — структура данных, в которой каждый узел имеет максимум два дочерних элемента. Дочерние элементы бывают левым и правым.
Expand All @@ -225,6 +243,8 @@ binarySearchRecursiveMethod(arr, 5); // -1
- Поиск: O(log n).
- Вставка: O(log n).

![Binary tree](./images/binary-tree.png)

#### Что можно сделать до старта курса

- решать задачи на сайте [Codewars](https://www.codewars.com/), определять значение Big O используемых вами алгоритмов
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file not shown.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file not shown.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit c20d765

Please sign in to comment.