Структури даних: тренувальні питання з поясненнями
Безкоштовні тестові питання з теми Структури даних з підказками й поясненнями, трьох рівнів: ключові терміни й факти, застосування понять, кейси та аналіз.
Структура даних — це спосіб організувати дані в пам’яті так, щоб певні операції були швидкими: знайти елемент, додати його, видалити.
Жодна структура не є швидкою в усьому. Вибір структури — це вибір того, які операції мають бути дешевими. Їхню вартість записують у нотації Big O, де n — кількість елементів.
Двома базовими будівельними блоками є масив і зв’язний список.
Масив зберігає елементи в одному блоці пам’яті один за одним. Комп’ютер може обчислити, де розташований елемент i, тому читання a[i] займає O(1). Вставка на початок означає зсув кожного елемента: O(n).
Зв’язний список зберігає кожен елемент у вузлі з вказівником на наступний вузол. Останній вказівник — null. Вставка в голову (h) змінює лише один вказівник: O(1). Але щоб дістатися елемента i, треба пройти i вказівників: O(n).
Двозв’язний список має також вказівник на попередній вузол, тож можна йти в обидва боки.
Самоперевірка Яка операція має складність O(1) для масиву, але O(n) для однозв’язного списку?
Вставка нового елемента на початок
Одноразовий обхід кожного елемента
Підрахунок елементів по одному
Читання елемента за індексом i
Відповідь: Читання елемента за індексом i. Масив обчислює адресу елемента i безпосередньо. Зв’язний список змушений пройти i вказівників від голови. Вставка на початок — протилежний випадок: дешева для списку, дорога для масиву.
2Стеки та черги
Стек схожий на стопку тарілок: додавати й забирати можна лише згори. Останній зайшов — першим вийшов: LIFO.
push кладе елемент нагору, pop забирає верхній елемент, peek читає верхній, не забираючи. Усі O(1).
Застосування: функція скасування в редакторі, стек викликів програми, перевірка збалансованості дужок, пошук углиб.
Черга схожа на чергу до каси: стаєте в кінець, виходите з початку. Перший зайшов — першим вийшов: FIFO.
enqueue додає в кінець, dequeue забирає з початку. Обидві O(1).
Застосування: завдання друку, повідомлення, що чекають обробки, пошук вшир.
Дек (deque, двостороння черга) дозволяє додавати й забирати з обох кінців. Черга з пріоритетом завжди першим забирає елемент із найвищим пріоритетом; її зазвичай будують як купу.
Самоперевірка Яка структура даних найкраще підходить для кнопки «скасувати» в текстовому редакторі?
Геш-таблиця
Граф
Стек
Черга
Відповідь: Стек. Скасування має відкочувати найновішу дію першою: останній зайшов — першим вийшов. Черга скасовувала б найстарішу дію першою.
3Дерева, купи, геш-таблиці та графи
Дерево має один верхній вузол — корінь. Кожен інший вузол має рівно одного батька. Вузли без нащадків — листки. Дерево з n вузлами має n − 1 ребро.
У бінарному дереві кожен вузол має щонайбільше двох нащадків. Бінарне дерево пошуку (BST) додає правило: ключі в лівому піддереві менші за вузол, ключі в правому піддереві більші.
Пошук у BST іде одним шляхом донизу, тож коштує O(висота). Збалансоване дерево (AVL, червоно-чорне) тримає висоту близько log₂ n. Ключі, вставлені у відсортованому порядку, утворюють ланцюжок висотою n.
Купа — це бінарне дерево, де кожен батько менший за нащадків (min-купа) або більший (max-купа). Мінімум або максимум — у корені, а вставка й видалення коштують O(log n).
Геш-таблиця зберігає пари «ключ–значення». Геш-функція перетворює ключ на індекс, тому вставка й пошук займають у середньому O(1). Два ключі з однаковим індексом — це колізія, яку розв’язують ланцюжками (список на комірку) або відкритою адресацією (спробувати іншу комірку).
Граф має вершини, з’єднані ребрами, які можуть мати напрямок або вагу. Його зберігають як матрицю суміжності, пам’ять O(V²), або як списки суміжності, O(V + E).
Самоперевірка Ключі 50, 30, 70, 20 і 40 вставляють у такому порядку в порожнє бінарне дерево пошуку. Який лівий нащадок вузла 30?
20
40
70
Лівого нащадка немає
Відповідь: 20. 20 менше за 50, тож іде ліворуч до 30. Воно також менше за 30, тож іде ліворуч ще раз. 40 більше за 30 і стає його правим нащадком.
4Метод крок за кроком
Запитання часто описують завдання й питають, яка структура підходить, або питають, як виглядає структура після кількох операцій.
Знайдіть операцію, що має бути швидкою: доступ за позицією, за ключем, найновіший елемент, найстаріший елемент, найменший елемент або діапазон.
Зіставте її зі структурою: індекс → масив, ключ → геш-таблиця, найновіше → стек, найстаріше → черга, найменше чи найбільше → купа, впорядкований порядок або діапазони → збалансоване дерево пошуку.
Перевірте вартість інших операцій, потрібних завданню, у нотації Big O.
Для запитання на трасування виконуйте операції по одній і записуйте стан після кожної.
Звірте кінцевий стан із правилом структури: LIFO, FIFO, порядок BST або порядок купи.
5Розв’язаний приклад
Простежте кожен крок. Спробуйте передбачити наступний, перш ніж його відкрити.
Розв’язаний приклад
Ключі 50, 30, 70, 20, 40 і 60 вставляють у такому порядку в порожнє бінарне дерево пошуку. Який симетричний обхід і скільки порівнянь потребує пошук 60?
1
Вставте корінь
Перший ключ, 50, стає коренем.
2
Вставте 30 і 70
30 менше за 50, тож іде ліворуч. 70 більше за 50, тож іде праворуч.
3
Вставте 20, 40 і 60
20: менше за 50, менше за 30, тож ліворуч від 30. 40: менше за 50, більше за 30, тож праворуч від 30. 60: більше за 50, менше за 70, тож ліворуч від 70.
4
Виконайте симетричний обхід
Симетричний обхід (in-order) відвідує ліве піддерево, потім вузол, потім праве піддерево.
Це дає 20, 30, 40, 50, 60, 70: ключі у відсортованому порядку, як завжди для BST.
5
Пошук 60
Порівняйте з 50: більше, йдіть праворуч. Порівняйте з 70: менше, йдіть ліворуч. Порівняйте з 60: знайдено.
Використовувати матрицю суміжності для великого розрідженого графа. Вона марнує O(V²) пам’яті.
Самоперевірка Ви ставите в чергу 1, 2 і 3 у порожню чергу в такому порядку. Який елемент поверне перший dequeue?
1, 2 і 3 разом
1
2
3
Відповідь: 1. Черга — перший зайшов, першим вийшов, тож 1 виходить першою. 3 була б відповіддю для стека (pop), який повертає найновіший елемент.
7Як виглядають екзаменаційні запитання
Легкий: ключові терміни та факти. LIFO і FIFO, що таке вузол, корінь чи листок, правило BST, що робить геш-функція.
Середній: застосування понять. Яка структура підходить для завдання, результат push і pop або вставок у BST, обходи дерев, геш-таблиця з лінійним пробінгом, вартість у нотації Big O.
Складний: випадки й аналіз. Збалансовані дерева, купи в масивах, B-дерева, префіксні дерева (trie), union-find, фільтри Блума та проєкти на кшталт LRU-кешу.
Для купи, збереженої в масиві з індексу 0, нащадки індексу i розташовані за індексами 2i + 1 і 2i + 2, а батько — за ⌊(i − 1) / 2⌋.
Яка головна відмінність між статичним і динамічним масивом?
AСтатичний масив має повільніший доступ за індексом
BДинамічний масив може зростати, переміщуючись до більшого блоку пам'яті
CДинамічний масив зберігає свої елементи у зв'язаних вузлах, тож може зростати по одному елементу
DСтатичний масив може зберігати лише числа
Показати підказки
Списки Python і ArrayList у Java — приклади одного з них.
Дві неправильні відповіді тепер закреслено. Одна з двох решти правильна.
Показати відповідь і пояснення
Чому це відповідь
Статичний масив має фіксований розмір; динамічний масив, заповнившись, виділяє більший масив і копіює туди елементи.
Відповідь
B · Динамічний масив може зростати, переміщуючись до більшого блоку пам'яті
Приклад 2Середня
Як працює extract-min у бінарній мін-купі?
AВидаляють останній елемент масиву
BОстанній елемент переміщують у корінь і просіюють униз
CВидаляють корінь і зсувають усі елементи на одну позицію ліворуч
DШукають новий мінімум серед усіх листків
Показати підказки
Збережіть повноту дерева, а потім виправте порядок.
Дві неправильні відповіді тепер закреслено. Одна з двох решти правильна.
Показати відповідь і пояснення
Чому це відповідь
Останній елемент заповнює порожнє місце в корені й обмінюється з меншою дитиною, доки не виконується властивість купи, що займає O(log n).
Відповідь
B · Останній елемент переміщують у корінь і просіюють униз
Приклад 3Складна
Яка вартість однієї операції find у найгіршому випадку в структурі union-find з n елементами без об'єднання за рангом і стиснення шляхів?
AO(1)
BO(α(n))
CO(log n)
DO(n)
Показати підказки
Дерева можуть вироджуватися.
Дві неправильні відповіді тепер закреслено. Одна з двох решти правильна.
Показати відповідь і пояснення
Чому це відповідь
Наївні об'єднання можуть зв'язати дерева в довгий ланцюжок, тож find може пройти n − 1 вказівників на батька; дві евристики роблять вартість майже сталою.
Відповідь
D · O(n)
Запитання й відповіді
Структури даних: що це?
Жодна структура не є швидкою в усьому. Вибір структури — це вибір того, які операції мають бути дешевими. Їхню вартість записують у нотації Big O, де n — кількість елементів.
Двома базовими будівельними блоками є масив і зв’язний список.
Структури даних: як вивчити крок за кроком?
Що таке структура даних
Стеки та черги
Дерева, купи, геш-таблиці та графи
Метод крок за кроком
Розв’язаний приклад
Типові помилки
Як виглядають екзаменаційні запитання
Структури даних: що ви тренуєте?
Легка: ключові терміни й факти
Середня: застосування понять
Складна: кейси та аналіз
Кожне питання має чотири варіанти відповіді, і лише один правильний. Застрягли? Спершу відкрийте невелику підказку, а повне пояснення — лише коли воно знадобиться.
Як проходить тренування
Кожне питання має чотири варіанти відповіді, і лише один правильний.
Застрягли? Спершу відкрийте невелику підказку, а повне пояснення — лише коли воно знадобиться.
Ваш прогрес, помилки та збережені задачі зберігаються, тож перед іспитом ви зможете все повторити.