Как найти степень вершины по матрице смежности

Студворк — интернет-сервис помощи студентам

Здравствуйте! Мне нужно найти по данной матрице смежности графа нужно найти количество ребер и степени вершин этого графа. Имею два теоретических вопроса.
Я вывел две закономерности и хочу уточнить их справедливость.
1. Как найти количество ребер графа по матрице смежности графа ?
Количество ребер = сумма всех элементов матрицы поделить на 2.
2. Как найти степени вершин по матрице смежности этого графа ?
Так как, один ряд соответствует одной точке, то сумма его элементов (элементов этого ряда) будет равна степени графа соответствующей вершины.
Доказательство (подстановка ) :
Допустим нам дана следующая матрица смежности графа и сам граф (прикрепил его картинку).
Проверим утверждение 1 :
Сумма всех элементов матрицы смежности этого графа (откинем все нули — сложим только единицы) = 6
и теперь поделим полученный результат на 2 = 6 / 2 = 3 ребра.
Проверяем, на картинке действительно у графа 3 ребра.
Теперь подступим к утверждению 2 :
Запишем в столбик степень каждой вершины графа :

Код

|   Вершина    |------Подсчеты-----|    Степень   |
|      1       |     0+0+0+1+0     |       1      |
|      2       |     0+0+0+1+0     |       1      |
|      3       |     0+0+0+1+0     |       1      |                
|      4       |     1+1+1+0+0     |       3      |                     
|      5       |     0+0+0+0+0     |       0      |                     
|-------------------------------------------------|

Напоминаю, степень вершины — это количество выходящих из нее ребер (линий).
Итак, как мы видим все подсчеты соответствуют графу :
из 1-й вершины выходит одно ребро,
из 2-й — одно,
из 3-й — одно,
из 4-й — три,
из 5-й — ноль (ни с чем не соединена) .

Повторю свой вопрос, мне нужно убедиться, верно ли я вывел эти утверждения, справедливы и правильны ли они.
Если нет, то скажите, как сделать это верным образом.

Спасибо!

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

#include <stdio.h>

#include <stdlib.h>

#include <locale.h>

// количество вершин графа

#define VERTEX_COUNT 9

//———————————————————————

// вычисление степени заданной ( по индексу ) вершины графа

//———————————————————————

int Get_degree_vertex( const int matrix[][ VERTEX_COUNT ], const int index_vertex )

{

int index;

int degree = 0;

for ( index = 0; index < VERTEX_COUNT; index++ )

{

degree += matrix[ index_vertex ][ index ];

}

return degree;

}

//———————————————————————

// вычисление степеней всех вершин заданного графа

//———————————————————————

void Get_degree_vertexes( const int matrix[][ VERTEX_COUNT ], int degrees[] )

{

int index_vertex;

for ( index_vertex = 0; index_vertex < VERTEX_COUNT; index_vertex++ )

{

degrees[ index_vertex ] = Get_degree_vertex( matrix, index_vertex );

}

}

//———————————————————————

// вывод степеней вершин графа на экран

//———————————————————————

void Print_degrees( const int degrees[] )

