Новосибирский Государственный Университет
Опубликован: 25.07.2006 | Доступ: свободный | Студентов: 3062 / 533 | Оценка: 4.21 / 3.83 | Длительность: 11:03:00
ISBN: 978-5-9556-0069-7
Специальности: Программист, Математик
Лекция 12:

Каркасы и изоморфизм деревьев

< Лекция 11 || Лекция 12: 12 || Лекция 13 >
Аннотация: Каркас неориентированного графа. Нахождение каркасов в графе. Алгоритм Краскала. Изоморфизм деревьев.

Каркас неориентированного графа

Оптимальным каркасом взвешенного графа называется каркас, минимизирующий некоторую функцию от весов входящих в него ребер. Чаще всего в качестве такой функции выступает сумма весов ребер, реже — произведение. Оптимальный каркас еще называют кратчайшей связывающей сетью для данного графа.

Задача о построении кратчайшей связывающей сети встречается в различных приложениях достаточно часто.

Нахождение каркасов в графе

Алгоритм нахождения каркаса на основе поиска в глубину.

Вход.	Связный граф G(V,E), заданный списками 
   смежности ЗАПИСЬ [{v}],\ v \in V.
Выход.	Каркас (V,T)  графа G.
Процедура	WGD ( G: граф; v: вершина)
//поиск в глубину, с нахождением ребер дерева; 
   переменные НОВЫЙ, ЗАПИСЬ, T  — глобальные//
Шаг 1. 	НОВЫЙ [{v}]={ложь} ;
Шаг 2. 	Для u \in (ЗАПИСЬ [v]  цикл
Шаг 3. 	если НОВЫЙ[ {u} ] то // ({v},{u})  — новое ребро//
Шаг 4. T= T \cup \{(v,u)\} ;
Шаг 5. WGD(u) ;
	все
все;
Шаг 6.	Начало //главная программа//
Шаг 7.	Для u(V  цикл НОВЫЙ [{v}] = \t{истина все} ;
Шаг 8. T=\oslash  //множество найденных к этому моменту ребер//
Шаг 9. WGD(r) ; // r  — произвольная вершина графа//
	все
конец.

Алгоритм нахождения каркаса на основе поиска в ширину.

Вход.	Связный граф G(V,E), представленный списками 
  смежности ЗАПИСЬ [{v}], v(V).
Выход.	Каркас (V,T)\ (V,T)  графа G.
Процедура	КАРКАС( {G}: граф; {v}: вершина)
Шаг 1.	для u \in V  цикл НОВЫЙ[u]=истина все; //инициализация//
Шаг 2. T=\oslash ; // — множество найденных к этому моменту ребер//
Шаг 3.	ОЧЕРЕДЬ = \oslash ; ОЧЕРЕДЬ \Leftarrow r ; //корень каркаса//
Шаг 4.	НОВЫЙ [{r}]= \t{ложь} ;
Шаг 5.	Пока ОЧЕРЕДЬ \ne \oslash  цикл
Шаг 6. {v} \Leftarrow  ОЧЕРЕДЬ;
Шаг 7.	Для {u}\in ЗАПИСЬ [v]  цикл
Шаг 8.	если НОВЫЙ [{u}]  то // (v, u)  — новое ребро//
Шаг 9.	ОЧЕРЕДЬ \Leftarrow u ;
Шаг 10.	НОВЫЙ [{u}]= \t{ложь} ;
Шаг 11. T= T \cup \{v, u)\} 
			все
		все
	все
все.

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

Вход.	Неориентированный граф G=(V, E)  с функцией 
  стоимости ребер c.
Выход.	Оптимальный каркас {T}=(V,S).
Метод
Процедура Оптимальный каркас ( G: граф) = 
Шаг 1. S = \oslash 
Шаг 2. VS = \oslash 
Шаг 3.	Построить очередь с приоритетами Q, 
   содержащую все ребра из E ;
Шаг 4.	Для всех v  из T  цикла  добавить \{v\}  к VS  все;
Шаг 5.	Пока |{VS}|> 1  цикл
Шаг 6.	Выбрать в Q  ребро (v, w)  наименьшей стоимости;
Шаг 7.	удалить ( v, w )  из Q ;
Шаг 8.	Если v  и w  принадлежат 
   различным множествам W_1  и W_2  из VS 
Шаг 9.	То заменить W_1  и W_2  на W_1 \cup W_2  в VS:
Шаг 10.	добавить (v,w)  к S 
		все
	все
все.

Пример.


Рис. 12.1.
Ребро Стоимость
(v_{1},v_{7}) 1
(v_{3},v_{4}) 3
(v_{2},v_{7}) 4
(v_{3},v_{1}) 9
(v_{2},v_{3}) 15
(v_{4},v_{7}) 16
(v_{1},v_{5}) 17
(v_{1},v_{2}) 20
(v_{1},v_{6}) 23
(v_{5},v_{7}) 25
(v_{5},v_{6}) 28
(v_{6},v_{7}) 36

Найдите оптимальный каркас для графа, приведенного на (рис.12.1).

< Лекция 11 || Лекция 12: 12 || Лекция 13 >
Никита Толышев
Никита Толышев
Владислав Нагорный
Владислав Нагорный

Подскажите, пожалуйста, планируете ли вы возобновление программ высшего образования? Если да, есть ли какие-то примерные сроки?

Спасибо!