Как составить матрицу достижимости по матрице смежности

Аннотация: Рассматриваются вопросы достижимости для орграфов и способы нахождения матриц достижимости и контрдостижимости. Рассматривается матричный способ нахождения количества путей между любыми вершинами графа, а также нахождение множества вершин, входящих в путь между парой вершин. Цель лекции: Дать представление о достижимости и контрдостижимости и способах их нахождения

Достижимость и контрдостижимость

Задач, в которых используется понятие достижимости, довольно много. Вот одна из них. Граф может быть моделью какой-то организации, в которой люди представлены вершинами, а дуги интерпретируют каналы связи. При рассмотрении такой модели можно поставить вопрос, может ли информация от одного лица хi быть передана другому лицу хj, т. е. существует ли путь, идущий от вершины хi к вершине хj. Если такой путь существует, то говорят, что вершина хj достижима из вершины хi. Можно интересоваться достижимостью вершины хj из вершины хi только на таких путях, длины которых не превосходят заданной величины или длина которых меньше наибольшего числа вершин в графе и т. п. задачи.

Достижимость в графе описывается матрицей достижимости R=[rij], i, j=1, 2, … n, где n – число вершин графа, а каждый элемент определяется следующим образом:

rij=1, если вершина хj достижима из хi,

rij=0, в противном случае.

Множество вершин R(xi) графа G, достижимых из заданной вершины xi, состоит из таких элементов xj, для которых (i, j)-й элемент в матрице достижимостей равен 1. Очевидно, что все диагональные элементы в матрице R равны 1, поскольку каждая вершина достижима из себя самой путeм длины 0. Поскольку прямое отображение 1-го порядка Г+1(xi) является множеством таких вершин xj, которые достижимы из xi с использованием путей длины 1, то множество Г++1(xi)) = Г+2(xi) состоит из вершин, достижимых из xi с использованием путей длины 2. Аналогично Г+p(xi) является множеством вершин, которые достижимы из xi с помощью путей длины p.

Так как любая вершина графа, которая достижима из xi, должна быть достижима с использованием пути (или путей) длины 0 или 1, или 2, …, или p, то множество вершин, достижимых для вершины xi, можно представить в виде

R (x_{i}) = {  x_{i} }  cup  Г^{+1}(x_{i}) cup  Г^{+2}(x_{i}) cup  dots  cup  Г^{+p}(x_{i}).

Как видим, множество достижимых вершин R(xi) представляет собой прямое транзитивное замыкание вершины xi, т. е. R (xi) = T+(xi). Следовательно, для построения матрицы достижимости находим достижимые множества R (xi) для всех вершин x_{i}in X. Полагая, rij=1, если x_{j} in  R (x_{i}) и rij=0 в противном случае.

Достижимость в графе:  а –граф; б – матрица смежности; в – матрица достижимости; г-  матрица контрдостижимости.

Рис.
4.1.
Достижимость в графе: а –граф; б – матрица смежности; в – матрица достижимости; г- матрица контрдостижимости.

Для графа, приведенного на
рис.
4.1,а, множества достижимостей находятся следующим образом:

R (х_{1}) = {  х_{1} }  cup {  х_{2}, х_{5} }  cup  {  х_{2}, х_{4}, х_{5} }  cup  {  х_{2}, х_{4}, х_{5} }  = = {  х_{1}, х_{2}, х_{4}, х_{5} },

R (х_{2}) = {  х_{2} }  cup  {  х_{2}, х_{4} }  cup  {  х_{2}, х_{4}, х_{5} }  cup  {  х_{2}, х_{4}, х_{5} }  = = {  х_{2}, х_{4}, х_{5} },

R (х_{3}) = {  х_{3} }  cup  {  х_{4} }  cup  {  х_{5} }  cup  {  х_{5} }  = {  х_{3}, х_{4}, х_{5} },

R (х_{4}) = {  х_{4} }  cup  {  х_{5} }  cup  {  х_{5} }  = {  х_{4}, х_{5} },

R (х_{5}) = {  х_{5} }  cup  {  х_{5} }  = {  х_{5} },

