- •Лекція 1. Структури даних. Основні визначення та поняття
- •1.1. Термінологія
- •1.2. Типи даних
- •1.3. Рівні організації даних
- •1.4. Представлення даних
- •1.5. Класифікація структур даних
- •1.6. Основні операції над структурами даних
- •1.7. Документування даних
- •Лекція 2. Алгоритми. Складність алгоритмів.
- •2.1. Зображення алгоритмів
- •2.2. Складність алгоритмів
- •2.3. Класи алгоритмів
- •2.4. Документація алгоритмів
- •Лекція 3. Методи сортування .
- •3.1. Задача сортування
- •3.2.Метод простої вибірки.
- •3.3. Метод бульбашки.
- •3.4.Швидкий метод сортування
- •Лекція 4 методи сортування (продовження)
- •4.5. Сортування включенням
- •4.6. Сортування розподілом
- •4.7. Сортування злиттям або об’єднанням
- •4.8. Сортування підрахунком
- •Лекція 5 нелінійні структури даних
- •5.1. Дерева
- •5.1.1. Бінарні дерева
- •5.1.2. Алгоритм обходу дерева
- •5.1.3. Зображення в пам‘яті комп‘ютера графоподібних структур
- •Лекція 6 методи сортування на деревах
- •6.1. Сортування на деревах
- •6.1.2. Пірамідальне сортування.
- •Питання до першого модуля
- •Тема 1. Основні визначення та поняття. Термінологія. Класифікація структур даних. Основні операції над структурами даних.
- •Тема 2. Поняття алоритму. Зображення алгоритмів. Алгоритмічна складність. Поліноміальна та неполіноміальна складність алгоритмів..
- •Тема 3-4. Алгоритми сортування
- •Тема 5-6. Дерева. Основні визначення та поняття. Бінарні дерева. Зображення в пам‘яті еом графоподібних структур. Алгоритми обходу дерев.Висхідні, нисхідні, змішані алгоритми обходу дерев.
- •Лекція 7. Лінійні структури даних. Стеки, черги і деки.
- •7.1. Стеки
- •7.1.1. Реалізація стеку на базі масиву
- •7.2. Черги
- •7.2.1. Використання черги в програмуванні
- •7.2.2. Реалізація черги на базі масиву
- •7.3. Деки
- •Лекція 8. Лінійні структури даних.
- •8.1. Лінійні списки . Основні визначення та поняття
- •8.2. Однонаправлені списки
- •8.3. Двонаправлені списки
- •8.4. Циклічні списки
- •Лекція 9. Масиви, множини, кортежі
- •9.1. Масиви
- •9.2. Множини I кортежі
- •9.2.1. Реалізація множини
- •9.3. Зберігання множин і масивів
- •9.4. Зберігання розріджених матриць
- •Лекція 10. Нелінійні структури даних
- •10.1. Таблиці
- •10.1.1. Зображення таблиць
- •Лекція 11. Нелінійні структури даних
- •11.1. Спискові структури
- •11.1.1. Ієрархічні списки
- •11.1.2. Організація спискових структур
- •11.2. Сіткові структури
- •Лекція 12 пошук даних.
- •12.1. Послідовний пошук
- •12.2. Двійковий пошук
- •12.2.1. Дерева порівнянь на векторній пам‘яті.
- •12.3. Прямий пошук стрічки
- •12.4. Алгоритм Кнута, Моріса і Прата пошуку в стрічці.
- •12.5. Алгоритм Бойера - Мура пошуку в стрічці
- •12.6. Алгоритми з поверненням
- •Лекція 13 пошук у таблицях
- •13.1. Пошук у таблицях з обчислюваними адресами
- •13.2. Пошук у таблицях з прямим доступом
- •13.3. Пошук у Хеш-таблицях
- •Питання до другого модуля
- •Тема 9 Лінійні списки. Основні визначення та поняття. Однонаправлені списки. Двонаправлені списки. Циклічні списки. Організація списків.
- •Тема 10 Масиви. Множини I кортежі. Зберігання множин і масивів. Зберігання розріджених матриць. Операції з масивами, множинами та кортежами
9.2. Множини I кортежі
Множина - найпростіша структура, в якій між окремими ізольованими елементами немає ніякого внутрішнього зв'язку. Набір таких елементів являє собою множину, яка не має ніякої структури. Це сукупність даних деякого типу, елементи якої мають певну властивість. Але повинні бути чітко встановлені область визначення елементів даних і правила їх відбору у множину. Основними операціями над множинами є об’єднання, перетин і різниця. Множину, на якій встановлено відношення порядку " <= ", називають впорядкованою. Якщо таке відношення має місце для всіх елементів множини, таку множину називають повністю впорядкованою, інакше - це частково впорядкована множина. Множину M називають індексованою, якщо задане її відображення в натуральний ряд чисел, тобто І : M à {1,2,....|х|], де |х| - потужність множини M. У множину M можна додати елемент x, з множини M можна видалити елемент x. Якщо при додаванні елемента x він уже міститься в множині M, то нічого не відбувається. Аналогічно, ніякі дії не відбуваються при видаленні елемента x, коли він не міститься в множині M. Нарешті, для заданого елемента x можна визначити, чи належить він множині M. Множина - це потенційно необмежена структура, вона може містити будь-яке кінцеве число елементів.
У деяких мовах програмування накладають обмеження на тип елементів і на максимальну кількість елементів множини. Так, іноді розглядають множину елементів дискретного типу, число елементів якого не може перевищувати деякої константи, що задається при утворенні множини. (Тип називається дискретним, якщо всі можливі значення даного типу можна занумерувати цілими числами.) Для таких множин вживають назву Bіtset (''набір бітів'') або просто Set. Як правило, для реалізації таких множин використовується бітова реалізація множини на базі масиву цілих чисел. Кожне ціле число розглядається у двійковому представленні як набір бітів, що містить 32 елемента. Біти усередині одного числа нумеруються справа наліво (від молодших розрядів до старших); нумерація бітів триває від одного числа до іншого, коли ми перебираємо елементи масиву. Наприклад, масив з десяти цілих чисел містить 320 бітів, номери яких змінюються від 0 до 319. Множина у даній реалізації може містити будь-який набір цілих чисел у діапазоні від 0 до 319. Число N належить множині тоді й тільки тоді, коли біт з номером N дорівнює одиниці. Відповідно, якщо число N не належить множині, то біт з номером N дорівнює нулю. Нехай, наприклад, множинамістить елементи 0, 1, 5, 34. Тоді в першому елементі масиву встановлені біти з номерами 0, 1, 5, у другому - біт з номером 2 = 34 - 32. Відповідно, двійкове представлення першого елемента масиву рівно 10011 (біти нумеруються справа наліво), другого - 100, це числа 19 і 4 у десятковому представленні. Усі інші елементи масиву нульові.
У програмуванні досить часто розглядають структуру більш складну, чим проста множина: навантажена множина. Нехай кожний елемент множини міститься в ній разом з додатковою інформацією, яку називають навантаженням елемента. При додаванні елемента в множину потрібно також вказувати навантаження, яке він несе. У різних мовах програмування й у різних стандартних бібліотеках такі структури називають Картою (Map) або Словником (Dіctіonary). Дійсно, елементи множини як би наносяться на навантаження, яке вони несуть. В інтерпретації Словника елемент множини - це іноземне слово, навантаження елемента - це переклад слова на певну мову (зрозуміло, переклад може включати кілька варіантів, але тут переклад розглядається як єдиний текст).
Всі елементи містяться в навантаженій множині в одному екземплярі, тобто різні елементи множини не можуть бути рівні один одному. На відміну від самих елементів, їх навантаження можуть збігатися (так, різні іноземні слова можуть мати однаковий переклад). Тому елементи навантаженої множини називають ключами , їх навантаження - значеннями ключів. Кожний ключ унікальний. Прийнято говорити , що ключі відображаються на їхні значення. Як приклад навантаженої множини поряд зі словником можна розглянути множину банківських рахунків. Банківський рахунок - це унікальний ідентифікатор, що складається з десяткових цифр. Навантаження рахунку - це вся інформація, яка йому відповідає, що включає ім'я й адресу власника рахунку, код валюти, суму залишку, інформацію про останні транзакції й т.п.
Найбільш часто застосовувана операція в навантаженій множині - це визначення навантаження для заданого елемента x (значення ключа x). Реалізація цієї операції включає пошук елемента x у множині, тому ефективність будь-якої реалізації множини визначається насамперед швидкістю пошуку.
Кортеж - елемент n - кратного добутку множини X : Х*Х*..*Х=Хn. На відміну від скінченної впорядкованої множини, яка є підмножиною декартового добутку деяких множин Х1, X2 , ..., Хn елементи кортежу можуть повторюватись.