{

int index_vertex;

printf( «Степени вершин заданного неориентированного графа:n» );

for ( index_vertex = 0; index_vertex < VERTEX_COUNT; index_vertex++ )

{

printf( «t- вершина #%d имеет степень, равную %dn», index_vertex + 1, degrees[ index_vertex ] );

}

}

//———————————————————————

// главная функция программы ( точка входа )

//———————————————————————

int main( void )

{

// фиксированная матрица смежности неориентированного графа,

// рассмотренного в статье на сайте

const int matrix[ VERTEX_COUNT ][ VERTEX_COUNT ] =

{

0, 1, 1, 1, 0, 1, 0, 0, 0,

1, 0, 0, 0, 0, 0, 1, 1, 1,

1, 0, 0, 1, 1, 0, 0, 0, 0,

1, 0, 1, 0, 0, 0, 1, 1, 0,

0, 0, 1, 0, 0, 1, 0, 1, 0,

1, 0, 0, 0, 1, 0, 0, 1, 0,

0, 1, 0, 1, 0, 0, 0, 1, 0,

0, 1, 0, 1, 1, 1, 1, 0, 0,

0, 1, 0, 0, 0, 0, 0, 0, 0

};

// массив хранит степени соответсвенных вершин

int degrees[ VERTEX_COUNT ] = { 0 };

// русификация диалогов программы

setlocale( LC_ALL, «Russian» );

// вычисление степеней вершин и вывод результата на экран

Get_degree_vertexes( matrix, degrees );

Print_degrees( degrees );

// задержка работы программы, чтобы у пользователя была возможность просмотреть результат

printf( «nn» );

system( «pause» );

return EXIT_SUCCESS;

}

Определение
7.10.
Степенью
вершины v
для неориентированного графа, обозначается
d(v),
называется количество ребер, инцидентных
этой вершине. Вершина степени 0 называется
изолированной.
Вершина степени 1 называется висячей.

Определение
7.11.
Полустепенью
исхода
вершины
v
для орграфа
называется количество дуг, для которых
v
является начальной вершиной, обозначается
.

Полустепенью
захода

вершины v
называется количество дуг, для которых
v
является конечной вершиной, обозначается
.
Если,
то вершинаv
называется истоком.
Если
,
то вершинаv
называется стоком.

Теорема 7.2.
(
Теорема
Эйлера
)
Сумма степеней вершин графа равна
удвоенному количеству ребер:

.

Доказательство.
При подсчете суммы степеней вершин
каждое ребро учитывается два раза: для
одного конца ребра и для другого.

Следствие 1.
Число вершин нечетной степени четно.

Доказательство.
По теореме Эйлера сумма степеней всех
вершин – четное число. Сумма степеней
вершин четной степени четна, значит,
сумма степеней вершин нечетной степени
также четна, следовательно, их четное
число.

Следствие 2.
Сумма полустепеней вершин орграфа
равна удвоенному количеству дуг:

.

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

Пример 7.5.
Определить степени вершин данного
графа.

Пример 7.6.
Определить полустепени исхода и захода
данного орграфа.

7.5. Представление (способы задания) графов.

  1. Граф
    как алгебраическая система
    :

модель, носителем
которой является множество вершин, а
отношение – бинарное отношение смежности
вершин.

< {a,b,c,d};
множество
вершин

{(a,b),(b,a),(b,c),(c,b),(a,c),(c,a),(c,d),(d,c)}
– множество
рёбер
>

  1. Геометрический

Получается путём
расположения различных точек на
плоскости для каждой вершины vÎV,
причём если (v1,v2)ÎЕ,
то проводится ребро (дуга) из v1
в v2.

Для представления
в компьютере чаще всего граф задается
либо матрицей
смежности
,
либо матрицей
инциденций
.

Матрицей
смежности вершин неориентированного
графа

G,
содержащего n
вершин, называют квадратную матрицу
A=aij
n-го
порядка, у которой строки и столбцы
матрицы соответствуют вершинам
неориентированного графа.

Элементы aij
матрицы A
равны числу ребер, направленных из i
вершины в j-ю.
В случае неориентированного
графа
G
ему вместе с ребром (vi,
vj)
принадлежит и ребро (vj,
vi),
поэтому матрица смежности вершин
A=aij
будет симметрична относительно главной
диагонали.

ПРИМЕР.
Граф: множество вершин V
= {a,b,c,d,e}

Множество
ребер

Е
= {{а, b},
{а, е}, {b,
c},
{b,
d},
{c,
e},
{d,e}},

Матрица смежности
симметрична относительно главной
диагонали.

На главной диагонали
стоит 1 (символ Л) из-за
нерефлексивности
отношения на множестве вершин (EÍV´V)

Логическая матрица
отношения на множестве вершин графа,
которое задается его ребрами.

a b c d

a 0 1 0 1

b 1 0 1 1

с 0 1 0 1

d 1 1 1 0

простой
граф

a b c d

a 1 1 0 1

b 1 0 3 0

c 0 3 0 2

d 1 0 2 0

граф
с кратными

рёбрами
и петлёй

Определение
7.12.
Матрица
смежности вершин орграфа

G,
содержащего n
вершин-
это квадратная матрица A=aij
n-го
порядка, у которой строки и столбцы
матрицы соответствуют вершинам орграфа.

Элементы aij
матрицы A
равны числу дуг, направленных из i
вершины в j-ю.
Если орграф состоит из однократных
дуг, то элементы матрицы равны либо 0,
либо 1.

Матрица
смежности:

Пусть дан граф G,
его матрица
смежности

А = [aij]
определяется следующим образом:

aij
= 1 если в
G
существует дуга (
xi,
x
j)

aij
= 0 если в
G
нет дуги (
xi,
x
j)

Определение
7.14.
Матрицей
инциденций (инцидентности) неориентированного
графа с
вершинами

и
ребрами

называется
матрица
размерности,
строки которой соответствуют вершинам,
а столбцы – ребрам. Элементыматрицы инциденций неориентированного
графа равны 1, если вершинаинцидентна ребру,
и 0 в противном случае.

Матрицей
инциденций (инцидентности) орграфа с
вершинами

и
дугами

называется
матрица
размерностиnm,
строки которой соответствуют вершинам,
а столбцы -дугам
орграфа.

Элементы cij
равны

1, если дуга ej
исходит из i
вершины;

–1, если дуга ej
заходит в i
вершину;

0, если дуга не
инцидентна i
вершине

Поскольку каждая
дуга инцидентна двум различным вершинам,
за исключением того случая, когда дуга
образует петлю, то каждый столбец либо
содержит один элемент, равный 1, и один
– равный –1, либо все элементы столбца
равны 0.

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

В каждом столбце
также будут две единицы, так как каждое
ребро инцидентно двум вершинам.

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

Поэтому, используя
матрицу инцидентности, нельзя восстановить
ориентированный граф.

Такую возможность
обеспечивает матрица смежности,

Пример
7.7.1.
Для заданного неориентированного
графа построить матрицы смежностей и
матрицу инциденций.

Решение.
1) Строим матрицу смежности вершин,
которая будет размерности 44.
Строим матрицу смежности ребер, которая
будет размерности 55.

2) Строим матрицу
инциденций, которая будет размерности
45.

Пример
7.7.2.
Для заданного ориентированного графа
построить матрицы смежностей и матрицу
инциденций.

Решение.
1) Строим матрицу смежности вершин,
которая будет размерности 44.
Строим матрицу смежности ребер, которая
будет размерности 55.

2) Строим матрицу
инциденций, которая будет размерности
45.

Информатика. Учебник для 9 класса (по учебнику К. Ю. Полякова, Е.А. Еремина, базовый уровень) 

§17. Графы.


Что такое граф?

Ключевые слова:
• граф	
• вершина	
• ребро	
• матрица смежности	
• степень вершины	
• связный граф
• взвешенный граф
• весовая матрица
• ориентированный граф
• оптимальный путь
• количество путей

Давайте подумаем, как можно наглядно представить такую информацию:

От пос. Васюки три дороги идут в Солнцево, Грибное и Ягодное. Между Солнцевом и Грибным и между Грибным и Ягодным также есть дороги. Кроме того, есть дорога, которая идет из Грибного в лес и возвращается обратно в Грибное.
Нарисуйте в тетради схему дорог по этому описанию.

Можно, например, нарисовать такую схему (рис. 3.17, а).

Графы

Рис. 3.17

В информатике для исследования таких схем используют графы.

Граф — это набор вершин (узлов) и связей между ними — рёбер.

Граф, соответствующий нашей схеме дорог, показан на рис. 3.17, б, для краткости населённые пункты обозначены латинскими буквами.

Матрица смежности графа