R (х_{6}) = {  х_{6} }  cup  {  х_{3}, х_{7} }  cup  {  х_{4}, х_{6} }  cup  {  х_{3}, х_{5}, х_{7} }  cup  cup  {  х_{4}, х_{5}, х_{6} }  = {  х_{3}, х_{4}, х_{5}, х_{6}, х_{7}},

R (х_{7}) = {  х_{7} }  cup  {  х_{4}, х_{6} }  cup  {  х_{3}, х_{5}, х_{7} }  cup  {  х_{4}, х_{5}, х_{6} }  = = {  х_{3}, х_{4}, х_{5}, х_{6}, х_{7} }.

Матрица достижимости имеет вид, как показано на
рис.
4.1,в. Матрицу достижимости можно построить по матрице смежности (
рис.
4.1,б), формируя множества T+(xi) для каждой вершины xi
.

Матрица контрдостижимости Q = [ qij], i, j =1, 2, … n, где n – число вершин графа, определяется следующим образом:

qij=1, если из вершины xj
можно достичь вершину xi
,

qij=0, в противном случае.

Контрдостижимым множеством Q (xi) является множество таких вершин, что из любой вершины этого множества можно достичь вершину xi
. Аналогично построению достижимого мно-жества R (xi) можно записать выражение для Q (xi):

Q (x_{i}) = {  x_{i} }  cup  Г^{-1}(x_{i}) cup  Г^{-2}(x_{i}) cup  dots  cup  Г^{-p}(x_{i}).

Таким образом, видно, что Q (xi) – это есть не что иное как обратное транзитивное замыкание вершины xi
, т. е. Q (xi) = Тxi). Из определений очевидно, что столбец xi
матрицы Q (в котором qij=1, если x_{j} in  Q (x_{i}), и qij=0 в противном случае) совпадает со строкой xi
матрицы R, т. е. Q = RT,где RT
матрица, транспонированная к матрице достижимости R.

Матрица контрдостижимости показана на
рис.
4.1,г.

Следует отметить, что поскольку все элементы матриц R и Q равны 1 или 0, то каждую строку можно хранить в двоичной форме, экономя затраты памяти ЭВМ. Матрицы R и Q удобны для обработки на ЭВМ, так как с вычислительной точки зрения основными операциями являются быстродействующие логические операции.

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


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

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

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

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

Утверждение. ЕслиА– матрица смежности графаМатрица достижимости, то элементМатрица достижимостиматрицыАправен числу маршрутов длинып, соединяющих вершиныvi иvjграфаG.

Доказательство.Методом математической индукции по числуп.

База индукции.Прип= 1 утверждение верно, так как всякое ребро графаG– это маршрут длины 1.

Индуктивное предположение.Пусть утверждение справедливо для всехnk.

Индуктивный переход.Рассмотрим матрицуАk+1. В нейМатрица достижимости.

В силу индуктивного предположения произведение Матрица достижимостиесть число маршрутов длиныk+ 1, соединяющих вершинуvi с вершинойvjс предпоследней вершиной всех таких маршрутовvm. Значит, суммаМатрица достижимостидействительно равна числу маршрутов длинk+ 1, соединяющих вершинуvi с вершинойvj.

Следствие.ПустьМатрица достижимости– связный граф срвершинами. Тогда любые две вершины графаМатрица достижимостиможно соединить простой цепью. Но в простой цепи не может быть более (р1) ребер. Следовательно, все элементы матрицыМатрица достижимостиотличны от нуля. Ясно, что верно и обратное утверждение.

В некоторых случаях при вычислениях степеней матрицы Аи матрицыСважно знать не число соответствующих маршрутов, а только есть ли в графе эти маршруты или нет . Об этом говорит сайт https://intellect.icu . Тогда при вычислении элементов матрицА2,А3, … ,Ар-1вместо обычного сложения используют операцию, введенную нами при рассмотрении матриц конечных бинарных отношений. В результате матрицыА,А2,А3, …,Ap1,Cсостоят только из нулей и единиц.

Полученная таким образом матрица Сназываетсяматрицей достижимостиграфаG. ГрафGсвязен тогда и только тогда, когда каждый элемент матрицы достижимости равен 1 (р3).

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

