GeoSELECT.ru



Программирование / Реферат: Быстрые алгоритмы сортировки (Программирование)

Космонавтика
Уфология
Авиация
Административное право
Арбитражный процесс
Архитектура
Астрология
Астрономия
Аудит
Банковское дело
Безопасность жизнедеятельности
Биология
Биржевое дело
Ботаника
Бухгалтерский учет
Валютные отношения
Ветеринария
Военная кафедра
География
Геодезия
Геология
Геополитика
Государство и право
Гражданское право и процесс
Делопроизводство
Деньги и кредит
Естествознание
Журналистика
Зоология
Инвестиции
Иностранные языки
Информатика
Искусство и культура
Исторические личности
История
Кибернетика
Коммуникации и связь
Компьютеры
Косметология
Криминалистика
Криминология
Криптология
Кулинария
Культурология
Литература
Литература : зарубежная
Литература : русская
Логика
Логистика
Маркетинг
Масс-медиа и реклама
Математика
Международное публичное право
Международное частное право
Международные отношения
Менеджмент
Металлургия
Мифология
Москвоведение
Музыка
Муниципальное право
Налоги
Начертательная геометрия
Оккультизм
Педагогика
Полиграфия
Политология
Право
Предпринимательство
Программирование
Психология
Радиоэлектроника
Религия
Риторика
Сельское хозяйство
Социология
Спорт
Статистика
Страхование
Строительство
Схемотехника
Таможенная система
Теория государства и права
Теория организации
Теплотехника
Технология
Товароведение
Транспорт
Трудовое право
Туризм
Уголовное право и процесс
Управление
Физика
Физкультура
Философия
Финансы
Фотография
Химия
Хозяйственное право
Цифровые устройства
Экологическое право
   

Реферат: Быстрые алгоритмы сортировки (Программирование)


МІНІСТЕРСТВО НАУКИ І ОСВІТИ УКРАЇНИ
Херсонський Державний Педагогічний Університет
Фізико-математичний факультет
Кафедра інформаційних технологій



Швидкі алгоритми сортування



Курсова робота



Виконавець



Керівник



Херсон 2001
Зміст


Вступ 3


1. Аналіз швидких алгоритмів сортування 6

1.1. Сортування деревом 6
1.2. Пірамідальне сортування 9
1.3 Швидке сортування Хоара 12
1.4 Метод цифрового сортування 14

2. Практична реалізація мовою Паскаль швидких алгоритмів сортування 16


Висновки 22


Список використаних джерел 24



Вступ

В наш час нові інформаційні технології посідають дуже важливе місце не
лише в спеціалізованих, але й в повсякденних сферах життя. Комп’ютери
застосовуються в бізнесі, менеджменті, торгівлі, навчанні та багатьох
інших сферах діяльності людини.
Комп’ютерні технології дуже зручні для виконання різноманітних
операцій, але в різних сферах застосування ці операції різні. Тому, кожна
окрема галузь, яка використовує специфічні технічні засоби, потребує своїх
власних програм, які забезпечують роботу комп’ютерів.
Розробкою програмного забезпечення займається така галузь науки, як
програмування. Вона набуває все більшого й більшого значення останнім
часом, адже з кожним днем комп’ютер стає все більш необхідним, все більш
повсякденним явищем нашого життя. Адже обчислювальна техніка минулих років
вже майже повністю вичерпала себе і не задовольняє тим потребам, що
постають перед людством.
Таким чином, нові інформаційні технології дуже актуальні в
наш час і потребують багато уваги для подальшої розробки та вдосконалення.
Поряд з цим, велике значення має також і програмування, яке є одним із
фундаментальних розділів інформатики і тому не може залишатись осторонь.
Програмування містить цілу низку важливих внутрішніх задач. Однією з
найбільш важливих таких задач для програмування є задача сортування. Під
сортуванням звичайно розуміють перестановки елементів будь-якої
послідовності у визначеному порядку. Ця задача є однією з найважливіших
тому, що її метою є полегшення подальшої обробки певних даних і,
насамперед, задачі пошуку. Так, одним з ефективних алгоритмів пошуку є
бінарний пошук. Він працює швидше ніж, наприклад, лінійний пошук, але його
можливо застосовувати лише за умови, що послідовність вже упорядкована,
тобто відсортована.
Взагалі, відомо, що в будь-якій сфері діяльності, що використовує
комп’ютер для запису, обробки та збереження інформації, усі дані
зберігаються в базах даних, які також потребують сортування. Певна
впорядкованість для них дуже важлива, адже користувачеві набагато легше
працювати з даними, що мають певний порядок. Так, можна розташувати всі
товари по назві або відомості про співробітників чи студентів за прізвищем
або роком народження, тощо.
Задача сортування в програмуванні не вирішена повністю. Адже, хоча й
існує велика кількість алгоритмів сортування, все ж таки метою
програмування є не лише розробка алгоритмів сортування елементів, але й
розробка саме ефективних алгоритмів сортування. Ми знаємо, що одну й ту
саму задачу можна вирішити за допомогою різних алгоритмів і кожен раз зміна
алгоритму приводить до нових, більш або менш ефективних розв’язків задачі.
Основними вимогами до ефективності алгоритмів сортування є перш за все
ефективність за часом та економне використання пам’яті. Згідно цих вимог,
прості алгоритми сортування (такі, як сортування вибором і сортування
включенням) не є дуже ефективними.
Алгоритм сортування обмінами, хоча і завершує свою роботу (оскільки він
використовує лише цикли з параметром і в тілі циклів параметри примусово не
змінюються) і не використовує допоміжної пам’яті, але займає багато часу.
Навіть, якщо внутрішній цикл не містить жодної перестановки, то дії будуть
повторюватись до тих пір, поки не завершиться зовнішній цикл.
Алгоритм сортування вибором ефективніше сортування обмінами за
критерієм М(n), тобто за кількістю пересилань, але також є не дуже
ефективним. З цих причин було розроблено деякі нові алгоритми сортування,
що отримали назву швидких алгоритмів сортування. Це такі алгоритми, як
сортування деревом, пірамідальне сортування, швидке сортування Хоара та
метод цифрового сортування.
Метою нашої дослідницької роботи є ознайомлення з цими швидкими
алгоритмами сортування, спроба проаналізувати їх і висвітлити кожен з них і
написати програму, яка б виконувала сортування деякої послідовності за
допомогою різних швидких алгоритмів сортування.



