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

дискретка_все_практики / дискретка / Раздел 1 Практика 3

.doc
Скачиваний:
30
Добавлен:
22.05.2015
Размер:
446.46 Кб
Скачать

ПРАКТИЧЕСКАЯ РАБОТА №3

ПОСТРОЕНИЕ ГРАФА НАИМЕНЬШЕЙ ДЛИНЫ

  1. ОБЩИЕ СВЕДЕНИЯ

Большое практическое значение имеет следующая задача, которую можно сформулировать в виде задачи о проведении дорог. Имеется несколько городов а, b, с ..., которые нужно соединить между собой сетью дорог. Для каждой пары городов (х, у) известна стоимость 1(х, у)' строительства соединяющей их дороги. Задача состоит в том, чтобы построить самую дешевую из возможных сетей дорог. Вместо сети дорог можно рассматривать сеть линий электропередачи, сеть нефтепроводов и т. п. Называя в графе, изображающем сеть дорог, величину 1(х, у) длиной ребра (х, у), приходим к задаче о построении графа наименьшей длины. Поэтому далее в качестве стоимости дорог примем длину ребер графа.

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

Граф наименьшей длины всегда является деревом, так как если бы он содержал цикл, можно было бы удалить одно из ребер этого цикла и вершины все еще остались бы соединенными. Следовательно, для соединения п вершин нужно построить п-1 ребро.

Покажем, что граф наименьшей длины можно построить, пользуясь следующим правилом. Прежде всего, соединяем две вершины с наиболее коротким ребром . На каждом из следующих шагов добавляем самое короткое из ребер , при присоединении которого к уже имеющимся ребрам не образуется никакого цикла. Если имеется несколько ребер одинаковой длины, то выбираем любое из них. Каждое дерево Q, построенное таким образом, будем называть экономическим деревом. Его длина равна сумме длин отдельных ребер:

(1)

Рисунок 1 Построение графа наименьшей длины

Покажем, что никакое другое дерево, соединяющее те же вершины, не может иметь длину, меньшую длины экономического дерева Q

Пусть Р - дерево наименьшей длины, соединяющее рассматриваемые вершины, а Q - любое экономическое дерево. Предположим, что ребра занумерованы в том порядке, в котором они присоединялись при построении Q, т. е. удовлетворяют условию l()l(). Если дерево Р не совпадает с Q, то Q имеет по меньшей мере одно ребро не принадлежащее Р. Пусть =(a, b)-первое такое ребро и пусть L(a, b)-цепь графа Р, соединяющая вершины а и b, как, например, на рис 1. Если ребро добавить к Р, то получим цикл, а так как Q не имеет циклов, то в этот цикл должно входить по крайней мере одно ребро, не принадлежащее Q. Пусть это будет . Удалив его, получим дерево Р' с тем же числом вершин, что и Р, длина которого

