русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

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


Дата добавления: 2015-07-23; просмотров: 781; Нарушение авторских прав


Алгоритм построения кратчайшего дерева для графа G(X,U) состоит в следующем:

1. Выбираем самое короткое ребро графа u1 , затем ребро u2, самое короткое из оставшихся;

2. Из оставшихся ребер выбираем самое короткое ребро u3 так, чтобы оно не образовывало цикла с выбранными ребрами;

3. Продолжаем эту процедуру. На k-м шаге к выбранным ребрам u1,…,uк-1 добавляем самое короткое ребро из оставшихся │U│-(к-1) ребер так, чтобы оно не образовывало цикла с выбранными ребрами;

4. При k=n-1 процесс заканчивается. Получим граф без циклов с (n-1)-м ребром. На основании теоремы 1 (пункт 2) построенный граф есть дерево, обозначим его T(n-1).

 

Докажем, что построенное по этому графу дерево T(n-1) кратчайшее.

 

1. Сначала предположим что G – полный граф, и длины всех его ребер различны. Для доказательства воспользуемся методом от противного. Предположим, что построенное T(n-1) дерево не кратчайшее и имеется отличное от него кратчайшее дерево T. В этом случае существуют две возможности:

а) T и Т(n-1) не имеют общих ребер. Присоединим к дереву Т ребро u1Є Т(n-1). В этом случае согласно пункту 4 теоремы 1 в получившемся графе имеется цикл, одним из ребер которого является u1. Выбросим из этого цикла любое ребро u’≠u1.В результате этой операции получим частичное дерево Т', которое отличается от Т одним ребром: u’ заменено u1. Но l(u1) < l(u') , т.к. u1 – кратчайшее ребро. Следовательно, l(T') < l(T) т.е. Т не кратчайшее дерево;

б) Т и Т(n-1) имеют общие ребра u1 , u2 ,…, u(k-1). Пусть uк есть первое ребро, принадлежащее Т(n-1), но не принадлежащее Т.

Рассмотрим граф, который получится присоединением к дереву Т ребра uк, т.е. . В соответствии с пунктом 4 теоремы 1 в нем есть цикл μ, причем μ содержит ребро u’, не принадлежащее Т(n-1), т.к. в противном случае дерево Т(n-1) содержало бы цикл, что противоречит определению дерева.



Удалив из цикла μ ребро u’, получим дерево , отличающееся от Т одним ребром: u' заменено на uk. Но l(uk)<l(u’) , т.к. в противном случае на k-м шаге при построении дерева Т(n-1) в него включили бы ребро u’. Следовательно, l(Т')<l(Т) т.е. Т – не кратчайшее дерево.

 

2. Пусть G(X,U)- неполный граф, но его ребра имеют разную длину. Пусть l(U)=L –сумма длин всех ребер графа G. Присоединим к G столько новых ребер, сколько требуется для получения полного графа. Припишем каждому вновь построенному ребру длину lj>L.

В полученном полном графе построим кратчайшее дерево Т(n-1).

На основании теоремы 2 в графе G есть кратчайшее дерево, длина которого не превосходит L. Частичное дерево графа G будет являться частичным деревом для построенного полного графа. Поэтому ни одно новое ребро в кратчайшее дерево входить не может. Следовательно, для построения кратчайшего частичного дерева в графе G можно пользоваться алгоритмом Краскала.

 

3. Предположим теперь, что некоторые ребра графа G(X,U) имеют одинаковую длину. Пусть Δ – минимальная ненулевая разность длин ребер. Обозначим , где N=│U│. Пусть l1,…,lm – все значения длин ребер графа; kj ребер принимают значение lj. Занумеруем ребра графа в порядке увеличения длины. Затем изменим длину ребра графа следующим образом: . В получившемся графе длины всех ребер различны. Выберем с помощью алгоритмов Краскала кратчайшее частичное дерево. Проведенное изменение длин ребер графа обладает тем свойством, что если в исходном графе , то и в графе с ребрами измененной длины . Следовательно, кратчайшее частичное дерево в новом графе будет кратчайшим и в старом.

В графе, где некоторые ребра имеют одинаковую длину, кратчайшее частичное дерево может не быть однозначно определенным.

Пример

Требуется построить газопровод, соединяющий 10 городов (рис. 3.2.1.). Возможные соединения городов обозначены ребрами, длины которых l(xi, xj), представляющие собой стоимость строительства газопровода на участке (xi, xj), заданы и обозначены на графе. Как построить самый дешевый газопровод?

Задача сводится к отысканию частичного дерева заданного графа, общая длина ребер которого минимальна. Воспользуемся алгоритмом Краскала.

Частичное дерево должно содержать (n-1) ребер, т.е. 9. Общее число ребер исходного графа .

 

Рис. 3.2.1

Заданные длины ребер удобно поместить в следующую симметричную таблицу, в которой достаточно заполнить один из углов – верхний или нижний по отношению к главной диагонали (рис.3.2.2). На пересечении строки xi и столбца xj стоит число, равное длине дуги (xi,xj), т.е. l(xi,xj). Число заполненных клеток равно числу ребер графа. Следуя алгоритму, выбираем самые короткие ребра u1=(x1,x2), u2=(x4,x6), l(u1)=l(u2)=1.

 

Рис. 3.2.2

Отметим это, зачеркнув выбранные числа в таблице и пометив выбранные ребра на графе жирной чертой. Наименьшее из оставшихся чисел в таблице есть 2, т.е. длина дуги (x1,x3). Выбираем в качестве u3 ребро (x1,x3), т.к. оно не образует цикла с выбранными ребрами. Вновь делаем отметку в таблице и на графе и т.д. Получим в результате u4=(x9,x10), u5=(x1,x10), u6=(x4,x5), u7=(x2,x5), u8=(x8,x10), u9=(x7,x6).

Длина последнего выбранного ребра равна 9, т.к. ребра графа с меньшими длинами не могут являться ребрами дерева. Сумма длин ребер построенного дерева L=34. Стоимость строительства самого дешевого газопровода по исходным данным составляет 34 денежные единицы.




<== предыдущая лекция | следующая лекция ==>
Постановка задачи | Экстремальные задачи на графах


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.18 сек.