Для хранения информации об узлах и связях показанного выше графа можно использовать таблицу такого вида (рис. 3.18).

Графы

Рис. 3.18

Единица на пересечении строки А и столбца В означает, что между вершинами А и В есть связь. Ноль указывает на то, что связи нет. Такая таблица называется матрицей смежности. Она симметрична относительно главной диагонали (см. закрашенные клетки в таблице).

Исследуйте матрицу смежности и сравните её с графом на рис. 3.17, б. Что означает единица на пересечении столбца С и строки С?

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

Степенью вершины называют количество рёбер, с которыми связана вершина. При этом петля считается дважды (с вершиной связаны оба конца ребра!).

Подсчитайте по матрице смежности, сколько ребёр в графе. Определите степени всех вершин. Как вы рассуждали?

Строго говоря, граф — это математический объект, а не рисунок. Конечно, его можно нарисовать на плоскости (например, как на рис. 3.17, б), но матрица смежности не даёт никакой информации о том, как именно располагать вершины друг относительно друга. Для таблицы, приведённой выше, возможны, например, такие варианты (рис. 3.19).

Графы

Рис. 3.19

Нарисуйте по матрице смежности (рис. 3.20) два разных изображения графа.

Графы

Рис. 3.20

Граф имеет 4 вершины, причём каждая вершина связана рёбрами со всеми остальными. Нарисуйте этот граф. Сколько всего рёбер в этом графе?

Граф имеет N вершин, причём каждая вершина связана рёбрами со всеми остальными. Сколько всего рёбер в этом графе?

Граф имеет 4 ребра. Чему равна сумма степеней вершин в этом графе? Зависит ли она от количества вершин?

Граф имеет N рёбер. Чему равна сумма степеней вершин в этом графе?

Попробуйте нарисовать граф с пятью вершинами, где все вершины имеют степень 3. Получилось ли у вас? Почему?

Связный граф

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

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

Теперь представьте себе, что дороги Васюки-Солнцево, Васю- ки-Грибное и Грибное-Ягодное завалило снегом (или размыло дождём) так, что по ним ни пройти, ни проехать (рис. 3.21).

Графы

Рис. 3.21

Эту схему тоже можно считать графом (она соответствует определению), но в таком графе есть две несвязанные части, каждая из которых — связный граф. Такие части называют компонентами связности.

Постройте матрицу смежности графа, изображённого на рис. 3.21.

Граф имеет 4 вершины и две компоненты связности. Какое наибольшее количество рёбер может быть в этом графе, если в нём нет петель? Нарисуйте этот граф.

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

Найдите все циклы в графе на рис. 3.17.

Дерево — это связный граф, в котором нет циклов.

Взвешенный граф

Если в нашем примере нас заинтересует не только наличие дорог между посёлками, но ещё и расстояния между ними, каждой связи нужно сопоставить число — вес ребра (рис. 3.22).

Графы

Рис. 3.22

Взвешенный граф — это граф, с каждым ребром которого связано некоторое число — вес ребра.

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

Как хранить информацию о таком графе? Ответ напрашивается сам собой — нужно в таблицу записывать не 1 или 0, а вес ребра. Если связи между двумя узлами нет, на бумаге можно оставить ячейку таблицы пустой, а при хранении в памяти компьютера записывать в неё условный код, например, число -1 или очень большое число. Такая таблица называется весовой матрицей, потому что содержит веса рёбер. В данном случае она выглядит так (рис. 3.23).

Графы

Рис. 3.23

Так же как и матрица смежности, весовая матрица симметрична относительно диагонали.

Что означают пустые ячейки в весовой матрице?

Как по весовой матрице сразу определить, сколько рёбер в графе?

Определите по весовой матрице (рис. 3.24) длины путей ADBEC, ABDCE, DEBAC. Как вы рассуждали?

Графы

Рис. 3.24

Оптимальный путь в графе

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

Какие показатели вы используете в жизни для определения оптимального пути? Всегда ли самый короткий путь — самый лучший?

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

