Что означает "Матрица пути" и "транзитивное замыкание" графа (направленное и Неориентированное)?

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

Что означает "Матрица пути" и "транзитивное замыкание" в случае как направленных, так и неориентированных графов?

2 ответов


Я думаю, что ответ ункулункулу довольно полный, но, учитывая JMSA, кажется неудовлетворенный, Я сделаю еще одну попытку.

давайте начнем не с матрицы пути, а с матрица смежности. Матрица смежности является стандартным представлением графа. Если adj является матрицей смежности для некоторого графа G, потом adj[i][j] ==1 если vertex Я примыкает в вершину j (т. е. есть ребро от Я to j), и 0 иначе. Другими словами,adj[i][j] == 1 если и только если мы можем получить от vertex Я в вершину j на один "шаг".

Теперь давайте определим другую матрицу, которую я назову adj2: adj2[i][j] = = 1 если и только если мы можем получить от vertex Я до вершины j на два шагов или меньше. Вы можете назвать это "двухэтапной матрицей смежности". Важно то, что adj2 можно определить в терминах adj:

def adj2(i,j):
    if adj(i,j) == 1:
        return 1
    else:
        for k in range(0,n): # where n is the number of vertices in G
            if adj(i,k) == 1 and adj(k,j) == 1:
                return 1
    return 0

то есть adj2[i][j] is 1 если Я примыкает к j (т. е. adj[i][j] ==1) или если существует какая-то другая вершина k такие, что вы можете выйти из Я to k и далее с k to j (т. е. adj[i][j] = = 1 и adj[k] [j] = = 1).

как вы можете себе представить, вы можете использовать ту же логику для определения "три шага" матрица смежности adj3, adj4, adj5 и так далее. Если вы продолжаете достаточно долго (например, до adjn, где n - количество вершин в графе), вы получаете матрицу, которая говорит вам есть ли путь любой длины из вершины Я в вершину j. Это, конечно, также будет матрицей пути графа: adjn[i][j] = = путь[i] [j] для всех i, j. (Примечание: не путайте матрицу пути с расстояние матрицы.)

математик сказал бы, что путь[i][j] является транзитивным замыканием adj[i][j] в графе G.

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

равенство ( = = ) и неравенство (, =) операторы являются знакомыми примерами таких функций. Они отличаются от adj, однако, в том, что они сами транзитивное. "f (i,j) является транзитивным" означает, что если f (i,j) == true и f (j,k) == true, потом f (i, k) == true. Вы знаете, что это свойство верно, скажем, для отношения" меньше, чем": от a и b , можно сделать вывод, что a . Транзитивное замыкание транзитивной функции f - это просто f.

adj не вообще транзитивным. Рассмотрим график:

v1---v2---v3

В графе adj может представлять функцию busBetween (city1, city2). Здесь есть автобус, на котором можно доехать от v1 до v2 (adj[1][2] == 1) и автобус от v2 до v3 (adj[2][3] == 1), но нет автобуса из v1 непосредственно в v3 (adj[1][2] == 0). Есть bus-path от v1 до v3, но v1 и v3 не являются соседними шинами. Для этого графика,adj не является транзитивным, поэтому путь, который является транзитивным замыканием adj отличается от adj.

если мы добавим ребро между v1 и v3,

v1---v2---v3
 \        /
   \----/

затем adj становится транзитивным: во всех возможных случаях, adj[i][j] == 1 и adj[j][k] = = 1 подразумевает adj[i][k] == 1. Для этого графика,путь и adj то же самое. То, что график неориентирован, соответствует "симметричность" имущество. Если бы мы добавили петли к каждой вершине так, чтобы v1, v2 и v3 были смежны друг с другом, результирующий граф был бы транзитивным, симметричным и "рефлексивные", и можно сказать, что представляет равенство ( = = ) над множеством {1,2,3}.

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

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


Матрица Путь в теории графов это матрица размером n*n, где n - количество вершин графа. Элемент iой строки j - я колонна-это 1 если есть путь от iой вершины к j - й на графике, и 0 если нет.

на Алгоритм Флойда часто используется для вычисления матрицы путь.

определение не различает направленный и неориентированный графики, но ясно, что для неориентированных графов матрица всегда симметрична.

Транзитивное Замыкание аналогичная концепция,но она из несколько другой области. Представьте, что у вас есть набор объектов, и для некоторых из них вы знаете, что один определенно лучше другого, поэтому вы можете написать a > b (">"- сокращение от "Лучше"). Определенно вы должны предположить, что если a > b и b > c затем a > c. Это называется правило транзитивности. Тогда для любых двух объектов вы хотите знать, является ли один из них лучше другого, или это неизвестно. Это закрытие: сначала у вас есть отношение, которое, возможно, не транзитивно, но после предположения транзитивности вы можете завершить его до транзитивного.

для решения этой задачи строится ориентированный граф, вершина которого соответствует каждому из упомянутых объектов (a, b, c, etc.) где направленный край u -> v существует тогда и только тогда, когда u > v. Затем вы можете построить матрицу пути, определенную в первом абзаце, и она даст вам ответ: очевидно, что существование пути между двумя вершинами эквивалентно существованию цепочки отношений как u > a > b > ... > z > v Итак, по правилу транзитивности,u > v.

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