1. Аналіз швидких алгоритмів сортування


1.1. Сортування деревом

Алгоритм сортування деревом ТreeSort власне кажучи є поліпшенням
алгоритму сортування вибором. Процедура вибору найменшого елемента
удосконалена як процедура побудови т.зв. сортуючого дерева. Сортуюче дерево
- це структура даних, у якій представлений процес пошуку найменшого
елемента методом попарного порівняння елементів, що стоять поруч. Алгоритм
сортує масив у два етапи.
I етап : побудова сортуючого дерева;
II етап : просівання елементів по сортуючому дереву.
Розглянемо приклад: Нехай масив A складається з 8 елементів (мал. 1, 1-
а рядок). Другий рядок складається з мінімумів елементів першого рядка,
які стоять поруч. Кожний наступний рядок складений з мінімумів елементів,
що стоять поруч, попереднього рядка.



Ця структура даних називається сортуючим деревом. У корені сортуючого
дерева розташований найменший елемент. Крім того, у дереві побудовані шляхи
елементів масиву від листів до відповідного величині елемента вузла -
розгалуження. (На мал.1 шлях мінімального елемента a5 - від листа a5 до
кореня відзначений товстою лінією.)
Коли дерево побудоване, починається етап просівання елементів масиву по
дереву. Мінімальний елемент пересилається у вихідний масив B і усі
входження цього елемента в дереві заміняються на спеціальний символ M.



Потім здійснюється просівання елемента уздовж шляху, відзначеного
символом M, починаючи з листка, сусіднього з M (На мал 2. униз) і до
кореня. Крок просівання - це вибір найменшого з двох елементів, що
зустрілися на шляху до кореня дерева і його пересилання у вузол,
відзначений M. Просівання 2-го елемента показано на мал 3. (Символ М
більше, ніж будь-який елемент масиву).

a6 = min(M, a6)
a6 = min(a6, a8)
a3 = min(a3, a6)
b2 := a3

Просівання елементів відбувається доти, поки весь вихідний масив не
буде заповнений символами M, тобто n раз:

For I := 1 to n do begin
Відзначити шлях від кореня до листка символом M;
Просіяти елемент уздовж відзначеного шляху;

B[I] := корінь дерева

end;

Обґрунтування правильності алгоритму очевидно, оскільки кожне чергове
просівання викидає в масив У найменший з елементів масиву А, що залишилися.
Сортуюче дерево можна реалізувати, використовуючи або двовимірний
масив, або одномірний масиві ST[1..N], де N = 2n-1 (див. наступний розділ).
Оцінимо складність алгоритму в термінах M(n), C(n). Насамперед відзначимо,
що алгоритм TreeSort працює однаково на усіх входах, так що його складність
у гіршому випадку збігається зі складністю в середньому.
Припустимо, що n - ступінь 2 (n = 2l). Тоді сортуюче дерево має l + 1
рівень (глибину l). Побудова рівня I вимагає n / 2I порівнянь і пересилань.
Таким чином, I-ий етап має складність:
C1(n) = n/2+n/4+ ... + 2+1 = n-1, M1(n) = C1(n) = n - 1
Для того, щоб оцінити складність II-го етапу З2(n) і M2(n) помітимо, що
кожен шлях просівання має довжину l, тому кількість порівнянь і пересилань
при просіванні одного елемента пропорційно l. Таким чином, M2(n) = O(l n),
C2(n) = O(l n).
Оскільки l = log2n, M2(n)=O(n log2 n)), C2(n)=O(n log2 n), Але З(n) =
C1(n) + C2(n), M(n) = M1(n) + M2(n). Тому що C1(n) < C2(n), M1(n) < M2(n),
остаточно одержуємо оцінки складності алгоритму TreeSort за часом:
M(n) = O(n log2 n), C(n) = O(n log2 n),
У загальному випадку, коли n не є ступенем 2, сортуюче дерево будується
трохи інакше. “Зайвий” елемент (елемент, для якого немає пари) переноситься
на наступний рівень. Легко бачити, що при цьому глибина сортуючого дерева
дорівнює [log2 n] + 1. Удосконалення алгоритму II етапу очевидно. Оцінки
при цьому змінюють лише мультиплікативні множники. Алгоритм TreeSort має
істотний недолік: для нього потрібно додаткова пам'ять розміру 2n - 1.