l(Р')=l(Р)+l()-l() (2)

Так как граф Р имеет наименьшую длину, то l()l(). Но было ребром наименьшей длины, при добавлении которого к ребрами -не получается циклов. Так как при добавлении к этим ребрам также не получается никакого цикла, то

= (3)

и, следовательно, Р' имеет, так же как и Р, наименьшую длину. Но Р' имеет с экономическим деревом Q на одно общее ребро больше, чем Р. Повторяя эту операцию несколько раз, получаем дерево наименьшей длины, совпадающее с Q. Следовательно, Q-дерево наименьшей длины.

Описанный выше метод был предложен Дж. Краскалом в 1956 г. Данный алгоритм позволяет построить экстремальный граф (граф наименьшей длины) любого связного графа. Граф называется связным, если он содержит ровно одну компоненту связности. Это означает, что между любой парой вершин этого графа существует, по крайней мере, один путь.

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

 

П2

П3

П4

П5

П6

П7

П8

П9

П1

25

13

32

34

35

49

19

14

П2

 

12

31

59

60

73

34

40

П3

 

 

19

47

48

61

32

27

П4

 

 

 

65

66

80

51

46

П5

 

 

 

 

26

15

28

48

П6

 

 

 

 

 

19

54

 35

П7

 

 

 

 

 

 

42

61

П8

 

 

 

 

 

 

 

33

Таблица 1 Расстояния между поселками

На первом шаге выбираем самый короткий участок искомой сети дорог, связывающей поселки. Это дорога длиною 12 км между поселками П2 и П3. Затем добавляем к ней дороги между П1 и П3 (13 км), П1 и П9 (14 км), П5 и П7 (15 км), П3 и П4 (18 км). Следующее минимальное расстояние между поселками равно 19 км. Таково расстояние между П1 и П8 и между П6 и П7. Так как обе эти дороги не образуют цикла с уже отобранными дорогами, то обе они добавляются в список. Следующие по длине (25 км и 26 км) дороги между П1, П2 и П5, П6 нельзя добавлять в наш список  иначе появятся циклы: П1, П2, П3, П2 или П5, П6, П7, П5. Восьмая и последняя дорога искомого минимального остова имеет длину 28 км, она проходит между П5 и П8. Граф наименьшей длины (экономическое дерево), связывающий девять поселков, изображен на рис. 2. Минимальная длина дорог, связывающих поселки, равна 138 км.

Рисунок 2 Граф наименьшей длины, связывающий девять поселков

Замечание: алгоритм Краскала также называется алгоритмом построения остова наименьшей стоимости, где G=(V,E) - связный неориентированный граф, для которого задана функция стоимости, отображающая ребра в вещественные (целые) числа; остовным деревом для данного графа называется неориентированное дерево, содержащее все вершины графа. Стоимость остовного дерева определяется как сумма стоимостей его ребер.

Экстремальное дерево может быть построено для произвольного графа, а не только для полного графа. Например, связи между некоторыми вершинами могут быть нежелательными или недопустимыми.

2. ЦЕЛЬ И ПОРЯДОК РАБОТЫ

Цель работы - научится строить граф наименьшей длины.

Порядок работы:

  • изучить описание работы;

  • согласно своему варианту, решить заданные примеры без использования ЭВМ;

  • написать и отладить программу в соответствии с заданием;

  • оформить отчет.

3. ЗАДАНИЯ

3.1 Задания для ручного просчета:

Исходный граф задан матрицей смежности. На вершинах данного графа и его ребрах постройте граф наименьшей длины и определите сумму длин его ребер.

Рассмотрим пример:

A

B

C

D

E

A

0

1

7

8

8

B

1

0

6

7

7

C

7

6

0

1

1

D

8

7

1

0

2

E

8

7

1

2

0

Построим по заданной матрице смежности граф.

Список ребер графа упорядочим по возрастанию длины ребра: (АB),(CD),(CE),(DE),(BC),(AC),(BC),(BE),(AD),(AE). Включаем в результат ребра AB, CD,CE, ребро DE в результат не входит, так как оно образует цикл с ранее включенными ребрами CD и CE.

Следующим в результирующее дерево включается ребро BC. Ребра BC, BE, AD, AE из решения исключаются, так как они также образуют циклы.

Определим сумму длин ребер полученного экономического дерева:

AB+CD+CE+BC=1+1+1+6=9

Построим экономическое дерево:

Исходный граф задан матрицей смежности. На вершинах данного графа и его ребрах постройте граф наименьшей длины и определите сумму длин его ребер в соответствии со своим вариантом.

1.

A

B

C

D

E

F

G

A

0

3

1

5

7

5

6

B

3

0

5

3

1

8

6

C

1

5

0

1

5

1

2

D

5

3

1

0

3

3

3

E

7

1

5

3

0

1

5

F

5

8

1

3

1

0

1

G

6

6

2

3

5

1

0

2.

A

B

C

D

E

F

G

A

0

2

1

10

7

5

6

B

2

0

10

3

1

8

6

C

1

5

0

1

5

1

2

D

5

3

1

0

3

4

3

E

7

1

5

3

0

1

5

F

5

8

1

4

1

0

1

G

6

6

2

3

5

1

0

3.

A

B

C

D

E

F

G

A

0

3

1

5

7

5

2

B

3

0

5

3

6

8

6

C

1

5

0

1

5

1

2

D

5

3

1

0

3

3

3

E

7

6

5

3

0

1

5

F

5

8

1

3

1

0

1

G

2

6

2

3

5

1

0

4.

A

B

C

D

E

F

G

A

0

3

1

5

7

5

6

B

3

0

5

3

7

2

6

C

1

5

0

1

9

1

2

D

5

3

7

0

3

3

11

E

7

1

9

3

0

1

5

F

5

2

1

3

1

0

1

G

6

6

2

11

5

1

0

5.

A

B

C

D

E

F

G

A

0

3

2

5

7

5

6

B

3

0

5

3

1

8

7

C

2

5

0

1

5

1

2

D

5

3

1

0

3

3

3

E

7

1

5

3

0

2

5

F

5

8

1

3

2

0

1

G

6

7

2

3

5

1

0

6.

A

B

C

D

E

F

G

A

0

3

1

5

7

3

7

B

3

0

5

3

1

8

6

C

1

5

0

1

5

1

2

D

5

3

1

0

3

2

3

E

7

1

5

3

0

1

5

F

3

8

1

2

1

0

1

G

7

6

2

3

5

1

0

7.

A

B

C

D

E

F

G

A

0

3

11

5

7

5

6

B

3

0

5

3

1

5

6

C

11

5

0

1

5

1

2

D

5

3

1

0

3

3

3

E

7

1

5

3

0

1

5

F

5

5

1

3

1

0

4

G

6

6

2

3

5

4

0

Соседние файлы в папке дискретка