Неправильная матрица | Причина ошибки | Правильная матрица |
---|---|---|
5,5,5,5,5 5,5,5,5,5 5,5,5,5,5 | Матрица не квадратная: число строк — 3, а число столбцов — 5 | 5,5,5,5,5 5,5,5,5,5 5,5,5,5,5 5,5,5,5,5 5,5,5,5,5 |
0,1,1,1,0,1,0,0,0 1,0,1,0,0,1,1,1,0 1,1,0,1,1,0,1,0,0 1,0,1,0,1,1,1,1,0 0,0,1,1,0,1,0,0,0 1,1,0,1,1,0,1,1,1 0,1,1,1,0,1,0,0,1 0,0,0,0,0,1,1,1,0 | Матрица не квадратная: число строк — 8, а число столбцов — 9 | 0,1,1,1,0,1,0,0,0 1,0,1,0,0,1,1,1,0 1,1,0,1,1,0,1,0,0 1,0,1,0,1,1,1,1,0 0,0,1,1,0,1,0,0,0 1,1,0,1,1,0,1,1,1 0,1,1,1,0,1,0,0,1 0,0,0,0,0,1,1,1,0 0,0,0,0,0,0,0,0,0 |
1, 0, 0 1, 2, 0 -2, 1, 0 0, -2, 0 1, 3, 0 | Матрица не квадратная, также содержит отрицательные значения | 1, 0, 0 1, 2, 0 2, 1, 0 |
1 2, 1 3, 1 4, 4 5, 5 2, 6 3, | Введена не матрица смежности, а отношение между вершинами. Необходимо ввести матрицу смежности для этого графа. | 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, |
∞,10,9,10 10,∞,∞,∞ ∞,5,∞.8 10,∞,∞,∞ | Вместо символа ∞ используйте 0. | 0,10,9,10 10,0,0,0 0,5,0.8 10,0,0,0 |
-, 8, -, 1, -, -, -, -, 4, 7, 2, -, -, -, -, -, 4, 2, -, -, 9, -, 7, -, -, -, -, -, -, 6, inf , -, -, -, -, -, | Вместо символа — или inf используйте 0. | 0, 8, 0, 1, 0, 0, 0, 0, 4, 7, 2, 0, 0, 0, 0, 0, 4, 2, 0, 0, 9, 0, 7, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, |
Теория графов.
Часть третья (Представление графа с помощью матриц смежности, инцидентности и списков смежности) / ХабрВсе, что познается, имеет число, ибо невозможно ни понять ничего, ни познать без него – Пифагор
В этой статье:
Матрица смежности
Матрица инцидентности
Список смежности (инцидентности)
Взвешенный граф (коротко)
Итак, мы умеем задавать граф графическим способом. Но есть еще два способа как можно задавать граф, а точнее представлять его. Для экономии памяти в компьютере граф можно представлять с помощью матриц или с помощью списков.
Матрица является удобной для представления плотных графов, в которых число ребер близко к максимально возможному числу ребер (у полного графа).
Другой способ называется списком. Данный способ больше подходит для более разреженных графов, в котором число ребер намного меньше максимально возможного числа ребер (у полного графа).
Перед чтением материала рекомендуется ознакомится с предыдущей статьей, о смежности и инцидентности, где данные определения подробно разбираются. 2 места.
Каждая ячейка матрицы равна либо 1, либо 0;
Ячейка в позиции L (i, j) равна 1 тогда и только тогда, когда существует ребро (E) между вершинами (V) i и j. Если у нас положение (j, i), то мы также сможем использовать данное правило. Из этого следует, что число единиц в матрице равно удвоенному числу ребер в графе. (если граф неориентированный). Если ребра между вершинами i и j не существует, то ставится 0.
Для практического примера возьмем самый обыкновенный неориентированный граф:
А теперь представим его в виде матрицы:
Ячейки, расположенные на главной диагонали всегда равны нулю, потому что ни у одной вершины нет ребра, которое и начинается, и заканчивается в ней только если мы не используем петли. То есть наша матрица симметрична относительно главной диагонали. Благодаря этому мы можем уменьшить объем памяти, который нам нужен для хранения.
С одной стороны объем памяти будет:
Но используя вышеописанный подход получается:
Потому что нижнюю часть матрицы мы можем создать из верхней половины матрицы. Только при условии того, что у нас главная диагональ должна быть пустой, потому что при наличии петель данное правило не работает.
Если граф неориентированный, то, когда мы просуммируем строку или столбец мы узнаем степень рассматриваемой нами вершины.
Если мы используем ориентированный граф, то кое-что меняется.
Здесь отсутствует дублирование между вершинами, так как если вершина 1 соединена с вершиной 2, наоборот соединена она не может быть, так у нас есть направление у ребра.
Возьмем в этот раз ориентированный граф и сделаем матрицу смежности для него:
В виде матрицы:
Если мы работаем со строкой матрицы, то мы имеем элемент из которого выходит ребро, в нашем случаи вершина 1 входит в вершину 2 и 8. Когда мы работаем со столбцом то мы рассматриваем те ребра, которые входят в данную вершину. В вершину 1 ничего не входит, значит матрица верна.
Объем памяти:
Если бы на главной диагонали была бы 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 ребро и входят два других ребра. Это является еще одной особенностью (при том очень удобной) данной матрицы.
Объем памяти:
Список смежности (инцидентности)
Список смежности подразумевает под собой, то что мы работаем с некоторым списком (массивом). В нем указаны вершины нашего графа. И каждый из них имеет ссылку на смежные с ним вершины.
В виде списка это будет выглядеть так:
Неважно в каком порядке вы расположите ссылку так как вы рассматриваете смежность относительно первой ячейки, все остальные ссылки указывают лишь на связь с ней, а не между собой.
Так как здесь рассматривается смежность, то здесь не обойдется без дублирования вершин. Поэтому сумма длин всех списков считается как:
Объем памяти:
Когда мы работаем с ориентированным графом, то замечаем, что объем задействованной памяти будет меньше, чем при неориентированном (из-за отсутствия дублирования).
В виде списка:
Сумма длин всех списков:
Объем памяти:
Со списком инцидентности все просто. Вместо вершин в список (массив) вы вставляете рёбра и потом делаете ссылки на те вершины, с которыми он связан.
К недостатку списка смежности (инцидентности) относится то что сложно определить наличие конкретного ребра (требуется поиск по списку). А если у вас большой список, то удачи вам и творческих успехов! Поэтому, чтобы работать максимальной отдачей в графе должно быть мало рёбер.
Взвешенность графа
Взвешенный граф — это граф, в котором вместо 1 обозначающее наличие связи между вершинами или связи между вершиной и ребром, хранится вес ребра, то есть определённое число с которым мы будем проводить различные действия.
К примеру, возьмем граф с весами на ребрах:
И сделаем матрицу смежности:
В ячейках просто указываем веса ребра, а в местах где отсутствует связь пишем 0 или -∞.
Более подробно данное определение будет рассмотрено при нахождении поиска кратчайшего пути в графе.
Итак, мы завершили разбор представления графа с помощью матрицы смежности и инцидентности и списка смежности (инцидентности). Это самые известные способы представления графа. В дальнейшем мы будем рассматривать и другие матрицы, и списки, которые в свою очередь будут удобны для представления графа с определёнными особенностями.
Если заметили ошибку или есть предложения пишите в комментарии.
Что такое матрица смежности
следующий → ← предыдущая В этой статье мы обсудим матрицу смежности и ее представление. Определение матрицы смежностиВ теории графов матрица смежности — это плотный способ описания конечной структуры графа. Это двумерная матрица, которая используется для отображения связи между узлами графа. Если граф имеет n вершин, то матрица смежности этого графа равна n x n , и каждый элемент матрицы представляет количество ребер из одной вершины в другую. Матрица смежности также называется матрицей соединений . Иногда ее также называют матрицей вершин . Матричное представление смежностиЕсли неориентированный граф G состоит из n вершин, то матрица смежности графа представляет собой n x n матрицу A = [aij] и определяется как — a ij = 1 {если существует путь из V 9от 0030 i до V j } a ij = 0 {Иначе} Давайте рассмотрим некоторые важные моменты, касающиеся матрицы смежности.
Примечание. В матрице смежности 0 означает, что между двумя узлами нет связи, тогда как 1 означает, что связь существует между двумя узлами.Как создать матрицу смежности?Предположим, что существует граф g с числом вершин n , тогда матрица вершин (или матрица смежности) определяется как —
Где a ij равно количеству ребер от вершины i до j. Как упоминалось выше, матрица смежности симметрична для неориентированного графа, поэтому для неориентированного графа a ij = a ji . Когда графы простые и нет весов на ребрах или кратных ребрах, то элементы матрицы смежности будут равны 0 и 1. Если нет петель, то диагональные элементы матрицы смежности будут равны 0 Теперь давайте посмотрим на матрицу смежности для неориентированного графа и для ориентированного графа. Матрица смежности для неориентированного графаВ неориентированном графе ребра не связаны с направлениями с ними. В неориентированном графе, если существует ребро между вершиной A и вершиной B, то вершины могут быть перенесены из A в B, а также из B в A. Рассмотрим неориентированный снизу граф и попробуем построить для него матрицу смежности. На графике мы видим, что нет петли, поэтому диагональные элементы соседней матрицы будут равны 0. Матрица смежности приведенного выше графика будет — Матрица смежности для ориентированного графаВ ориентированном графе ребра образуют упорядоченную пару. Ребра представляют собой определенный путь от некоторой вершины A к другой вершине B. Узел A называется начальным узлом, а узел B называется конечным узлом. Рассмотрим представленный ниже ориентированный граф и попробуем построить для него матрицу смежности. На приведенном выше графике мы видим, что нет петли, поэтому диагональные элементы соседней матрицы будут равны 0. Матрица смежности приведенного выше графика будет — Свойства матрицы смежностиНекоторые свойства матрицы смежности перечислены ниже:
Давайте посмотрим на некоторые вопросы матрицы смежности. Ниже приведены вопросы о взвешенных неориентированных и ориентированных графах. ПРИМЕЧАНИЕ. Граф называется взвешенным, если каждому ребру присвоен положительный номер, который называется весом ребра.Вопрос 1 — Какой будет матрица смежности для приведенного ниже неориентированного взвешенного графа? Решение — В заданном вопросе нет петли, поэтому ясно, что диагональные элементы соседней матрицы для приведенного выше графа будут равны 0. Приведенный выше граф является взвешенным неориентированным графом. Веса на ребрах графа будут представлены как элементы матрицы смежности. Матрица смежности приведенного выше графа будет — Вопрос 2 — Какой будет матрица смежности для направленного ниже взвешенного графа? Решение — В заданном вопросе нет петли, поэтому ясно, что диагональные элементы соседней матрицы для приведенного выше графа будут равны 0. Приведенный выше граф является взвешенным ориентированным графом. Веса на ребрах графа будут представлены как элементы матрицы смежности. Матрица смежности приведенного выше графа будет — Надеюсь, эта статья поможет вам понять, что такое матрица смежности. Здесь мы обсудили матрицу смежности, ее создание и свойства. Мы также обсудили формирование матрицы смежности на ориентированных или неориентированных графах, независимо от того, взвешены они или нет. Следующая темаЛучшие приложения для резервного копирования фотографий для Android ← предыдущая следующий → |
Как представить ориентированный граф в виде матрицы смежности
Графики — это отличный способ наглядно представить многомерные данные. Но когда дело доходит до представления графиков в виде матриц, это может быть немного менее интуитивно понятным. Ранее мы рассмотрели, как представить неориентированный граф
В отличие от неориентированного графа, ориентированные графы имеют направленность. Обычно это изображается стрелкой от одного узла к другому, указывающей направление связи. Twitter и Instagram — отличные примеры направленных графов, поскольку вы можете следить за человеком без того, чтобы он следил за вами в ответ. Теперь давайте начнем с рассмотрения того, как представляет ориентированные графы в виде матриц смежности. В этом уроке мы будем использовать visNetwork , и мы начнем с рассмотрения ориентированного графа без петель или собственных ребер.
Для начала мы создадим кадр данных узлов для visNetwork для инициализации узлов нашей сети. Наша сеть будет состоять из 6 узлов, помеченных от 1 до 6. Затем мы создадим фрейм данных ребер , чтобы добавить отношения между нашими узлами. Чтобы убедиться, что сеть направлена, кадр данных ребер будет иметь столбец стрелок, обозначающий направление связи. В этом примере все отношения будут проистекать из из столбца «в» столбец с по . Наконец, мы построим нашу сеть, используя visNetwork() .
библиотека (visNetwork) # Создать фрейм данных узлов для visNetwork. узлы <- data.frame (id = 1:6, label = 1:6, цвет = повтор('#8BB1AB', 6)) # Создать кадр данных ребер для visNetwork. ребра <- data.frame(from = c(1, 2, 3, 3, 4, 5), к = с (2, 3, 4, 5, 5, 6), стрелки = «к») # Построить сеть, используя visNetwork. visNetwork(узлы, ребра) %>% visOptions(highlightNearest = TRUE, nodesIdSelection = TRUE)Малая направленная сеть без петель.
Аналогично тому, что мы делали для неориентированных графов, мы позволим строкам и столбцам нашей матрицы смежности представлять узлы или вершины. В результате получится квадратная матрица. Однако, в отличие от неориентированных графов, 1 указывает на стрелку, идущую от столбца j до строки i. ПРИМЕЧАНИЕ. Вы можете увидеть это наоборот, со стрелкой, идущей от столбца i к строке j. Убедитесь, что вы знаете, какая версия используется.
Для приведенного выше графика матрица смежности выглядит следующим образом:
Поскольку есть ребро, идущее от узла 1 к узлу 2, мы видим 1 в (строка 2, столбец 1). Эта направленность часто приводит к асимметричной матрице. Кроме того, мы можем видеть, что диагональ полностью состоит из нулей, поскольку нет ребер, идущих от любого узла к самому себе. Теперь давайте рассмотрим пример, в котором у нас есть петли и мультиребра.
В этом примере мы сохраним наш фрейм данных узлов сверху, но укажем новый фрейм данных ребер. Так как нам нужны циклы, у нас будет связь от 2 до 3 и с 3 на 2, что дает нам петлю. Второй тип петли, которую мы создадим, — это самокрай, когда отношения замыкаются на самих себе. Мы установим собственное ребро с узлом 1, установив отношение от 1 до 1. Наконец, мы сохраним все наши новые отношения во фрейме данных с именем edgeMessy .
# Создать новый фрейм данных Edge для visNetwork. edgeMessy <- data.frame(from = c(1, 2, 3, 3, 4, 5, 1, 3, 5, 5), к = с (2, 3, 4, 5, 5, 6, 1, 2, 6, 6), стрелки = «к») # Построить сеть, используя visNetwork. visNetwork(узлы, краяMessy) %>% visOptions(highlightNearest = TRUE, nodesIdSelection = TRUE)Малая направленная сеть с петлями и мультиребрами.
Здесь матрица смежности выглядит следующим образом:
Обратите внимание, что петля представлена как 1. Для ориентированных графов учитывается каждая направленная связь, а петля представляет собой только одну направленную связь. (Если бы для узла 1 было две петли, запись была бы 2.) Мы также можем видеть, что между узлами 5 и 6 есть три ребра. Таким образом, теперь представлено числом 3.