Графы

Рис. 3.25

Найдём наилучший путь из А в В — такой, при котором общая стоимость поездки минимальная.

Для решения задачи будем строить дерево перебора вариантов. Видим, что из пункта А напрямую

Графы

Рис. 3.26

Числа около рёбер обозначают стоимость поездки по этому участку, а индексы у названий узлов показывают общую стоимость проезда в данный узел из узла А. Теперь разберём варианты дальнейшего движения из узла С I tM lt;pb р (рис. 3.27).

Графы

Рис. 3.27

Почему, на ваш взгляд, на схеме не показана возможность движения из С в А?

Видим, что из С сразу можно попасть в В, стоимость проезда в этом случае равна 7.

Почему нельзя на этом остановиться, ведь путь из А в В найден?

Проверяя пути через узел В, выясняем, что можно сократить стоимость до 6 (рис. 3.28)

Графы

Рис. 3.28

Нужно ли исследовать дальше путь, содержащий цепочку ACED? Сравните стоимость этого пути и стоимость уже найденного пути из А в В.

Аналогично строим вторую часть схемы (рис. 3.29).

Графы

Рис. 3.29

Таким образом, оптимальный (наилучший) путь — ADEB, его стоимость — 3.

Нужно ли проверять пути ACED и ADEC, не дошедшие до узла В? Могут ли они улучшить результат?

Конечно, для более сложных графов метод перебора работает очень долго, поэтому используются более совершенные (но значительно более сложные) методы.

Ориентированный граф

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

Ориентированный граф (орграф) — это граф, в котором каждое ребро имеет направление.

Орграф может служить, например, моделью системы дорог с односторонним движением. Матрица смежности и весовая матрица для орграфа уже не обязательно будут симметричными.

На схеме на рис. 3.30 всего две дороги с двусторонним движением, по остальным можно ехать только в одну сторону.

Графы

Рис. 3.30

Рёбра в орграфе называют дугами. Дуга, в отличие от ребра, имеет начало и конец.

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

Графы

Рис. 3.31


Количество путей

Определим количество возможных путей из вершины А в вершину К для ориентированного графа, показанного на рис. 3.32.

Графы

Рис. 3.32

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

В графе на рис. 3.32 есть одна начальная вершина А, из которой дуги только выходят. Такая вершина называется истоком. Вершина, в которую дуги только входят (и ни одна не выходит), называется конечной вершиной или стоком. В нашем графе сток — это вершина К.

По весовой матрице на рис. 3.31 найдите исток и сток в графе. Как вы рассуждали?

Будем двигаться по стрелкам от начальной вершины А. Около каждой вершины запишем количество возможных путей из вершины А в эту вершину. В вершину А существует единственный путь — пустой (никуда не ехать). Найдём все вершины, в которые можно приехать только из А: это вершины Б и Г, записываем около них количество путей 1 (рис. 3.33).

Графы

Рис. 3.33

Теперь ищем вершины, в которые можно попасть только из уже отмеченных вершин. Например, в вершину В есть один путь из А напрямую, а также по одному пути через Б и Г (так как эти вершины отмечены числом 1). Общее количество путей из А в Б равно сумме отметок предыдущих вершин: для вершины В получаем 3 пути. В вершину Ж можно попасть только из Г, поэтому число путей в Г и Ж совпадает (рис. 3.34).

Графы

Рис. 3.34

В вершину Д идёт один путь через Б и три пути через В, поэтому общее число путей — 4. Аналогично получаем 4 пути в вершину Е: 3 пути через В и один через Ж (рис. 3.35).

Графы

Рис. 3.35

Далее находим один путь из А в И (только через Ж) и 4 пути из А в 3 (все через Д). В конечную вершину К можно приехать через вершины Д (4 пути), 3 (4 пути), Е (4 пути) и И (1 путь), таким образом, общее количество различных путей равно 13 (рис. 3.36).

Графы

Рис. 3.36


Выводы

