- •1.1. Визначення інформації
- •1.2. Визначення алгоритму
- •1.3. Виконавці алгоритмів
- •1.4. Способи описання алгоритмів
- •1.5. Властивості алгоритмів
- •1.6. Поняття обчислювальної складності
- •1.7. Класи алгоритмів
- •1.7.1. Експоненційні алгоритми та перебір
- •1.7.2. Алгоритм із поверненнями назад
- •1.7.3. Машини Тьюринґа
- •Будь-який алгоритм може бути реалізований відповідною машиною Тьюринґа.
- •Усе, що реалізовано в одній з цих конструкцій, можна зробити і в інших.
- •1.7.4. Рекурсія та її використання
- •1.7.5. Теза Чорча. Алгоритмічно нерозв’язні проблеми
- •2.1. Поняття структури даних
- •2.2. Рівні описуваннявання даних
- •2.3. Класифікація структур даних у програмах користувача й у пам’яті комп’ютера
- •2.4. Основні види складених типів даних
- •2.4. Структури даних у пам’яті комп’ютера
- •2.4.1. Структури даних в оперативній пам’яті
- •2.4.2. Сд у зовнішній пам’яті
- •3.1. Поняття структури даних типу «масив»
- •3.2. Набір допустимих операцій для сд типу «масив»
- •3.3. Дескриптор сд типу «масив»
- •3.4. Ефективність масивів
- •3.5. Зберігання багатовимірних масивів
- •3.6. Сд типу «множина»
- •3.7. Сд типу «запис (прямий декартовий добуток)»
- •3.8. Сд типу «таблиця»
- •3.9. Сд типу «стек»
- •3.9.1. Дескриптор сд типу «стек»
- •3.9.2. Області застосування сд типу «стек»
- •3.10. Сд типу «черга»
- •3.11. Сд типу «дек»
3.1. Поняття структури даних типу «масив»
Масив – послідовність елементів одного типу, який називається базовим. Математичною мовою масив – це функція з обмеженою областю визначення. Структура масивів однорідна. Для виділення окремого компонента масиву використається індекс. Індекс – це значення спеціального типу, визначеного як тип індексу певного масиву. Тому на логічному рівні СД типу «масив» можна записати так:
type A = array [T1] of T2,
де Т1 – базовий тип масиву, Т2 – тип індексу.
Якщо DT1 – множина значень елементів типу Т1, DТ2 – множина значень елементів типу Т2, то А: DT1 DТ2 (відображення).
Кардинальне число Car(T) структури типу Т – це множина значень, які може приймати задана структура типу Т. Кардинальне число характеризує об’єм пам’яті, необхідний такій структурі.
Для масиву A: Car(A) = [Car(T2)] Car(T1).
Масив може бути одновимірним (вектором), та багатовимірним (наприклад, двовимірною таблицею), тобто таким, де індексом є не одне число, а кортеж (сукупність) із декількох чисел, кількість яких співпадає з розмірністю масиву.
У переважній більшості мов програмування масив є стандартною вбудованою структурою даних.
Отже, з вищенаведеного сформулюємо такі властивості масиву:
усі елементи масиву мають той самий тип;
кожний компонент має свій номер у послідовності (індекс) і відрізняється ним від інших елементів (ідентифікується);
множина індексів (індексова множина) скінченна й зафіксована в означенні масиву і ід час виконання програми не змінюється;
можливість опрацювання компонента, або його доступність, не залежить від його місця в послідовності (елементи рівнодоступні).
3.2. Набір допустимих операцій для сд типу «масив»
Над масивом можна виконувати такі операції:
1) Операція доступу (доступ до елементів масиву – прямий; від розміру структури операція не залежить).
2) Операція присвоювання.
3) Операція ініціалізації (визначення початкових умов).
На фізичному рівні СД типу «масив» є неперервною ділянкою пам’яті елементів однакового об’єму. Ділянка пам’яті, необхідна для одного елемента, називається слотом.
Var B: A {визначаємо змінну В як змінну типу «масив А»};
p i g, де p – індекс першого елемента масиву, g – індекс останнього елемента масиву, i – індекс елемента.
3.3. Дескриптор сд типу «масив»
Нерідко фізичній структурі ставиться у відповідність дескриптор (заголовок), що містить загальні відомості про задану фізичну структуру. Дескриптор також зберігається, як і структура, в пам’яті. Загалом дескриптор являє собою структуру типу «запис».
Стосовно до СД типу «масив», дескриптор містить такі компоненти: ім’я масиву, умовне позначення заданої структури, адресу першого елемента масиву, індекси нижньої й верхньої границь масиву, тип елемента масиву, розмір слота.
Наприклад, для наступного описування масиву:
var A: array [-5 .. 4] of Char
дескриптор буде виглядати так:
-
V
A
Adr (A[-5])
-5
4
Char
Для СД типу «масив» розмір дескриптора не залежить від розмірності масиву. При кожній операції доступу використовується вся інформація дескриптора. Наприклад, поля границі зміни індексу використовуються при обробці виняткових операцій.