Случай орграфа ничем не отличается от случая неориентированного графа. Если G– орграф ср вершинами иА– его матрица смежности, то элементМатрица достижимостиматрицыАправен числу ориентированных маршрутов длинып, соединяющих вершинуvi с вершинойvj.

+Граф G сильно связен тогда и только тогда, когда каждый элемент его матрицы достижимостиМатрица достижимостиравен 1.

Способы построения матрицы достижимости

Перемножение матриц

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

Матрица достижимости.

По определению, матрица композиции отношений Матрица достижимости есть Матрица достижимости, где Матрица достижимости — конъюнкция, а Матрица достижимости — дизъюнкция.

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

Случай нескольких путей

Если булевы операции Матрица достижимости дизъюнкции и конъюнкции заменить обычными алгебраическими операциями Матрица достижимости сложения и умножения соответственно, нахождение матрицы достижимости Матрица достижимости сведется к обычному пошаговому перемножению матриц с последующим сложением результатов каждого шага. Тогда получившаяся матрица Матрица достижимости будет состоять не только из 0 и 1 и будет характеризовать не только наличие путей между вершинами, но уже и количество таких путей. В таком случае можно разрешить наличие кратных ребер в графе.

Пример

Матрица достижимости

Граф Матрица достижимости

Рассмотрим простой связный ориентированный граф Матрица достижимости. Он имеет матрицу смежности Матрица достижимости вида:


mathbf E = 
begin{pmatrix}
  0&1&1&0 \
  0&0&0&0 \
  0&1&0&1 \
  0&0&1&0
end{pmatrix}

Найдем булевы степени этой матрицы Матрица достижимости, Матрица достижимости, Матрица достижимости:


mathbf{E^2} = 
begin{pmatrix}
  0&1&0&1 \
  0&0&0&0 \
  0&0&1&0 \
  0&1&0&1
end{pmatrix}
, 
mathbf{E^3} = 
begin{pmatrix}
  0&0&1&0 \
  0&0&0&0 \
  0&1&0&1 \
  0&0&1&0
end{pmatrix}
, 
mathbf{E^4} = 
begin{pmatrix}
  0&1&0&1 \
  0&0&0&0 \
  0&0&1&0 \
  0&1&0&1
end{pmatrix}
.

Получим матрицу достижимости

Матрица достижимости

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

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

Матрица достижимости

Она показывает количество путей длины от 1 до 4 между вершинами орграфа.

Алгоритм Уоршелла

Алгоритм Уоршелла

Существует другой алгоритм, позволяющий найти матрицу достижимости в точности за Матрица достижимости шагов — алгоритм Уоршелла.

Связанные понятия

Матрица сильной связности

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

Построение матрицы сильной связности

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

Пример

Рассмотрим тот же граф, что и ранее.

Его матрица достижимости:

Матрица достижимости

Из нее получаем матрицу сильной связности:

Матрица достижимости

Вершины 3 и 4 сильно связаны друг с другом и сами с собой.

Матрица связности графа

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

Программа 1. Вычисление матрицы достижимости по заданной матрице смежностей с помощью алгоритма Уоршалла.

#include <iostream.h>
#define MaxNodes 4

class Warshall
{
  private:
    unsigned Adj[MaxNodes][MaxNodes];  //Матрица смежностей.
    unsigned Path[MaxNodes][MaxNodes]; //Матрица достижимости.
  public:
    void Vvod();
    void TransClose();
    void Vyvod();
};

void Warshall::Vvod()
{
  //Ввод матрицы смежностей заданного графа.
  cout <<"Вводите элементы матрицы смежностей по строкам:n";
  for (int i=0;i<MaxNodes;i++)
    for (int j=0;j<MaxNodes;j++)
     {
       cout <<"Введите Adj["<< (i+1) << "]["<< (j+1) << "]: ";
       cin >> Adj[i][j];
     }
}