• Граф — это набор вершин (узлов) и связей между ними — рёбер.
• Матрица смежности — это таблица, в которой единица на пересечении строки и столбца обозначает ребро между соответствующими вершинами, а ноль — отсутствие ребра.
• Связный граф — это граф, между любыми вершинами которого существует путь.
• Цикл — это замкнутый путь в графе.
• Дерево — это связный граф, в котором нет циклов.
• Взвешенный граф — это граф, с каждым ребром которого связано некоторое число — вес ребра. Взвешенный граф описывается весовой матрицей.
• Ориентированный граф (орграф) — это граф, в котором каждое ребро имеет направление. Рёбра орграфа называют дугами. Матрица смежности и весовая матрица орграфа могут быть несимметричными.

Нарисуйте в тетради интеллект-карту этого параграфа.


Вопросы и задания

1. Можно ли сказать, что лес (множество деревьев) — это граф? Почему?
2. Как по матрице смежности определить, есть ли петли в графе?
3. Как по весовой матрице определить длину пути в графе?
4. Когда для представления данных используются орграфы? Приведите примеры.
5. Выполните по указанию учителя задания в рабочей тетради.

Подготовьте сообщение

а) «Задача о Кёнигсбергских мостах»
б) «Решение логических задач с помощью графов»


Оглавление

§16. Списки и деревья.

§17. Графы.

§18. Игровые стратегии.


Все, что познается, имеет число, ибо невозможно ни понять ничего, ни познать без него – Пифагор

В этой статье:

Матрица смежности

Матрица инцидентности

Список смежности (инцидентности)

Взвешенный граф (коротко)

Итак, мы умеем задавать граф графическим способом. Но есть еще два способа как можно задавать граф, а точнее представлять его. Для экономии памяти в компьютере граф можно представлять с помощью матриц или с помощью списков.

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

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

Перед чтением материала рекомендуется ознакомится с предыдущей статьей, о смежности и инцидентности, где данные определения подробно разбираются.

Матрица смежности

Но тем кто знает, но чуть забыл, что такое смежность есть краткое определение.

Смежность – понятие, используемое только в отношении двух ребер или в отношении двух вершин: два ребра инцидентные одной вершине, называются смежными; две вершины, инцидентные одному ребру, также называются смежными. 

Матрица (назовем ее L) состоит из n строк и n столбцов и поэтому занимает n^2 места.  

Каждая ячейка матрицы равна либо 1, либо 0;

Ячейка в позиции L (i, j) равна 1 тогда и только тогда, когда существует ребро (E) между вершинами (V) i и j. Если у нас положение (j, i), то мы также сможем использовать данное правило. Из этого следует, что число единиц в матрице равно удвоенному числу ребер в графе. (если граф неориентированный). Если ребра между вершинами i и j не существует, то ставится 0.

Для практического примера возьмем самый обыкновенный неориентированный граф:

А теперь представим его в виде матрицы:

Ячейки, расположенные на главной диагонали всегда равны нулю, потому что ни у одной вершины нет ребра, которое и начинается, и заканчивается в ней только если мы не используем петли. То есть наша матрица симметрична относительно главной диагонали. Благодаря этому мы можем уменьшить объем памяти, который нам нужен для хранения.

С одной стороны объем памяти будет:

θ |V^2|

Но используя вышеописанный подход получается:

θ |V^2/2|

Потому что нижнюю часть матрицы мы можем создать из верхней половины матрицы. Только при условии того, что у нас главная диагональ должна быть пустой, потому что при наличии петель данное правило не работает.

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

Если мы используем ориентированный граф, то кое-что меняется.

Здесь отсутствует дублирование между вершинами, так как если вершина 1 соединена с вершиной 2, наоборот соединена она не может быть, так у нас есть направление у ребра.

Возьмем в этот раз ориентированный граф и сделаем матрицу смежности для него:

В виде матрицы:

