Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ТА_Методички / Lab12_Prima_edited _07.08.13_

.pdf
Скачиваний:
27
Добавлен:
12.02.2016
Размер:
3.22 Mб
Скачать

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ

НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”

Кафедра САПР

Побудова мінімального кістякового дерева

МЕТОДИЧНІ ВКАЗІВНИКИ до лабораторної роботи № 12 з курсу: “Теорія алгоритмів”

для студентів базового напрямку 6.050101 “Комп’ютерні науки”

Затверджено на засiданнi кафедриСистеми автоматизованого проектування"

Протокол N ____ вiд __________2013р.

ЛЬВІВ – 2013

Побудова мінімального кістякового дерева: Методичні вказівки до лабораторної роботи №12 з курсу «Теорія алгоритмів» для студентів базового напрямку 6.050101 «Комп’ютернi науки» / Укл.: Денисюк П.Ю., Керницький А.Б., Медвідь А.В., Сосницький В.Ю., Юрчак І.Ю. - Львiв: Національний університет «Львівська політехніка», 2013.- 16 с.

Укладачі

Денисюк П.Ю., канд.техн.наук, доц.,

 

Керницький А.Б., др.інж., доц.,

 

Медвідь А.В.,

 

Сосницький В.Ю.,

 

Юрчак І.Ю., канд.техн.наук, доц..,

Відповідальний за випуск Лобур М.В., д-р техн.наук, проф.

Рецензенти

Цмоць І.Г., д-р техн.наук, проф.

 

Каркульовський В.І., канд.техн.наук, доц.

1. МЕТА РОБОТИ

Мета роботи – отримати навики використання алгоритмів побудови мінімального кістякового дерева в графах.

2.КОРОТКІ ТЕОРЕТИЧНІ ВІДОМОСТ

2.1.Мінімальне кістякове дерево (або мінімальне покриваюче дерево) у зв’язаному, зваженому неорієнтованому графі – це кістякове дерево цього графу, яке має мінімально можливу вагу, де під вагою дерева розуміється сума ваг його вхідних ребер.

В якості прикладу розглянемо задачу, маємо N міст, які потрібно з’єднати в єдину телефонну мережу. Для цього достатньо провести (N-1) телефонних ліній між містами. Як з’єднати міста так, щоб сумарна вартість з’єднань (телефонного кабелю) була мінімальною?

В загальному випадку, задачу можна сформулювати так: маємо зв’язний, неорієнтований граф з вагами на ребрах G(V, E), у якому V – множина вершин (контактів), а E – множина усіх можливих попарних з’єднань (ребер). Нехай для кожного ребра (U, V) однозначно визначено деяке дійсне число W(u, v) – його вага (довжина або вартість з’єднання). W()

називається ваговою функцією. Задача полягає у знаходженні такого зв’язного ациклічного графу T G , яке містить усі вершини, у яких сумарна вага ребер буде мінімальною.

Рис. 1. Мінімальне кістякове дерево у графі (числа над ребрами – вага ребер)

Властивості мінімальних кістякових дерев:

Максимальне кістякова дерево можна знайти, використовуючи алгоритм Прима (наприклад, замінивши ваги усіх ребер на протилежні: алгоритм не потребує, щоб ваги ребер були тільки додатними величинами).

Мінімальне кістякове дерево є єдиним, якщо вага усіх ребер є різною. Інакше може існувати декілька мінімальних кістякових дерев (вибір

одного з них за алгоритмом Прима, залежить від порядку перегляду ребер (вершин) з однаковими вагами).

Мінімальне кістякове дерево є кістяковим деревом з мінімальною вагою найважчого ребра. Цю властивість використовують при застосуванні алгоритму Крускала.

Критерій мінімального кістякового дерева: кістяк є мінімальним тоді і тільки тоді, коли для будь-якого ребра, яке не належить кістяку, цикл, утворений цим ребром, яке додається до кістяку, не містить ребер, важчого за це ребро.

Галузі використання