void Warshall::TransClose()
//Вычисление матрицы достижимости.
{
  //Инициализация матрицы Path матрицей смежностей Adj.
  for (int i=0;i<MaxNodes;i++)
    for (int j=0;j<MaxNodes;j++)
      Path[i][j] = Adj[i][j];
  //Нахождение следующих значений матрицы Path.
  for (int k=0;k<MaxNodes;k++)
    for (i=0;i<MaxNodes;i++)
      if (Path[i][k]==1) 
         for (int j=0;j<MaxNodes;j++)
               Path[i][j] = (Path[i][j] || Path[k][j]);
}

void Warshall::Vyvod()
//Вывод матрицы достижимости.
{
  cout << "Матрица достижимости:n";
  for (int i=0;i<MaxNodes;i++)
  {
    for (int j=0;j<MaxNodes;j++)
      cout << Path[i][j] << " ";
    cout << endl;
  }
}

void main()
{
  Warshall A;
  A.Vvod();
  A.TransClose();
  A.Vyvod();
}

Связанные проблемы

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

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

Вау!! 😲 Ты еще не читал? Это зря!

  • Гаммоид
  • st -соединение

Напиши свое отношение про матрица достижимости. Это меня вдохновит писать для тебя всё больше и больше интересного. Спасибо Надеюсь, что теперь ты понял что такое матрица достижимости
и для чего все это нужно, а если не понял, или есть замечания,
то нестесняся пиши или спрашивай в комментариях, с удовольствием отвечу. Для того чтобы глубже понять настоятельно рекомендую изучить всю информацию из категории
Дискретная математика. Теория множеств . Теория графов . Комбинаторика.

Достижимость и контрдостижимость

Задач,
в которых используется понятие
достижимости,
довольно много. Вот одна из них. Граф
может быть моделью какой-то организации,
в которой люди представлены вершинами,
а дуги интерпретируют каналы связи. При
рассмотрении такой модели можно поставить
вопрос, может ли информация от одного
лица хi
быть передана другому лицу хj
, т. е. существует ли путь, идущий от
вершины хi
к вершине хj
. Если такой путь существует, то говорят,
что вершина хj
достижима из вершины хi
. Можно интересоваться достижимостью
вершины хj
из вершины хi
только на таких путях, длины которых не
превосходят заданной величины или длина
которых меньше наибольшего числа вершин
в графе и т. п. задачи.

Достижимость
в графе описывается матрицей достижимости
R=[rij],
i, j=1, 2, … n, где n – число вершин графа, а
каждый элемент определяется следующим
образом:

rij=1,
если вершина хj
достижима из хi
,

rij=0,
в противном случае.

Множество
вершин R(xi)графа
G, достижимых из заданной вершины xi
, состоит из таких элементов xi
, для которых (i, j)-й элемент в матрице
достижимостей

равен 1. Очевидно, что все диагональные
элементы в матрице R равны 1, поскольку
каждая вершина достижима из себя самой
путeм длины 0. Поскольку прямое отображение
1-го порядка Г+1(xi)
является множеством таких вершин xj
, которые достижимы из xi
с использованием путей длины 1, то
множество Г++1(xi))
= Г+2(xi)
состоит из вершин, достижимых из xi
с использованием путей длины 2. Аналогично
Г+p(xi)является
множеством вершин, которые достижимы
из xi
с помощью путей длины p.

Так
как любая вершина графа, которая достижима
из xi
, должна быть достижима с использованием
пути (или путей) длины 0 или 1, или 2, …,
или p, то множество вершин, достижимых
для вершины xi
, можно представить в виде

R
(xi)
= { xi
}
Г+1(xi)

Г+2(xi)

Г+p(xi).

Как
видим, множество достижимых вершин
R(xi)представляет
собой прямое транзитивное замыкание
вершины xi
, т. е. R (xi)
= T+(xi).
Следовательно, для построения матрицы
достижимости находим достижимые
множества R (xi)для
всех вершин xiX.
Полагая, rij=1,
если xj

R
(xi
rij=0
в противном случае.

Рис.
4.1.
 
Достижимость в графе: а –граф; б –
матрица смежности; в – матрица
достижимости; г- матрица контрдостижимости.

Для
графа, приведенного на рис.
4.1
,а,
множества достижимостей находятся
следующим образом:

R
1)
= { х1
}
{
х2,
х5
}
{
х2,
х4,
х5
}
{
х2,
х4,
х5
} = = { х1,
х2,
х4,
х5
},