Если мы работаем со строкой матрицы, то мы имеем элемент из которого выходит ребро, в нашем случаи вершина 1 входит в вершину 2 и 8. Когда мы работаем со столбцом то мы рассматриваем те ребра, которые входят в данную вершину. В вершину 1 ничего не входит, значит матрица верна.

Объем памяти:

θ |V^2|

Если бы на главной диагонали была бы 1, то есть в графе присутствовала петля, то мы бы работали уже не с простым графом, с каким мы работали до сих пор.

Используя петли мы должны запомнить, что в неориентированном графе петля учитывается дважды, а в ориентированном — единожды.

Матрица инцидентности

Инцидентность – понятие, используемое только в отношении ребра и вершины: две вершины (или два ребра) инцидентными быть не могут.

Матрица (назовем ее I) состоит из n строк которое равно числу вершин графа, и m столбцов, которое равно числу ребер. Таким образом полная матрица имеет размерность n x m. То есть она может быть, как квадратной, так и отличной от нее.

Ячейка в позиции I (i, j) равна 1 тогда, когда вершина инцидентна ребру иначе мы записываем в ячейку 0, такой вариант представления верен для неориентированного графа.

Сразу же иллюстрируем данное правило:

В виде матрицы:

Сумма элементов i-ой строки равна степени вершины.

При ориентированным графе, ячейка I (i, j) равна 1, если вершина V (i) начало дуги E(j) и ячейка I (i, j) равна -1 если вершина V (i) конец дуги E (j), иначе ставится 0.

Ориентированный граф:

В виде матрицы:

Одной из особенностей данной матрицы является то, что в столбце может быть только две ненулевых ячейки. Так как у ребра два конца.

При суммировании строки, ячейки со значением -1, могут складываться только с ячейками, также имеющими значение -1, то же касается и 1, мы можем узнать степень входа и степень выхода из вершины. Допустим при сложении первой вершины, мы узнаем, что из нее исходит 1 ребро и входят два других ребра. Это является еще одной особенностью (при том очень удобной) данной матрицы.

Объем памяти:

θ(|V| * |E|)

Список смежности (инцидентности)

Список смежности подразумевает под собой, то что мы работаем с некоторым списком (массивом). В нем указаны вершины нашего графа. И каждый из них имеет ссылку на смежные с ним вершины.

В виде списка это будет выглядеть так:

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

Так как здесь рассматривается смежность, то здесь не обойдется без дублирования вершин. Поэтому сумма длин всех списков считается как:

2 |E|

Объем памяти:

θ(E + V)

Когда мы работаем с ориентированным графом, то замечаем, что объем задействованной памяти будет меньше, чем при неориентированном (из-за отсутствия дублирования).

В виде списка:

Сумма длин всех списков:

|E|

Объем памяти:

 θ(E + V)

Со списком инцидентности все просто. Вместо вершин в список (массив) вы вставляете рёбра и потом делаете ссылки на те вершины, с которыми он связан.

К недостатку списка смежности (инцидентности) относится то что сложно определить наличие конкретного ребра (требуется поиск по списку). А если у вас большой список, то удачи вам и творческих успехов! Поэтому, чтобы работать максимальной отдачей в графе должно быть мало рёбер.

Взвешенность графа

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

К примеру, возьмем граф с весами на ребрах:

И сделаем матрицу смежности:

В ячейках просто указываем веса ребра, а в местах где отсутствует связь пишем 0 или -∞.

Более подробно данное определение будет рассмотрено при нахождении поиска кратчайшего пути в графе.

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

Если заметили ошибку или есть предложения пишите в комментарии.

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

На каком языке программирования проводить операции с графами


21.28%
Использовать оба
10

Проголосовали 47 пользователей.

Воздержались 8 пользователей.

Понравилась статья? Поделить с друзьями:

Не пропустите также:

  • Как составить акт приемки выполненных работ образец
  • Как по схеме составить уравнение контурных токов
  • Как составить прогноз прироста населения
  • Как найти перевод денег по квитанции
  • Как найти объем тела под водой

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии