From a6a4d01f95a1f1f2243360d1fd7dbd2275f0fa79 Mon Sep 17 00:00:00 2001 From: "Oleksandr (Sasha) Khivrych" Date: Mon, 5 Dec 2022 06:38:35 +0000 Subject: [PATCH] feat: added ukranian translations for graph, heap, linked-list, priority-queue, queue, stack. trie (#965) --- src/data-structures/graph/README.md | 4 +- src/data-structures/graph/README.uk-UA.md | 24 +++ src/data-structures/heap/README.md | 4 +- src/data-structures/heap/README.uk-UA.md | 25 +++ src/data-structures/linked-list/README.md | 1 + .../linked-list/README.uk-UA.md | 147 ++++++++++++++++++ src/data-structures/priority-queue/README.md | 19 +-- .../priority-queue/README.uk-UA.md | 21 +++ src/data-structures/queue/README.md | 3 +- src/data-structures/queue/README.uk-UA.md | 21 +++ src/data-structures/stack/README.md | 3 +- src/data-structures/stack/README.uk-UA.md | 25 +++ src/data-structures/trie/README.md | 3 +- src/data-structures/trie/README.uk-UA.md | 27 ++++ 14 files changed, 313 insertions(+), 14 deletions(-) create mode 100644 src/data-structures/graph/README.uk-UA.md create mode 100644 src/data-structures/heap/README.uk-UA.md create mode 100644 src/data-structures/linked-list/README.uk-UA.md create mode 100644 src/data-structures/priority-queue/README.uk-UA.md create mode 100644 src/data-structures/queue/README.uk-UA.md create mode 100644 src/data-structures/stack/README.uk-UA.md create mode 100644 src/data-structures/trie/README.uk-UA.md diff --git a/src/data-structures/graph/README.md b/src/data-structures/graph/README.md index 99300537..790602b5 100644 --- a/src/data-structures/graph/README.md +++ b/src/data-structures/graph/README.md @@ -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 diff --git a/src/data-structures/graph/README.uk-UA.md b/src/data-structures/graph/README.uk-UA.md new file mode 100644 index 00000000..9886cd90 --- /dev/null +++ b/src/data-structures/graph/README.uk-UA.md @@ -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) diff --git a/src/data-structures/heap/README.md b/src/data-structures/heap/README.md index ef1d2e8b..db5f9e33 100644 --- a/src/data-structures/heap/README.md +++ b/src/data-structures/heap/README.md @@ -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 diff --git a/src/data-structures/heap/README.uk-UA.md b/src/data-structures/heap/README.uk-UA.md new file mode 100644 index 00000000..f35995d8 --- /dev/null +++ b/src/data-structures/heap/README.uk-UA.md @@ -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)) diff --git a/src/data-structures/linked-list/README.md b/src/data-structures/linked-list/README.md index 8819a390..bb30b075 100644 --- a/src/data-structures/linked-list/README.md +++ b/src/data-structures/linked-list/README.md @@ -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 diff --git a/src/data-structures/linked-list/README.uk-UA.md b/src/data-structures/linked-list/README.uk-UA.md new file mode 100644 index 00000000..5424c58d --- /dev/null +++ b/src/data-structures/linked-list/README.uk-UA.md @@ -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) diff --git a/src/data-structures/priority-queue/README.md b/src/data-structures/priority-queue/README.md index eb5ec729..6d090196 100644 --- a/src/data-structures/priority-queue/README.md +++ b/src/data-structures/priority-queue/README.md @@ -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 diff --git a/src/data-structures/priority-queue/README.uk-UA.md b/src/data-structures/priority-queue/README.uk-UA.md new file mode 100644 index 00000000..2f045447 --- /dev/null +++ b/src/data-structures/priority-queue/README.uk-UA.md @@ -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) diff --git a/src/data-structures/queue/README.md b/src/data-structures/queue/README.md index c1e40d73..d8e0288b 100644 --- a/src/data-structures/queue/README.md +++ b/src/data-structures/queue/README.md @@ -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 diff --git a/src/data-structures/queue/README.uk-UA.md b/src/data-structures/queue/README.uk-UA.md new file mode 100644 index 00000000..7934c757 --- /dev/null +++ b/src/data-structures/queue/README.uk-UA.md @@ -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) diff --git a/src/data-structures/stack/README.md b/src/data-structures/stack/README.md index 645e66c1..612f9267 100644 --- a/src/data-structures/stack/README.md +++ b/src/data-structures/stack/README.md @@ -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: diff --git a/src/data-structures/stack/README.uk-UA.md b/src/data-structures/stack/README.uk-UA.md new file mode 100644 index 00000000..9941114f --- /dev/null +++ b/src/data-structures/stack/README.uk-UA.md @@ -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) diff --git a/src/data-structures/trie/README.md b/src/data-structures/trie/README.md index f6f38ece..2082fed9 100644 --- a/src/data-structures/trie/README.md +++ b/src/data-structures/trie/README.md @@ -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), diff --git a/src/data-structures/trie/README.uk-UA.md b/src/data-structures/trie/README.uk-UA.md new file mode 100644 index 00000000..3b1f01f0 --- /dev/null +++ b/src/data-structures/trie/README.uk-UA.md @@ -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)