R
2)
= { х2
}
{
х2,
х4
}
{
х2,
х4,
х5
}
{
х2,
х4,
х5
} = = { х2,
х4,
х5
},

R
3)
= { х3
}
{
х4
}
{
х5
}
{
х5
} = { х3,
х4,
х5
},

R
4)
= { х4
}
{
х5
}
{
х5
} = { х4,
х5
},

R
5)
= { х5
}
{
х5
} = { х5
},

R(х6)=
6
}{
х3,
х7
}{
х4,
х6
}{
х3,
х5,
х7
}{
х4,
х5,
х6
} = { х3,
х4,
х5,
х6,
х7},

R
7)
= { х7
}
{
х4,
х6
}
{
х3,
х5,
х7
}
{
х4,
х5,
х6
} = = { х3,
х4,
х5,
х6,
х7
}.

Матрица
достижимости

имеет вид, как показано на рис.
4.1
,в.
Матрицу
достижимости

можно построить по матрице смежности
(рис.
4.1
,б),
формируя множества T+xi)для
каждой вершины xi
.

Матрица
контрдостижимости

Q = [ qij],
i, j =1, 2, … n, где n – число вершин графа,
определяется следующим образом:

qij=1,
если из вершины xj
можно достичь вершину xi
,

qij=0,
в противном случае.

Контрдостижимым
множеством Q(xi)
является множество таких вершин, что
из любой вершины этого множества можно
достичь вершину xi.
Аналогично построению достижимого
множества R (xi)можно
записать выражение для Q (xi):

Q
(xi)
= { xi
}
Г-1xi)

Г-2xi)

Г-pxi).

Таким
образом, видно, что Q (xi)
– это есть не что иное как обратное
транзитивное замыкание вершины xi
, т. е. Q (xi)
= Тxi).
Из определений очевидно, что столбец
xi
матрицы Q (в котором qij=1,
если xj

Q
(xi),
и qij=0
в противном случае) совпадает со строкой
xi
матрицы R, т. е. Q = RT,
где RT
– матрица, транспонированная к матрице
достижимости

R.

Матрица
контрдостижимости

показана на рис.
4.1
,г.

Следует
отметить, что поскольку все элементы
матриц R и Q равны 1 или 0, то каждую строку
можно хранить в двоичной форме, экономя
затраты памяти ЭВМ. Матрицы R и Q удобны
для обработки на ЭВМ, так как с
вычислительной точки зрения основными
операциями являются быстродействующие
логические операции.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]

  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #

Тема: Уравнения в идемпотентных полукольцах. Гомоморфизм графов. Алгоритмы обхода вершин графа.. Читаем, комментируем, решаем ДЗ.

Идемпотентные полукольца

Идемпотентным называется полукольцо,
$ (A, oplus, odot, mathbf{0}, mathbf{1})$,
в котором операция сложения идемпотентна:
$ (forall a in A)(a oplus a = a)$.

Примером таких полуколец являются:

В указанных полукольцах для каждого элемента можно ввести операцию итерации:

$ a^* = a^0 oplus a^1 oplus a^2 oplus dots$ — бесконечная сумма степеней
элементов. Под степенью $ n$ элемента понимается умножение его на себя $ n$ раз, а нулевая
степень равна единице полукольца по определению:
$ a^0 = mathbf{1}$.

Для приведённых выше полуколец итерация для любых элементов находится очень просто:

  • $ mathcal{B}_2$:
  • $ mathcal{R}^+$: для любого $ a$

Идемпотентные полукольца интересны тем, что в них можно решать уравнения вида:

Интересно, что такие необычные для арифметики уравнения как $ x = x$ или
$ x = x +mathbf{1}$ имеют здесь единственные решения:

Нахождение матрицы достижимости

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

Таким образом, для получения матрицы $ C$ необходимо решить $ n$ систем уравнений следующего
вида для
$ k = overline{1, n}$:

где $ a_{i j}$ — элементы матрицы смежности, а
$ varepsilon_{i j}$ — элементы единичной
матрицы. Решением каждой из систем будет $ k$-й столбец матрицы $ C$.

Рисунок 1:
Ориентированный граф

includegraphics[width=6cm]{graph_att.eps}

Рассмотрим пример. На рисунке 1 показан ориентированный граф из шести
вершин, матрица смежности которого равна:

1-й столбец

2-й столбец

3-6 столбцы

Полученная матрица достижимости примет вид:

Нахождение кратчайших путей

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

$ mathcal{G} = (V, E, varphi)$, где
$ varphi: E mapsto S setminus {0}$ — весовая функция над
некоторым полукольцом
$ (S, oplus, odot, 0, 1)$. Т.е. каждому ребру (или дуге)
сопоставляется число, символизирующее длину пути, сложнсть задачи или любую другую
стоимость перемещения между вершинами.

Рассмотрим граф, размеченный над полукольцом
$ mathcal{R}^+$ (см. рисунок 2).

Рисунок 2:
Граф с размеченными дугами

includegraphics[width=6cm]{graph_cost.eps}

Для такого графа можно записать матрицу $ A$ метог дуг (эта матрица аналогична
матрице смежностей), где

В нашем случае матрица меток дуг равна:

Матрица стоимостей $ C$ находится аналогично, с помощью решения $ n$ систем уравнений. Важно
отметить, что в данном случае вся работа ведётся в полукольце
$ mathcal{R}^+$, в котором
нулём полукольца является $ +infty$, а единицей — 0!

1-й столбец

2-й столбец

3-6 столбцы

Полученная матрица стоимостей будет иметь вид:

Гомоморфизм и автоморфизм графов

Примеры гомоморфизма и не гомоморфизма представлены на рисунке 3.

Рисунок 3:
Пример гомоморфизма и не гомоморфизма

includegraphics[width=12cm]{graph_homo.eps}

Аналогичным образом гомоморфизм определяется для ориентированных графов. Рассмотрим
соответвтующий пример: для заданного графа (см. рисунок 4) необходимо
найти все друхвершинные гомоморфные образы.

Рисунок 4:
Гомоморфизм в ориентированном графе

includegraphics[width=9cm]{ograph_homo.eps}

Изоморфизм графа на себя (перестановка вершин) называется автоморфизмом.

Для анализа возможных существующих автоморфизмов в неориентированных графах удобно
использовать дополнения к графам: граф с тем же набором вершин и набором дуг, не
принадлежащих исходному графу. На рисунке 5 показан исходный граф и
его дополнение.

Рисунок 5:
Автоморфизм в неориентированном графе

includegraphics[width=7cm]{graph_auto.eps}

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

Такие циклические перестановки можно записать в сокращённом виде:

Алгоритмы обхода графов. Поиск в глубину, поиск в ширину

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

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

С помощью рекурсии алгоритм поиска в глубину можно представить следующим образом:

bool visited[N] = {false, ... }; // массив флагов посещённых вершин
edge edges[M];                   // массив рёбер

// рекурсивная процедура поиска
void deep_search(vertex_t v) {

    visited[v] = true; // отметить вершину как посещённую     
    ...                // сделать с вершиной то, ради чего обход затевался

    for(size_t i = 0; i < M; i++) {
        edge e = edges[i];
        if(e.from == v && !visited[e.to]) {
             deep_search(e.to);
        }  
    }
}

Если стэк использовать явным образом, можно избавиться от рекурсивного вызова:

bool visited[N] = {false, ... }; // массив флагов посещённых вершин
edge edges[M];                   // массив рёбер
stack<vertex_t> s;               // стэк

// нерекурсивная процедура поиска
void deep_search(vertex_t v0) {

    s.push(v0);

    while(!s.empty()) {
        vertex_t v = s.pop();

        if(visited[v]) continue; // пропустить посещённую вершину

        visited[v] = true; // отметить вершину как посещённую
        ...                // сделать с вершиной что-то
   
        for(size_t i = 0; i < M; i++) {
            edge e = edges[i];
            if(e.from == v && !visited[e.to]) {
                s.push(e.to);
            }  
        }
    }
}

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

Рассмотрим пример поиска в глубину на неориентированном графе, изображённый не рисунке
6. Остовный подграф, получившийся при обходе вершин обозначен
пунктиром. Очевидно, что этот подграф является деревом с корнем в начальной вершине, а его
вид будет зависеть от порядка обхода вершин во внутреннем цикле рекурсивной процедуры.

Рисунок 6:
Поиск в глубину в неориентированном графе

includegraphics[width=12cm]{graph_deep.eps}

Порядок следования вершин и состояние стэка на каждом шаге:

Аналогично производится поиск в глубину на ориентированном графе (см. рисунок
7).

Рисунок 7:
Поиск в глубину в ориентированном графе

includegraphics[width=12cm]{ograph_deep.eps}

С помощью алгоритма поиска в глубину можно классифицировать дуги ориентированного графа
следующим образом:

остовные дуги

получаются непосредственно при поиске в глубину, образуют дерево (или
в общем случае лес), на рисунке обозначены пунктиром;

прямые дуги

соединяют предка и потомка в остовном пути, на рисунке обозначены
буквой F;

обратные дуги

соединяют потомка и предка в остовном пути, на рисунке обозначены
буквой B, интересно то, что каждая из таких дуг задаёт элементарный контур в графе;

перекрёстные дуги

все остальные дуги, на рисунке обозначены буквой C.

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

bool visited[N] = {false, ... };   // массив флагов посещённых вершин
edge edges[M];                     // массив рёбер
queue<vertex_t> q;                 // очередь

// процедура поиска
void wide_search(vertex_t v0) {

    q.push(v0);

    while(!q.empty()) {
        vertex_t v = q.pop();

        if(visited[v]) continue; // пропустить посещённую вершину
        visited[v] = true;       // отметить вершину как посещённую      
        ...                      // сделать с вершиной что-то
   
        for(size_t i = 0; i < M; i++) {
            edge e = edges[i];
            if(e.from == v && !visited[e.to])
               q.push(e.to);
        }
    }
}
Рисунок 8:
Поиск в ширину в неориентированном графе

includegraphics[width=13cm]{graph_wide.eps}

Рассмотрим пример поиска в ширину на неориентированном графе, изображённый не рисунке
8. Остовный подграф, получившийся при обходе вершин обозначен
пунктиром. Порядок следования вершин и состояние очереди на каждом шаге представлены в табице:

По матрице смежности нужно построить матрицу достижимости. Использую Алгоритм Флойда — Уоршелла:

for (int k = 0; k < n; k++)
        for (int i = 0; i < n; i++)
            for (int j = 0; j < n; j++)
                W[i][j] = (W[i][j] || (W[i][k] && W[k][j]));

На графе

0 1 0 0 0  
0 0 0 1 0  
0 1 0 0 0  
0 0 1 0 0  
1 0 1 1 0  

Данный алгоритм выдает:

0 1 1 1 0  
0 1 1 1 0  
0 1 1 1 0  
0 1 1 1 0  
1 1 1 1 0  

Но на сайте у них получилась немного другая матрица. T(D)
Где ошибка?

pegoopik's user avatar

pegoopik

3,43014 серебряных знаков51 бронзовый знак

задан 3 фев 2016 в 20:33

PaCman's user avatar

3

Никакой ошибки нет.

Посмотрите внимательно на граф:
введите сюда описание изображения
Из узлов 2 3 4 можно добраться «из себя в себя» по некоторому пути.
А из узлов 1 и 5 «в себя» не доберёшься.
Поэтому такая матрица и получается:

0 1 1 1 0  
0 1 1 1 0  
0 1 1 1 0  
0 1 1 1 0  
1 1 1 1 0  

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

ответ дан 18 фев 2016 в 9:44

pegoopik's user avatar

pegoopikpegoopik

3,43014 серебряных знаков51 бронзовый знак

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

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

  • Днс сервер не отвечает как исправить на телефоне
  • Как найти вязкость суспензии
  • Нитрат калия как найти массу
  • Как в 1с найти расчет чистых активов
  • Как найти расстояние между координатами двух точек

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

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