1.2. Пірамідальне сортування


Алгоритм пірамідального сортування HeapSort також використовує
представлення масиву у виді дерева. Цей алгоритм не вимагає допоміжних
масивів, сортуючи “на місці”. Розглянемо спочатку метод представлення
масиву у виді дерева:
Нехай A[1 .. n] - деякий масив. Зіставимо йому дерево, використовуючи
наступні правила:

1.A[1] - корінь дерева ;
2.Якщо A[i] - вузол дерева і 2i ( n,
то A[2*i] - вузол - “лівий син” вузла A[i]
3.Якщо A[i] - вузол дерева і 2i + 1 ( n,
то A[2*i+1] - вузол - “правий син” вузла A[i]

Правила 1-3 визначають у масиві структуру дерева, причому глибина
дерева не перевершує [log2 n] + 1. Вони ж задають спосіб руху по дереву від
кореня до листків. Рух вгору задається правилом 4:

4.Якщо A[i] - вузол дерева і i > 1,
то A[i mod 2] - вузол - “батько” вузла A[i];

Приклад: Нехай A = [45 13 24 31 11 28 49 40 19 27] - масив. Відповідне
йому дерево має вид:



Зверніть увагу на те, що всі рівні дерева, за винятком останнього,
цілком заповнені, останній рівень заповнений ліворуч і індексація елементів
масиву здійснюється вниз і праворуч. Тому дерево упорядкованого масиву
відповідає наступним властивостям:
A[i] ( A[2*i], A[i] ( A[2*i+1], A[2*i] ( A[2*i+1].
Як це не дивно, алгоритм HeapSort спочатку будує дерево, що відповідає
прямо протилежним співвідношенням:
A[i] ( A[2*i], A[i] ( A[2*i+1]
а потім змінює місцями A[1] (найбільший елемент) і A[n].
Як і TreeSort, алгоритм HeapSort працює в два етапи:
I. Побудова сортуючого дерева;
II. Просівання елементів по сортуючому дереву.
Дерево, що представляє масив, називається сортуючим, якщо виконуються
умови (6). Якщо для деякого i ця умова не виконується, будемо говорити, що
має місце (сімейний) конфлікт у трикутнику i.
Як на I-ом, так і на II-ому етапах елементарна дія алгоритму полягає в
вирішенні сімейного конфлікту: якщо найбільший із синів більше, ніж батько,
то переставляються батько і цей син (процедура ConSwap).
У результаті перестановки може виникнути новий конфлікт у тому
трикутнику, куди переставлений батько. У такий спосіб можна говорити про
конфлікт (роду) у піддереві з коренем у вершині i. Конфлікт роду
вирішується послідовним вирішенням сімейних конфліктів проходом по дереву
вниз. (На мал шлях вирішення конфлікту роду у вершині 2 відзначений).
Конфлікт роду вирішено, якщо прохід закінчився (i > n div 2), або ж в
результаті перестановки не виник новий сімейний конфлікт (процедура
Conflict).

Procedure ConSwap(i, j : Integer);
Var b : Real;
Begin
If a[i] < a[j] then begin
b := a[i]; a[i] := a[j]; a[j] := b
end
End;

Procedure Conflict(i, k : Integer);
Var j : Integer;
Begin
j := 2*i;
If j = k
then ConSwap(i, j)
else if j < k then begin
if a[j+1] > a[j] then j := j + 1;
ConSwap(i, j); Conflict(j, k)
end
End;

I етап – побудова сортуючого дерева - оформимо у виді рекурсивної
процедури, використовуючи визначення:
Якщо ліве і праве піддерева T(2i) і T(2i+1) дерева T(i) є сортуючими,
то для перебудови T(i) необхідно вирішити конфлікт роду в цьому дереві.

Procedure SortTree(i : Integer);
begin
If i br Таким чином, описана нами процедура Hoare залежить від параметрів k таbrm - початкового і кінцевого індексів відрізка масиву, який обробляється.brbr Procedure Swap(i, j : Integer);br Var b : Real;br Beginbr b := a[i]; a[i] := a[j]; a[j] := bbr End;brbr Procedure Hoare(L, R : Integer);br Var left, right : Integer;br x : Integer;br Beginbr If L R then beginbr x := A[(L + R) div 2]; {вибір бар'єра x}br left := L; right := R ;br Repeat {зустрічний прохід}br While A[left] < x do Inc(left); {перегляд уперед}br While A[right] > x do Dec(right); {перегляд назад}
If left right;
Hoare(L, right); {сортуємо початок}
Hoare(left, R) {сортуємо кінець}
end
End;

Program QuickSort;
Const n = 100;
Var A : array[1..n] of Integer;
{ процедури Swap, Hoare, введення і висновку }
Begin
Inp; Hoare(1, n); Out
End.

Аналіз складності алгоритму в середньому, що використовує гіпотезу про
рівну імовірність усіх входів, показує, що:
C(n) = O(n log2 n), M(n) = O(n log2 n)
У гіршому випадку, коли в якості бар'єрного вибирається, наприклад,
максимальний елемент підмассиву, складність алгоритму квадратична.



1.4 Метод цифрового сортування

Іноді при розв’язанні задач типу задачі сортування можна
використовувати особливості типу перетворюваних даних для одержання
ефективного алгоритму. Розглянемо одну з таких задач - задачу про звертання
підстановки.
Підстановкою безлічі 1..n назвемо двовимірний масив A[1..2, 1..n] виду
|1 |2 |........|n-1 |n |
| | |.. | | |
|J1 |j2 |........|jn-1 |jn |
| | |... | | |

у якому 2-ий рядок містить всі елементи відрізка 1..n. Підстановка B
називається зворотньою до підстановки A, якщо B виходить з A сортуванням
стовпчиків A у порядку зростання елементів 2-го рядка з наступною
перестановкою рядків. Потрібно побудувати алгоритм обчислення зворотньої
підстановки. З визначення випливає, що стовпчик [i, ji] підстановки A
потрібно перетворити в стовпчик [ji , i] і поставити на ji-те місце в
підстановці B.

{Type NumSet = 1..n;
Substitution = array[ 1..2, NumSet] of NumSet; }

Procedure Reverse ( Var A, B : Substitution);
Begin
For i := 1 to n do begin
B[A[2, i], 2] := i; B[A[2, i], 1] := A[2, i]
end
End;

Складність процедури Reverse лінійна, оскільки тіло арифметичного циклу
складається з двох операторів присвоювання, в той час як стовпчики
підстановки відсортовані.



2. Практична реалізація мовою Паскаль швидких алгоритмів сортування



Практичною метою нашої дослідницької роботи було написання мовою
Pascal програми, яка б виконувала сортування будь-якої послідовності
елементів. Для того, щоб продемонструвати роботу різних швидких алгоритмів
сортування, ми залишили вибір конкретного алгоритму на розсуд користувача
програми. Тобто, ми створили основну програму – меню, яка пропонує
користувачеві три можливі варіанти швидких алгоритмів сортування: швидке
сортування, сортування Хоара та сортування “злиттям”. Вибір певного
алгоритму здійснюється за допомогою оператору “case of”, тобто натисканням
клавіш клавіатури 1, 2 або 3. Також ми передбачили варіант, коли користувач
програми натискає будь-яку іншу клавішу: в цьому випадку на екрані
з’явиться повідомлення про помилку. Також, після проведення сортування за
вибраним алгоритмом, користувач зможе продовжити роботу й випробувати інший
алгоритм. Для цього потрібно натиснути клавіші клавіатури “у” або “д” або
набрати слово “yes” чи “да” коли після завершення роботи одного з обраних
алгоритмів сортування на екрані з’явиться запитання “Хотите ли вы
продолжить работу с данной программой?”. Якщо ж користувач уже випробував
усі алгоритми або за браком часу (або бажання) хоче завершити роботу з
програмою, то йому достатньо буде лише натиснути на клавіатурі клавіші “n”
або “н” чи набрати слова “no” або “нет” після того, як на екрані
з’явиться зазначене вище запитання.
Програма виконує сортування послідовності за трьома алгоритмами
сортування. Кожний окремий алгоритм представлений у вигляді окремої
процедури.
Так, процедура Qsort виконує швидке сортування масиву, що вводиться.
Під час роботи цього алгоритму відбувається аналіз даної послідовності
одночасно у двох напрямках ( зліва-направо і зправа-наліво) . комп’ютер
порівнює два елементи, що стоять поряд зліва. Якщо ці елементи стоять на
своїх місцях, тобто перший з них є меншим за другий, то комп’ютер порівнює
перший елемент з останнім. Якщо при порівнянні останній елемент виявиться
меншим за перший, то комп’ютер виконає перестановку цих двох елементів.
Такі дії будуть відбуватися до тих пір, поки індикатор, якій відповідає за
ліву частину послідовності (в нашій процедурі це “i”) не перейде на праву
частину, а індикатор, що відповідає за праву частину масиву (в нашій
процедурі це “j”) не перейде на праву частину. Далі та ж сама процедура
викликається рекурсивно. Тобто, якщо ліва частина вже відсортована, то ми
викликаємо ту саму процедуру і комп’ютер виконує ті самі дії, але в
параметрах процедури ми змінюємо ліву границю. Те саме відбувається, коли
відсортована права частина масиву.
По суті цей алгоритм працює на основі алгоритму сортування обмінами,
але цей алгоритм вважається швидким, оскільки перегляд послідовності
відбувається у двох напрямках одночасно. Реалізовано ж цей алгоритм за
допомогою оператору “if”, який відповідає за порівняння елементів, та
пересилань.

Procedure _Qsort (var a:mas; low, hi: byte);
Var i,j:byte;
begin
if hi> low then
begin i:= low;
j:= hi;
x:= a[i];
While i< j do
if a[i+1] right;
HoareSearch ( L, right);
HoareSearch (left, R);
end;
End;


Також у програмі представлена процедура, яка відповідає за введення
масиву. Вона не винесена окремо в головну програму і користувач не побачить
її на своєму екрані-меню. Він побачить лише ті три сортування, що написані
у вигляді процедур.
В своїй роботі ми написали програму, що сортує масив за допомогою лише
трьох алгоритмів сортування. Але можна створити процедури, які б містили
алгоритми сортування деревом та пірамідального сортування. Це не вплине
дуже суттєво на нашу програму. Потрібно буде лише додати ці процедури
оператор “Case of” головної програми і користувач зможе обирати їх і
використовувати їх так само, як і ті алгоритми, що вже були розглянуті нами
в нашій дослідницькій роботі.



Висновки

Отже, ми розглянули як працюють швидкі алгоритми сортування і
спробували визначити їх складність.
Застосування того чи іншого алгоритму сортування для вирішення
конкретної задачі є досить складною проблемою, вирішення якої потребує не
лише досконалого володіння саме цим алгоритмом, але й всебічного
розглядання того чи іншого алгоритму, тобто визначення усіх його переваг і
недоліків.
Звичайно, необхідність застосування саме швидких алгоритмів сортування
очевидна. Адже прості алгоритми сортування не дають бажаної ефективності в
роботі програми. Але завжди треба пам’ятати й про те, що кожний швидкий
алгоритм сортування поряд із своїми перевагами може містити і деякі
недоліки.
Так, алгоритм сортування деревом, хоча й працює однаково на всіх входах
(так, що його складність в гіршому випадку співпадає зі складністю в
середньому), але цей алгоритм має і досить суттєвий недолік: для нього
потрібна додаткова пам’ять розміром 2n-1.
Розглядаючи такий швидкий алгоритм сортування, як пірамідальне
сортування, можна зазначити, що цей алгоритм ефективніший ніж попередній,
адже він сортує “на місці” , тобто він не потребує додаткових масивів.
Крім того, цей алгоритм (“ з точністю до мультиплікативної константи” (4,
74)) оптимальний: його складність співпадає з нижньою оцінкою задачі,
тобто за критеріями C(n) та M(n) він має складність O(n log2 n), але
містить складний елемент в умові. Тобто, в умові A[left] має бути строго
менше ніж x , а A[right] - строго більше за x. Якщо ж замість “строго
більше” та “строго менше” поставити знаки, що позначають “більше, або
дорівнює” та “менше, або дорівнює”, то індекси left і right пробіжать
увесь масив і побіжать далі. Вийти з цієї ситуації можна було б шляхом
ускладнення умов продовження перегляду, але це б погіршило ефективність
програми.
В нашій роботі ми розглянули деякі швидкі алгоритми сортування та їх
реалізацію мовою Pascal, дослідили не лише переваги таких алгоритмів,
ефективність їх використання, але й визначили деякі недоліки окремих
алгоритмів, що заважають вживати їх для вирішення першої ліпшої задачі
сортування.
Отже, головною задачею, яку має вирішити людина, яка повинна розв’язати
задачу сортування – це визначення як позитивних, так і усіх негативних
характеристик різних алгоритмів сортування, передбачення кінцевого
результату. До того ж , треба враховувати головне – чи , можливо, цю
задачу задовольнить один з класичних простих алгоритмів сортування.



Список використаних джерел


1. Абрамов С. А., Зима Е. В. Начала программирования на языке
Pascal. - М.: Наука, 1987.
2. Абрамов В. Г. Введение в язык Pascal: Учебное пособие для студентов
вузов по специальности Прикладная математика. – М.: Наука, 1988.
3. Джонс Ж., Харроу К. Решение задач в системе Турбо-Паскаль/ Перевод с
английского Улановой, Широкого. – М.: Финансы и статистика, 1991.
4. Зуев Е. А. Язык программирования Турбо Паскаль 6.0, 7.0. – М.: Радио и
связь, 1993.
5. Культин Н. Б. Программирование в TurboPascal 7.0 и Delphi. - Санкт-
петербург,1999.
6. Львов М. С., Співаковський О. В. Основи алгоритмізації та програмування.
– Херсон, 1997.
7. Перминов О. Н. Программирование на языке Паскаль. – М.: Радио и связь,
1988.
8. Перминов О. Н. Язык программирования Pascal. – М.: Радио и свіязь,1989.
9. Турбо Паскаль 7.0 Издание 10-е стереотипное. – Санкт-Петербург:
“Печатный Двор”, 1999.
10. Фаронов В. В. TurboPascal 7.0 . Начальный курс. – М.: “Нолидж”, 2000.



-----------------------
a1

a2

a3

a4

a5

a6

a7

a8

a2

a3

a5

a8

a3

a5

a5

a2 = min(a1,a2)
a3 = min(a3,a4)
a5 = min(a5,a6)
a8 = min(a7,a8)

a3 = min(a2,a3)
a5 = min(a5,a8)

a5 = min(a3,a5)

мал 1

a1

a2

a3

a4

M

a6

a7

a8

a2


a3

M

a8

a3

M

M

a5

a3

a4

M

a6

a7

a8

a3

a6

a8

a3

a6

a3

a1

a2

a2

a5 a3

A[2i]

A[2i+1]

A[i]

45

13

24

31

11

28

49

40

19

27

В


мал 2






Реферат на тему: Відношення і схеми відношень

Міністерство освіти України

Державний університет

“Львівська політехніка”



Кафедра ICM



ВІДНОШЕННЯ І СХЕМИ ВІДНОШЕНЬ



|Виконала: |студентка ФКТ |
| |групи ІСМ-51 |
| |Шаховська Н. Б. |
| | |
|Перевірив: |Пасічник В. В. |
| | |



Львів - 1999



Відношення і схеми відношень.


Теоретичні відомості.

Однією з основних переваг реляційної моделі є її однорідність. Всі
дані розглядаються як такі, що зберігаються у таблицях, в яких кожна
стрічка має один і той же формат і представляє собою деякий об’єкт
реального світу або відношення між об’єктами.
Будь-який об’єкт реального світу характеризується певною множиною
характеристик ( атрибутів (А1, А2, ..., Аn). Ця характеристика має ім’я
атрибута (А1, А2, ..., Аn) і множину допустимих значень ( доменів. Тоді
таблиця являє собою відношення, в якому кожна стрічка є множиною значень,
взятих по одному з домена кожного імені атрибута. Стрічки відношень
називаються кортежами і мають арність яка дорівнює кількості атрибутів.
Кортежі відношень утворюють множину, так як стрічки не дублюються.
Схемою відношення R називається скінченна множина імен атрибутів {А1,
А2, ..., Аn}. Кожному імені атрибута Аі ставиться у відповідність множина
Di ( домен атрибута. Це довільні непусті скінченні множини. Нехай D = D1 (
D2 ( … ( Dn. Відношення r зі схемою R ( це множина відображень {t1, t2, …,
tp} з R в D; Причому кожне відображення t(Ai) ( Di. Ці відображення
називаються кортежами.
Наведемо приклад.
Нехай ми маємо відношення РЕЙСИ ( розклад авіаліній.
Табл. 1

|номер |пункт-відправле|пункт-призначен|час-вильоту|час-прибуття|
| |ння |ня | | |
|83 |Нью-Йорк |Чікаго |1130 |1343 |
|84 |Чікаго |Нью-Йорк |1500 |1755 |
|109 |Нью-Йорк |Лос-Анджелес |2150 |252 |
|213 |Нью-Йорк |Бостон |1143 |1245 |


В даній таблиці R = {номер, пункт-відправлення, пункт-призначення,
час-вильоту, час-прибуття};
dom (номер) ( множина одно-, дво-, трьозначних чисел;
dom (час-вильоту) = dom (час-призначення) ( множина моментів часу.
t (номер) = 84 для першого кортежу.
Дане значення 84 називають А-значенням кортежу t. Якщо інтерпретувати
t як стрічку таблиці, то А-значення кортежу t є його входом у стовпчик з
іменем А.
Ключем відношення r(R) є така підмножина K ( R, що для будь-яких
різних кортежів t1 і t2 з r виконується t1(K) ( t2(K), і жодна підмножина
K( ( K не володіє цією властивістю. Множина K називається суперключем, якщо
K містить ключ відношення r.
В табл. 1 {НОМЕР} є ключем і суперключем, а {НОМЕР, ПУНКТ-
ВІДПРАВЛЕННЯ} є суперключем але не є ключем. Ключем також може служити
{ПУНКТ-ВІДПРАВЛЕННЯ, ПУНКТ-ПРИЗНАЧЕННЯ, ЧАС-ВИЛЬОТУ}.
Відношення розглядаються як об’єкти, що можуть змінюватись у часі,
тобто кортежі можуть додаватись, знищуватись або мінятись в певних
характеристиках. Тому існують операції оновлення відношень.
Операція додавання призначена для додавання кортежів у відношення r і
має вигляд
ADD (r; A1 = d1, …, An = dn).
Коли порядок імен атрибутів фіксований, то дана операція має вигляд
ADD (r; d1, …, dn).
Для даного прикладу ADD (РЕЙСИ; 117, Атланта, Бостон, 2205, 043).
Дана операція не виконується по наступних причинах:
1) кортеж, що додається, не відповідає схемі відношення.
2) деякі значення кортежа не належать відповідним доменам.
3) кортеж співпадає по ключу з кортежем, що вже існує у відношенні.
Операція знищення вводиться для знищення кортежів і має вигляд
DEL (r; A1 = d1, …, An = dn).
Скорочений варіант
DEL (r; d1, …, dn).
Якщо відношення має виділений ключ (ключ, який явно перечислений
разом з реляційною схемою), то допустима така форма запису
DEL (r; КЛЮЧ).
Приклад:
DEL (РЕЙСИ; 83).
Операція зміни призначена для модифікації частин кортежа. Вона має
вигляд
CH (r; A1 = d1, …, An = dn; C1 = e1, …, Cp = ep).
Модифікувати також можна, використовуючи значення ключа.
CH (r; КЛЮЧ; C1 = e1, …, Cp = ep).
Так як дана операція може бути отримана за допомогою операцій
знищення і додавання, то їй притаманні і всі помилки даних операцій.
Приклад:
CH (РЕЙСИ; НОМЕР = 109; ЧАС-ВИЛЬОТУ = 2140).

ПРИКЛАДИ

I. (а) Нехай дано схему відношення R = {ПРАЦІВНИК, УПРАВЛЯЮЧИЙ,
ПОСАДА, ЗАРПЛАТА, СТАЖ}, де атрибути ПРАЦІВНИК і УПРАВЛЯЮЧИЙ своїми
значеннями мають прізвища, ПОСАДА ( назву посади, ЗАРПЛАТА ( числа, що
виражають річну зарплату працівників, СТАЖ ( кількість повних років, які
пропрацював працівник на даній посаді. Побудувати відношення із схемою R,
опираючись на наступну інформацію:
( Робертс, Раскін та Рафаель ( агенти по продажу квитків;
( Рейбен приймає багає;
( Райс ( авіамеханік;
( Прайс керує всіма агентами по продажу квитків;
( Пауель керує Рейберном;
( Портер керує Райсом, Прайсом, Пауелем і самим собою;
( Пауель ( начальник наземних служб, а Портер ( начальник по
експлуатації;
( Кожен працівник одержує 10 %-ну надбавку за кожен повний
пропрацьований рік;
( Робертс, Раскін, Рафаель і Рейберн почали з окладу 12000. Робертс
тільки приступив до роботи, Раскін і Рафаель працюють півтора року, а
Рейберн ( 2 роки;
( Райс почав з окладу 18000 і зараз одержує 21780;
( Прайс і Пауель почали з окладу 16000 і працюють 3 роки;
( Портер почав з окладу 20000 і пропрацював на 2 роки більше ніж будь-
хто інший.
(b) Задайте операції оновлення для наступних змін у відношенні:
( Раскін і Рафаель пропрацювали повних 2 роки;
( Райс звільнився;
( Рендольф найнявся на посаду агента по продажу квитків;
Розв’язок
На основі поданої інформації отримуємо наступне відношення, яке
назвемо ПРАЦІВНИКИ:
|ПРАЦІВ-НИК|УПРАВЛЯ-ЮЧИЙ|ПОСАДА |ЗАРПЛА-ТА |СТАЖ |
|Робертс |Прайс |Агент по продажу квитків |12000 |0 |
|Раскін |Прайс |Агент по продажу квитків |13200 |1,5 |
|Рафаель |Прайс |Агент по продажу квитків |13200 |1,5 |
|Райс |Портер |Авіамеханік |21780 |2 |
|Рейберн |Пауель |Відповідальний за багаж |14520 |2 |
|Портер |Портер |Начальник по експлуатації|32210,2 |5 |
|Портер |Прайс | |32210,2 |5 |
|Пауель | |Начальник по експлуатації|21296 |3 |
|Прайс | | |21296 |3 |
| | |Начальник наземних служб | | |
| | |Керуючий агентами по | | |
| | |продажу квитків | | |


Розрахунок зарплати проходить у залежності від початкової зарплати та
кількості відпрацьованих років. Наприклад, продемонструємо процес
нарахування зарплати для працівника Прайс. Початковий його оклад становив
16000. отже, за один пропрацьваний рік він отримує надбавку до зарплати у
вигляді 10-ти відсотків. Отже, його зарплата становитиме 16000 + 1600 =
17600. за наступний пропрацьований рік він отримує надбавку у розмірі 1760
і його загальна зарплата становитиме 19360. За третій рік роботи він
отримав надбавку 1936. Його теперішня зарплата становить 21296.
Пауель і Прайс не мають керівників.
В даному випадку ключем відношення є підмножина атрибутів
К({ПРАЦІВНИК, УПРАВЛЯЮЧИЙ}, так як лише ці атрибути однозначно
ідентифікують кортежі. Так як даний ключ не є виділений, то для проведення
операцій оновлення не можна використовувати найкоротшу форму запису. Для
завдання (b) отримуємо наступні операції оновлення:
СН (ПРАЦІВНИКИ; Раскін, Прайс, Агент по продажу квитків, 13200, 1.5; СТАЖ =
2).
СН (ПРАЦІВНИКИ; Рафаель, Прайс, Агент по продажу квитків, 13200, 1.5;
СТАЖ = 2).
DEL (ПРАЦІВНИКИ; Райс, Портер, Авіамеханік, 21780, 2).
ADD (ПРАЦІВНИКИ; ПРАЦІВНИК = Рендольф, ПОСАДА = Агент по продажу
квитків)

ІІ. Задано схему відношень R = {НОМЕР-РЕЙСУ, АЕРОПОРТ-ПРИЗНАЧЕННЯ,
ГАЛЕРЕЯ, ДАТА, ЧАС}. Кортеж {d1d2d3d4d5} відношення r(R) означає, що
“посадка на рейс d1, що вилітає у пункт призначення d2, здійсниться через
галерею d3; дата відправлення d4; час відправлення d5”. Визначити ключі
відношення.
Розв’язок
Ключем даного відношення виступає НОМЕР-РЕЙСУ, так як не може
існувати двох рейсів , що здійснюються в одному аеропорті-відпранику і
мають однаковий номер. Також унікально ідентифікує кортежі такого
відношення підмножинав атрибутів {ГАЛЕРЕЯ, ДАТА, ЧАС}, так як з одного
місця не може одночасно відправитись два літаки. Дане відношення має багато
суперключів, які можна отримати з визначених ключів шляхом додавання до них
імен атрибутів, що не ввійшли у ключ.

ІІІ. Нехай t ( кортеж відношення r(R). Х, У ( підмножини R. Коли
вираз t(X)(Y) має зміст? Як його можна спростити у тих випадках, коли воно
має зміст?
Розв’язок
Так як t є відображенням з R в D, то це означає, що ми послідовно
знаходимо значення елементів на підмножині Х, а потім на підмножині У. Тоді
дані підмножини повинні перетинатись, а, отже, даний запис можна спростити
до вигляду t(X) ( t(Y).

IV. (a) Чи може об’єднання двох ключів бути ключем?
(b) Чи обов’язково перетин двох суперключів є ключем?
Розв’язок
За означенням ключем відношення r(R) є така підмножина K ( R, що для
будь-яких різних кортежів t1 і t2 з r виконується t1(K) ( t2(K), і жодна
підмножина K( ( K не володіє цією властивістю. Так як при об’єднанні
частини утвореного ключа самі володіють властивістю ключа, то отримана
множина атрибутів стає надлишковою і тому не утворює ключа.
За означенням суперключ одержується з ключа шляхом додовання до нього
імен атрибутів, що не увійшли у ключ. Якщо у ці суперключі входять однакові
ключі, тоді при перетині ми дійсно отримаємо ключ. Але можна перетинати
суперключі, у які входять різні ключі. Тоді ключа ми не отримаємо.
Наприклад, перетинаючи суперключі з таблиці 1 {НОМЕР, ЧАС-ВИЛЬОТУ} та
{ПУНКТ-ВІДПРАВЛЕННЯ, ПУНКТ-ПРИЗНАЧЕННЯ, ЧАС-ВИЛЬОТУ, ЧАС-ПРИБУТТЯ} ми
отримаємо {ЧАС-ВИЛЬОТУ}, який не є ключем.

V. Скільки максимально ключів і суперключів може мати дана схема
відношення R{A1A2…An}?
Розв’язок
Теоретично ключем може бути:
кожен з атрибутів (тобто кількість ключів дорівнює n);
кожна пара атрибутів ([pic]);
кожна трійка атрибутів і т. д.
З приведеного списку при n > 3 найбільшою кількістю ключів є [pic],
якщо n парна і [pic] у іншому випадку. Суперключі будуть отримані шляхом
додавання до ключа одного атрибута, два і т. д. Отже, максимальна кількість
суперключів може бути [pic] + ... + [pic].



VI. Що можна сказати про відношення з ключем К = [pic]?
Розв’язок
Таке відношення має порожню множину атрибутів, тобто фактично такого
відношення не існує.

VII. Нехай R = {B1, B2, …, Bm} ( ключ схеми відношення R{A1A2…An}, r
( відношення зі схемою R. Дано операцію CH (r; A1 = d1, …, An = dn; B1 =
e1, …, Bp = em). У відношенні r нема кортежа з К-значенням , є
кортеж і еі ( dom(Bi). Чи законна дана операція?
Розв’язок
Так як значення даного запису не відповідають перерахованим вище
помилкам, що виникають при операціях додавання (кортеж, що додається, не
відповідає схемі відношення; деякі значення кортежа не належать відповідним
доменам; кортеж співпадає по ключу з кортежем, що вже існує у відношенні)
та знищення (кортеж відсутній у відношенні), то ця операція є законна.

VIII. Нехай ( ( послідовність операцій оновлення, які потрібно
застосувати до відношенняr. Якщо змінити порядок операцій в (, то чи
обов’язково результат залишиться тим же самим при умові, що ( містить
(а) тільки операції додавання;
(b) тільки операції знищення;
(c) операції додавання і знищення;
(d) операції додавання і зміни;
(e) операції зміни?
Розв’язок
(а) результат не зміниться, так як операції не пов’язані між собою;
(b) результат не зміниться, так як операції не пов’язані між собою;
(c) перестановка операцій може привести до помилки і до зміни
результату, так як операція знищення може використовувати записи, ще не
створені операцією додавання;
(d) перестановка операцій може привести до помилки і до зміни
результату, так як операція зміни може використовувати записи, ще не
створені операцією додавання;
(e) операції зміни можуть бути пов’язані певним чином між собою,
тобто модифікувати одні і ті ж кортежі. Тоді перестановка даних операцій
може привести до використання значень зміненого кортежу, хоча така заміна
ще не відбулась. Тому перестановка може привести до виникнення помилки.




Новинки рефератов ::

Реферат: Гражданско-правовые сделки, расторжение трудового договора по инициативе работодателя (Право)


Реферат: Происхождение жизни (Биология)


Реферат: Основной капитал предприятия (Финансы)


Реферат: Проблемы развития системы социального обслуживания пожилых людей в современной России (Социология)


Реферат: Отбор детей в классы и группы с задержкой психического развития (Педагогика)


Реферат: Интерьер животных (Сельское хозяйство)


Реферат: Внешняя политика при Екатерине Великой (История)


Реферат: Российские РСЗО (Военная кафедра)


Реферат: Специальные виды литья. Литье под давлением (Технология)


Реферат: Героическая оборона Порт-Артура (История)


Реферат: Литература русского зарубежья первой половины XX века (По произведениям В. В. Набокова) (Литература)


Реферат: Военно-психологические вопросы в сочинениях Джона Б. Уотсона - как основоположника бихевиоризма (Психология)


Реферат: А.В. Суворов (История)


Реферат: Даосизм (Религия)


Реферат: Диагноз и краткая характеристика вирусного гепатита А (Спорт)


Реферат: Облік і аналіз фінансових результатів (Бухгалтерский учет)


Реферат: биография В. И. Ленина (до 1910 года) (Исторические личности)


Реферат: Индия (География)


Реферат: Кроссворд по философии (Философия)


Реферат: Возможности радиолокационного тренажера NMS-90 и его использование для решения задач расхождения судов в условиях ограниченной видимости (Технология)



Copyright © GeoRUS, Геологические сайты альтруист