Skip to content

Commit

Permalink
feat: added ukranian translations for graph, heap, linked-list, prior…
Browse files Browse the repository at this point in the history
…ity-queue, queue, stack. trie (trekhleb#965)
  • Loading branch information
alexanderkhivrych authored Dec 5, 2022
1 parent 025b9a3 commit a6a4d01
Show file tree
Hide file tree
Showing 14 changed files with 313 additions and 14 deletions.
4 changes: 3 additions & 1 deletion src/data-structures/graph/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,9 @@ _Read this in other languages:_
[_简体中文_](README.zh-CN.md),
[_Русский_](README.ru-RU.md),
[_Français_](README.fr-FR.md),
[_Português_](README.pt-BR.md)
[_Português_](README.pt-BR.md),
[_Українська_](README.uk-UA.md)


In computer science, a **graph** is an abstract data type
that is meant to implement the undirected graph and
Expand Down
24 changes: 24 additions & 0 deletions src/data-structures/graph/README.uk-UA.md
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)
4 changes: 3 additions & 1 deletion src/data-structures/heap/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,9 @@ _Read this in other languages:_
[_Français_](README.fr-FR.md),
[_Português_](README.pt-BR.md),
[_Türkçe_](README.tr-TR.md),
[_한국어_](README.ko-KR.md)
[_한국어_](README.ko-KR.md),
[_Українська_](README.uk-UA.md)


In computer science, a **heap** is a specialized tree-based
data structure that satisfies the heap property described
Expand Down
25 changes: 25 additions & 0 deletions src/data-structures/heap/README.uk-UA.md
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))
1 change: 1 addition & 0 deletions src/data-structures/linked-list/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ _Read this in other languages:_
[_한국어_](README.ko-KR.md),
[_Español_](README.es-ES.md),
[_Turkish_](README.tr-TR.md),
[_Українська_](README.uk-UA.md)

In computer science, a **linked list** is a linear collection
of data elements, in which linear order is not given by
Expand Down
147 changes: 147 additions & 0 deletions src/data-structures/linked-list/README.uk-UA.md
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)
19 changes: 10 additions & 9 deletions src/data-structures/priority-queue/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,20 +6,21 @@ _Read this in other languages:_
[_日本語_](README.ja-JP.md),
[_Français_](README.fr-FR.md),
[_Português_](README.pt-BR.md),
[_한국어_](README.ko-KR.md)
[_한국어_](README.ko-KR.md),
[_Українська_](README.uk-UA.md)

In computer science, a **priority queue** is an abstract data type
which is like a regular queue or stack data structure, but where
additionally each element has a "priority" associated with it.
In a priority queue, an element with high priority is served before
an element with low priority. If two elements have the same
In computer science, a **priority queue** is an abstract data type
which is like a regular queue or stack data structure, but where
additionally each element has a "priority" associated with it.
In a priority queue, an element with high priority is served before
an element with low priority. If two elements have the same
priority, they are served according to their order in the queue.

While priority queues are often implemented with heaps, they are
conceptually distinct from heaps. A priority queue is an abstract
While priority queues are often implemented with heaps, they are
conceptually distinct from heaps. A priority queue is an abstract
concept like "a list" or "a map"; just as a list can be implemented
with a linked list or an array, a priority queue can be implemented
with a heap or a variety of other methods such as an unordered
with a heap or a variety of other methods such as an unordered
array.

## References
Expand Down
21 changes: 21 additions & 0 deletions src/data-structures/priority-queue/README.uk-UA.md
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)
3 changes: 2 additions & 1 deletion src/data-structures/queue/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@ _Read this in other languages:_
[_日本語_](README.ja-JP.md),
[_Français_](README.fr-FR.md),
[_Português_](README.pt-BR.md),
[_한국어_](README.ko-KR.md)
[_한국어_](README.ko-KR.md),
[_Українська_](README.uk-UA.md)

In computer science, a **queue** is a particular kind of abstract data
type or collection in which the entities in the collection are
Expand Down
21 changes: 21 additions & 0 deletions src/data-structures/queue/README.uk-UA.md
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)
3 changes: 2 additions & 1 deletion src/data-structures/stack/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@ _Read this in other languages:_
[_日本語_](README.ja-JP.md),
[_Français_](README.fr-FR.md),
[_Português_](README.pt-BR.md),
[_한국어_](README.ko-KR.md)
[_한국어_](README.ko-KR.md),
[_Українська_](README.uk-UA.md)

In computer science, a **stack** is an abstract data type that serves
as a collection of elements, with two principal operations:
Expand Down
25 changes: 25 additions & 0 deletions src/data-structures/stack/README.uk-UA.md
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)
3 changes: 2 additions & 1 deletion src/data-structures/trie/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@
_Read this in other languages:_
[_简体中文_](README.zh-CN.md),
[_Русский_](README.ru-RU.md),
[_Português_](README.pt-BR.md)
[_Português_](README.pt-BR.md),
[_Українська_](README.uk-UA.md)

In computer science, a **trie**, also called digital tree and sometimes
radix tree or prefix tree (as they can be searched by prefixes),
Expand Down
27 changes: 27 additions & 0 deletions src/data-structures/trie/README.uk-UA.md
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)

0 comments on commit a6a4d01

Please sign in to comment.