forked from trekhleb/javascript-algorithms
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat: added ukranian translations for graph, heap, linked-list, prior…
…ity-queue, queue, stack. trie (trekhleb#965)
- Loading branch information
1 parent
025b9a3
commit a6a4d01
Showing
14 changed files
with
313 additions
and
14 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
# Граф | ||
|
||
**Граф** в інформатиці - абстрактний тип даних, який має реалізовувати концепції спрямованого та неспрямованого | ||
графа у математиці, особливо у галузі теорії графів. | ||
|
||
Структура даних графа складається з кінцевого (і можливо, що змінюється) набору вершин або вузлів, або точок, спільно з | ||
набором ненаправлених пар цих вершин для ненаправленого графа або набором спрямованих пар для спрямованого графа. | ||
Ці пари відомі як ребра, арки або лінії для ненаправленого графа та як стрілки, спрямовані ребра, спрямовані | ||
арки чи спрямовані лінії для спрямованого графа. Ці вершини можуть бути частиною структури графа, або зовнішніми | ||
сутностями, представленими цілими індексами або посиланнями. | ||
|
||
Для різних областей застосування види графів можуть відрізнятися спрямованістю, обмеженнями на кількість зв'язків та | ||
додатковими даними про вершини або ребра. Багато структур, що становлять практичний інтерес у математиці та | ||
інформатики можуть бути представлені графами. Наприклад, будову Вікіпедії можна змоделювати за допомогою | ||
орієнтованого графа, в якому вершини – це статті, а дуги (орієнтовані ребра) – гіперпосилання. | ||
|
||
![Граф](./images/graph.jpeg) | ||
|
||
*Made with [okso.app](https://okso.app)* | ||
|
||
## Посилання | ||
|
||
- [Граф у математиці на Wikipedia](https://uk.wikipedia.org/wiki/%D0%93%D1%80%D0%B0%D1%84_(%D0%BC%D0%B0%D1%82%D0%B5%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0)) | ||
- [Структура даних Graph / Граф](https://www.youtube.com/watch?v=D0U8aFEhgKQ) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
# Купа (структура даних) | ||
|
||
У комп'ютерних науках купа - це спеціалізована структура даних на кшталт дерева, яка задовольняє властивості купи: | ||
якщо B є вузлом-нащадком вузла A, то ключ (A) ≥ ключ (B). З цього випливає, що елемент із найбільшим ключем завжди | ||
є кореневим вузлом купи, тому іноді такі купи називають max-купами. | ||
|
||
![MaxHeap](./images/max-heap.jpeg) | ||
|
||
![Array Representation](./images/array-representation.jpeg) | ||
|
||
Якщо порівняння перевернути, то найменший елемент завжди буде кореневим вузлом, такі купи називають min-купами. | ||
|
||
![MinHeap](./images/min-heap.jpeg) | ||
|
||
*Made with [okso.app](https://okso.app)* | ||
|
||
Не існує жодних обмежень щодо того, скільки вузлів-нащадків має кожен вузол купи. На практиці їх | ||
число зазвичай трохи більше двох. Купа є максимально ефективною реалізацією абстрактного типу даних, який | ||
називається чергою із пріоритетом. | ||
|
||
Вузол на вершині купи, який не має батьків, називається кореневим вузлом. | ||
|
||
## Посилання | ||
|
||
- [Wikipedia](https://uk.wikipedia.org/wiki/%D0%9A%D1%83%D0%BF%D0%B0_(%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D0%B0_%D0%B4%D0%B0%D0%BD%D0%B8%D1%85)) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,147 @@ | ||
# Зв'язаний список | ||
|
||
Зв'язаний список — базова динамічна структура даних в інформатиці, що складається з вузлів, кожен з яких містить як дані, так посилання («зв'язку») на наступний вузол списку. Дана структура дозволяє ефективно додавати та видаляти елементи на довільній позиції у послідовності у процесі ітерації. Більш складні варіанти включають додаткові посилання, що дозволяють ефективно додавати та видаляти довільні елементи. | ||
|
||
Принциповою перевагою перед масивом є структурна гнучкість: порядок елементів зв'язкового списку може збігатися з порядком розташування елементів даних у пам'яті комп'ютера, а порядок обходу списку завжди явно задається його внутрішніми зв'язками. Суть переваги у тому, що у багатьох мовах створення масиву вимагає вказати його заздалегідь. Зв'язковий список дозволяє обійти це обмеження. | ||
|
||
Недоліком зв'язкових списків є те, що час доступу є лінійним (і важко для реалізації конвеєрів). Неможливий швидкий доступ (випадковий). | ||
|
||
![Linked List](./images/linked-list.jpeg) | ||
|
||
*Made with [okso.app](https://okso.app)* | ||
|
||
## Псевдокод основних операцій | ||
|
||
### Вставка | ||
|
||
```text | ||
Add(value) | ||
Pre: value - значення, що додається | ||
Post: value поміщено в кінець списку | ||
n ← node(value) | ||
if head = ø | ||
head ← n | ||
tail ← n | ||
else | ||
tail.next ← n | ||
tail ← n | ||
end if | ||
end Add | ||
``` | ||
|
||
```text | ||
Prepend(value) | ||
Pre: value - значення, що додається | ||
Post: value поміщено на початок списку | ||
n ← node(value) | ||
n.next ← head | ||
head ← n | ||
if tail = ø | ||
tail ← n | ||
end | ||
end Prepend | ||
``` | ||
|
||
### Поиск | ||
|
||
```text | ||
Contains(head, value) | ||
Pre: head - перший вузол у списку | ||
value - значення, яке слід знайти | ||
Post: true - value знайдено у списку, інакше false | ||
n ← head | ||
while n != ø and n.value != value | ||
n ← n.next | ||
end while | ||
if n = ø | ||
return false | ||
end if | ||
return true | ||
end Contains | ||
``` | ||
|
||
### Вилучення | ||
|
||
```text | ||
Remove(head, value) | ||
Pre: head - перший вузол у списку | ||
value - значення, яке слід видалити | ||
Post: true - value видалено зі списку, інакше false | ||
if head = ø | ||
return false | ||
end if | ||
n ← head | ||
if n.value = value | ||
if head = tail | ||
head ← ø | ||
tail ← ø | ||
else | ||
head ← head.next | ||
end if | ||
return true | ||
end if | ||
while n.next != ø and n.next.value != value | ||
n ← n.next | ||
end while | ||
if n.next != ø | ||
if n.next = tail | ||
tail ← n | ||
end if | ||
n.next ← n.next.next | ||
return true | ||
end if | ||
return false | ||
end Remove | ||
``` | ||
|
||
### Обход | ||
|
||
```text | ||
Traverse(head) | ||
Pre: head - перший вузол у списку | ||
Post: елементи списку пройдені | ||
n ← head | ||
while n != ø | ||
yield n.value | ||
n ← n.next | ||
end while | ||
end Traverse | ||
``` | ||
|
||
### Зворотний обхід | ||
|
||
```text | ||
ReverseTraversal(head, tail) | ||
Pre: head и tail відносяться до одного списку | ||
Post: елементи списку пройдено у зворотному порядку | ||
if tail != ø | ||
curr ← tail | ||
while curr != head | ||
prev ← head | ||
while prev.next != curr | ||
prev ← prev.next | ||
end while | ||
yield curr.value | ||
curr ← prev | ||
end while | ||
yield curr.value | ||
end if | ||
end ReverseTraversal | ||
``` | ||
|
||
## Складність | ||
|
||
### Тимчасова складність | ||
|
||
| Читання | Пошук | Вставка | Вилучення | | ||
| :--------: | :-------: | :--------: | :-------: | | ||
| O(n) | O(n) | O(1) | O(n) | | ||
|
||
### Просторова складність | ||
|
||
O(n) | ||
|
||
## Посилання | ||
|
||
- [Wikipedia](https://uk.wikipedia.org/wiki/%D0%97%D0%B2%27%D1%8F%D0%B7%D0%B0%D0%BD%D0%B8%D0%B9_%D1%81%D0%BF%D0%B8%D1%81%D0%BE%D0%BA) | ||
- [YouTube](https://www.youtube.com/watch?v=6snsMa4E1Os) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
# Черга з пріоритетом | ||
|
||
Черга з пріоритетом (англ. priority queue) - абстрактний тип даних в інформатиці, | ||
для кожного елемента якого можна визначити його пріоритет. | ||
|
||
У черзі з пріоритетами елемент із високим пріоритетом обслуговується раніше | ||
елемент з низьким пріоритетом. Якщо два елементи мають однаковий пріоритет, вони | ||
обслуговуються відповідно до їх порядку в черзі. | ||
|
||
Черга з пріоритетом підтримує дві обов'язкові операції – додати елемент та | ||
витягти максимум (мінімум). | ||
|
||
Хоча пріоритетні черги часто реалізуються у вигляді куп (heaps), вони | ||
концептуально відрізняються від куп. Черга пріоритетів є абстрактною | ||
концепцією на кшталт «списку» чи «карти»; так само, як список може бути реалізований | ||
у вигляді зв'язкового списку або масиву, так і черга з пріоритетом може бути реалізована | ||
у вигляді купи або безліччю інших методів, наприклад, у вигляді невпорядкованого масиву. | ||
|
||
## Посилання | ||
|
||
- [Wikipedia](https://uk.wikipedia.org/wiki/%D0%A7%D0%B5%D1%80%D0%B3%D0%B0_%D0%B7_%D0%BF%D1%80%D1%96%D0%BE%D1%80%D0%B8%D1%82%D0%B5%D1%82%D0%BE%D0%BC) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
# Черга | ||
|
||
Черга (англ. queue) – структура даних в інформатиці, в якій елементи | ||
зберігаються у порядку їх додавання. Додавання нових елементів(enqueue) | ||
здійснюється на кінець списку. А видалення елементів (dequeue) | ||
здійснюється із початку. Таким чином черга реалізує принцип | ||
"першим увійшов – першим вийшов" (FIFO). Часто реалізується операція читання | ||
головного елемента (peek), яка повертає перший у черзі елемент, | ||
при цьому не видаляючи його. Черга є прикладом лінійної структури | ||
даних чи послідовної колекції. | ||
|
||
Ілюстрація роботи з чергою. | ||
|
||
![Черга](./images/queue.jpeg) | ||
|
||
*Made with [okso.app](https://okso.app)* | ||
|
||
## Список літератури | ||
|
||
- [Wikipedia](https://uk.wikipedia.org/wiki/%D0%A7%D0%B5%D1%80%D0%B3%D0%B0_(%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D0%B0_%D0%B4%D0%B0%D0%BD%D0%B8%D1%85)) | ||
- [YouTube](https://www.youtube.com/watch?v=ll4QLNSPn60) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
# Стек | ||
|
||
Стек (англ. stack - стопка) - абстрактний тип даних, що представляє собою | ||
список елементів, організованих за принципом LIFO (останнім прийшов – першим вийшов). | ||
|
||
Стек має дві ключові операції: | ||
* **додавання (push)** елемента в кінець стеку, та | ||
* **видалення (pop)**, останнього доданого елемента. | ||
|
||
Додаткова операція для читання головного елемента (peek) дає доступ | ||
до останнього елементу стека без зміни самого стека. | ||
|
||
Найчастіше принцип роботи стека порівнюють зі чаркою тарілок: щоб узяти другу | ||
зверху потрібно зняти верхню. | ||
|
||
Ілюстрація роботи зі стеком. | ||
|
||
![Стек](./images/stack.jpeg) | ||
|
||
*Made with [okso.app](https://okso.app)* | ||
|
||
## Посилання | ||
|
||
- [Wikipedia](https://uk.wikipedia.org/wiki/%D0%A1%D1%82%D0%B5%D0%BA) | ||
- [YouTube](https://www.youtube.com/watch?v=4jh1e1YCbYc) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
# Префіксне дерево | ||
|
||
**Префіксне дерево** (Також промінь, навантажене або суфіксне дерево) в інформатиці - впорядкована деревоподібна | ||
структура даних, яка використовується для зберігання динамічних множин або асоціативних масивів, де | ||
ключем зазвичай виступають рядки. Дерево називається префіксним, тому що пошук здійснюється за префіксами. | ||
|
||
На відміну від бінарного дерева, вузли не містять ключів, що відповідають вузлу. Являє собою кореневе дерево, кожне | ||
ребро якого позначено якимось символом так, що для будь-якого вузла всі ребра, що з'єднують цей вузол з його синами, | ||
позначені різними символами. Деякі вузли префіксного дерева виділені (на малюнку вони підписані цифрами) і вважається, | ||
що префіксне дерево містить цей рядок-ключ тоді і тільки тоді, коли цей рядок можна прочитати на шляху з | ||
кореня до певного виділеного вузла. | ||
|
||
Таким чином, на відміну від бінарних дерев пошуку, ключ, що ідентифікує конкретний вузол дерева, не явно зберігається в | ||
цьому вузлі, а неявно задається положенням цього вузла в дереві. Отримати ключ можна виписуванням поспіль символів, | ||
помічають ребра по дорозі від кореня до вузла. Ключ кореня дерева - порожній рядок. Часто у виділених вузлах зберігають | ||
додаткову інформацію, пов'язану з ключем, і зазвичай виділеними є тільки листя і, можливо, деякі | ||
внутрішні вузли. | ||
|
||
![Префіксне дерево](./images/trie.jpg) | ||
|
||
*Made with [okso.app](https://okso.app)* | ||
|
||
На малюнку представлено префіксне дерево, що містить ключі. «A», «to», «tea», «ted», «ten», «i», «in», «inn». | ||
|
||
## Посилання | ||
|
||
- [Wikipedia](https://uk.wikipedia.org/wiki/%D0%9F%D1%80%D0%B5%D1%84%D1%96%D0%BA%D1%81%D0%BD%D0%B5_%D0%B4%D0%B5%D1%80%D0%B5%D0%B2%D0%BE) |