розроблення та проектування мереж (телефонних, комп’ютерних).

Виробництво друкованих плат. По аналогії з мережами: потрібно з’єднати n контактів провідниками з мінімальної загальною вартістю. (потрібно зазначити, що задача про мінімальне кістякове дерево є спрощенням реальної задачі.)

науковцями, зокрема біологами, використовуються багатовимірні дані для групування об’єктів (рослини, тварини). Мінімальне кістякове дерево дає змогу проводити розбиття їх на взаємозалежні класи, чітко визначати близьку по будові і характеристикам групи

Рис. 2. Приклад мінімального кістякового дерева, використаного для ілюстрації еволюції видів тварин

Загальновідомими є наступні алгоритми для знаходження мінімального кістякового дерева:

алгоритм Прима;

алгоритм Крускала;

алгоритм Борувки.

2.2. Алгоритм Прима

Алгоритм Прима — алгоритм побудови мінімального кістякового дерева зваженого зв’язного неорієнтованого графу. Алгоритм вперше був відкритий у 1930 році чеським математиком Войцехом Ярником, потім був перевідкритий Робертом Примом у 1957 році, і незалежно від них, Е. Дейкстрою у 1959 році.

Алгоритм Прима володіє властивістю, що ребра в множині А завжди утворюють єдине дерево. Дерево починається з довільної кореневої вершини і росте до того часу, доки не охопить всі вершини V. На кожному кроці, до дерева А додається “легше” ребро, яке з’єднує дерево і окрему вершину з частин графу, які залишилися. Це правило додає тільки найлегші для А ребра; тобто, по завершенню алгоритму, ребра в А утворюють мінімальне кістякове дерево. Дана стратегія є жадібною, оскільки на кожному кроці до дерева додається ребро, яке вносить мінімально можливий вклад в загальну вагу.

Час виконання алгоритму залежить від того, як шукається мінімальне ребро. Для вирішення цієї задачі використовують такі підходи:

1)Повний перебір усіх підходящих ребер(найгірший випадок)

2)Переглядати по одному ребру з попередньо-вибраних вершин.

3)Пересортувати ребра з кожної вершини в порядку зростання їхніх ваг

ізберігати вказівник на допустиме ребро. (тобто ребра з множини ще не вибраних вершин).

Т– множина ребер мінімального кістякового дерева

Q – черга пріоритетів вершин графу, де ключ – d[i] d[i] – відстань від і-тої вершини до побудованого дерева

р[i] – батько і-тої вершини (тобто вершина u, де (i, u) найлегше ребро якого з’єднує і з вершиною побудованого дерева)

w(i, j) – вага ребра, яке з’єднує вершини графу і, j. V – множина вузлів(вершин) графу.

ExtractMin(Q) – пошук ребра з мінімального вагою для і-тої вершини з черги Q.

На початку виконання алгоритму, множина T є пустою {Ø}.

Для кожної і-тої вершини множити V встановлюються такі значення: d[i] = INFINITY (наприклад це значення можна замінити числом:

const int INFINITY = 1000000000;) p[i] = NULL;

d[0] = 0; (будемо вважати першу вершину коренем майбутнього мінімального кістякового дерева. Тому відстань встановимо рівною нулю) Q = V; ( передаємо множину вершин графу у чергу. Час виконання алгоритму може залежати від того як передані дані - пересортовані відповідним чином) .

v = ExtractMin(Q); (знаходимо вершину, яка належить найлегшому ребру)

Поки множина Q не пуста, для кожної вершини u суміжної до вершини v: if(u є Q) && w(u, v) < d[u];

//Якщо u належить черзі Q і вага ребра v < відстані вершини u до побудованого дерева

d[u] = w(u, v); //відстань до графу рівна вазі ребра, яке з’єднує вершини u, v.

p[u] = v; // батько наступної вершини рівний v. v = ExtractMin(Q); //

T = T + (p[v], v); //до множини Т додаємо ребро, яке з’єднує вершину v (яка належить найлегшому ребру) з її батьком у подубованому дереві.

Псевдокод алгоритму

Т = { };

Для кожної вершини і є V d[i] = INFINITY;

p[i] = NULL; d[0] = 0;

Q = V;

v = ExtractMin(Q);

Поки Q не пуста, для кожної вершини u суміжної до v if( (u є Q) && w(u, v) < d[u])

d[u] = w(u, v); p[u] = u;

v = ExtractMin(Q); T = T + (p[v], v);

Оцінка складності

Час роботи алгоритму Прима залежить від способу зберігання графу і його вершин, які не входять у склад дерева. Якщо пріоритетна черга Q реалізована як звичайний масив d, то ExtractMin(Q) виконується за O(n) а вартість виконання операції d[u] = w(v, u) складає O(1). Якщо Q являє собою бінарну піраміду, то вартість ExtractMin(Q) знижується до O(log n), а вартість d[u] = w(v, u) зростає до O(log n). При використанні пірамід Фібоначчі ( або Купа Фібоначчі, структура даних яка являє собою набір дерев, впорядкованих згідно з властивістю неспадної піраміди) операція

ExtractMin(Q) виконається за O(log n), а d[u] = w(v, u) за O(1).

Час роботи алгоритму наведений у таблиці. На час його виконання впливає спосіб зберігання графу і його вершин.

Спосіб представлення графу і пріорітетної

Асимптотика

черги

 

 

 

Масив d, списки суміжності (матриця

O(V2)

суміжності)

 

 

 

Бінарна піраміда, списки суміжності

O((V + E) log V) = O(E log V)

 

 

Піраміда Фібоначчі, списку суміжності

O(E + V log V)

 

 

Приклад виконання алгоритму Прима

1.Початкова фаза. Мінімальний каркас, який складається з кореня і пустої множини ребер.

2.Ребро з вагою 6 є мінімальним ребром, яке з’єднує корінь з іншими вершинами. Додаємо його до мінімального кістякового дерева.

3. Наступне «безпечне» ребро з вагою 11. Додаємо його.

4. Послідовно додаємо решту «безпечних» ребер:

Ребра с вагою 17, 19 і 25 – не є безпечними. Їх кінці знаходяться в одній компоненті зв’язності. Ребро з вагою 21 – безпечне, тому додаємо його. Таким чином, мінімальне кістякове дерево побудоване.

Ще один приклад виконання алгоритму Прима. Коренева вершина – а. Заштриховані ребра належать мінімальному каркасу дерева.

Рис. 3. Приклад побудови мінімального кістякового дерева за допомогою алгоритму Прима

2.3. Алгоритм Крускала

Алгоритм Крускала об’єднує вершини графу у декількох зв’язних компонентах, кожна з яких є деревом. На кожному кроці з усіх ребер, які з’єднують з різних компонент зв’язності, вибирається ребро з найменшою вагою. Необхідно перевірити, чи воно є безпечним. Безпечність ребра гарантується теоремою про безпечність ребра. Так як ребро є найлегшим з усіх ребер, виходячи з даної компоненти, воно буде безпечним. У алгоритмі Крускала вибір на кожному кроці безпечного ребра реалізується таким чином: усі ребра графу G перебираються за зростанням ваги. Для чергового ребра перевіряється, чи не лежать кінці ребра в різних компонентах зв’язності, і якщо так, то ребро додається і компоненти об’єднуються.

Приклад виконання алгоритму Крускала

Початкова фаза. Мінімальний

Перебираємо ребра в порядку

покриваючий ліс пустий.

зростання ваги: першим буде ребро з

 

вагою 2. Додаємо його до

 

кістякового дерева.

Наступним безпечним ребром з

Робимо наступні кроки аналогічно

вагою 6. Додаємо його.

 

Ребра с вагою 17, 19 і 25 – небезпечні. Їхні кінці лежать в одній компоненті. Ребро з вагою 21 – безпечне, тому додаємо його. Отримуємо мінімальне кістякове дерево

Соседние файлы в папке ТА_Методички