Множини 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 елементи кортежу можуть повторюватись.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: